From 6e77661284eb7fc5de9d5900affcc13673e5e388 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Sat, 4 Jan 2025 23:50:04 +0100 Subject: [PATCH 1/2] Change BOARD_NAME to ARCH_NAME Signed-off-by: Omar Shrit --- CMake/ConfigureCrossCompile.cmake | 2 +- CMake/crosscompile-arch-config.cmake | 42 +++++++++++++++++----------- doc/embedded/crosscompile_armv7.md | 2 +- doc/embedded/supported_boards.md | 6 ++-- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/CMake/ConfigureCrossCompile.cmake b/CMake/ConfigureCrossCompile.cmake index 90fc5caedd..c2df0f51bc 100644 --- a/CMake/ConfigureCrossCompile.cmake +++ b/CMake/ConfigureCrossCompile.cmake @@ -4,7 +4,7 @@ # This file will compile OpenBLAS if it is downloaded and it is not # available on your system in order to find the BLAS library. If OpenBLAS will # be compiled, the OPENBLAS_TARGET variable must be set. This can be done -# by, e.g., setting BOARD_NAME (which will set OPENBLAS_TARGET in +# by, e.g., setting ARCH_NAME (which will set OPENBLAS_TARGET in # `flags-config.cmake`). if (CMAKE_CROSSCOMPILING) diff --git a/CMake/crosscompile-arch-config.cmake b/CMake/crosscompile-arch-config.cmake index 73e3c49edd..6d3200ebd8 100644 --- a/CMake/crosscompile-arch-config.cmake +++ b/CMake/crosscompile-arch-config.cmake @@ -22,71 +22,79 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") ## Keep the following flag in comment, they might be relevant in the case of MCU's #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-nmagic,-Bsymbolic -nostartfiles") +# BOARD_NAME is deprecated and will be removed in mlpack 5. +# please use ARCH_NAME instead. set(BOARD_NAME "" CACHE STRING "Specify Board name to optimize for.") -string(TOUPPER ${BOARD_NAME} BOARD) +set(ARCH_NAME "" CACHE STRING "Specify Board name to optimize for.") + +if (BOARD_NAME) + set(ARCH_NAME "${BOARD_NAME}") +endif() + +string(TOUPPER ${ARCH_NAME} ARCH) # Set specific platforms CMAKE CXX flags. -if(BOARD MATCHES "RPI0" OR BOARD MATCHES "RPI1" OR BOARD MATCHES "ARM11") +if(ARCH MATCHES "RPI0" OR ARCH MATCHES "RPI1" OR ARCH MATCHES "ARM11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=arm1176jzf-s") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=arm1176jzf-s -mfloat-abi=hard -mfpu=vfp") set(OPENBLAS_TARGET "ARMV6") set(OPENBLAS_BINARY "32") -elseif(BOARD MATCHES "RPI2" OR BOARD MATCHES "CORTEXA7") +elseif(ARCH MATCHES "RPI2" OR ARCH MATCHES "CORTEXA7") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a7") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=hard -mfpu=neon-vfpv4") set(OPENBLAS_TARGET "ARMV7") set(OPENBLAS_BINARY "32") -elseif(BOARD MATCHES "CORTEXA8") +elseif(ARCH MATCHES "CORTEXA8") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a8") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=hard -mfpu=neon") set(OPENBLAS_TARGET "ARMV7") set(OPENBLAS_BINARY "32") -elseif(BOARD MATCHES "CORTEXA9") +elseif(ARCH MATCHES "CORTEXA9") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a9") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=hard -mfpu=neon") set(OPENBLAS_TARGET "CORTEXA9") set(OPENBLAS_BINARY "32") -elseif(BOARD MATCHES "CORTEXA15") +elseif(ARCH MATCHES "CORTEXA15") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a15") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=hard -mfpu=neon") set(OPENBLAS_TARGET "CORTEXA15") set(OPENBLAS_BINARY "32") -elseif(BOARD MATCHES "RPI3" OR BOARD MATCHES "CORTEXA53") +elseif(ARCH MATCHES "RPI3" OR ARCH MATCHES "CORTEXA53") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a53 -ftree-vectorize") set(OPENBLAS_TARGET "CORTEXA53") set(OPENBLAS_BINARY "64") -elseif(BOARD MATCHES "RPI4" OR BOARD MATCHES "CORTEXA72") +elseif(ARCH MATCHES "RPI4" OR ARCH MATCHES "CORTEXA72") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8.2-a+crypto+fp16+rcpc+dotprod -fasynchronous-unwind-tables") set(OPENBLAS_TARGET "CORTEXA72") set(OPENBLAS_BINARY "64") -elseif(BOARD MATCHES "JETSONAGX" OR BOARD MATCHES "CORTEXA76") +elseif(ARCH MATCHES "JETSONAGX" OR ARCH MATCHES "CORTEXA76") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a76 -ftree-vectorize") set(OPENBLAS_TARGET "CORTEXA76") set(OPENBLAS_BINARY "64") -elseif(BOARD MATCHES "BV") +elseif(ARCH MATCHES "BV") set(OPENBLAS_TARGET "RISCV64_GENERIC") set(OPENBLAS_BINARY "64") -elseif(BOARD MATCHES "C906") +elseif(ARCH MATCHES "C906") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=thead-c906") set(OPENBLAS_TARGET "RISCV64_GENERIC") set(OPENBLAS_BINARY "64") -elseif(BOARD MATCHES "x280") +elseif(ARCH MATCHES "x280") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=sifive-x280") set(OPENBLAS_TARGET "x280") set(OPENBLAS_BINARY "64") -elseif(BOARD MATCHES "KATAMI") +elseif(ARCH MATCHES "KATAMI") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=pentium3") set(OPENBLAS_TARGET "KATAMI") set(OPENBLAS_BINARY "32") -elseif(BOARD MATCHES "COPPERMINE") +elseif(ARCH MATCHES "COPPERMINE") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=pentium3") set(OPENBLAS_TARGET "COPPERMINE") set(OPENBLAS_BINARY "32") -elseif(BOARD MATCHES "NORTHWOOD") +elseif(ARCH MATCHES "NORTHWOOD") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=pentium4") set(OPENBLAS_TARGET "NORTHWOOD") set(OPENBLAS_BINARY "32") -elseif(BOARD) +elseif(ARCH) ## TODO: update documentation with a list of the supported boards. - message(FATAL_ERROR "Given BOARD_NAME is not known; please choose a supported board from the list") + message(FATAL_ERROR "Given ARCH_NAME is not known; please choose a supported board from the list") endif() diff --git a/doc/embedded/crosscompile_armv7.md b/doc/embedded/crosscompile_armv7.md index 858f690e1e..e3aaf44a13 100644 --- a/doc/embedded/crosscompile_armv7.md +++ b/doc/embedded/crosscompile_armv7.md @@ -112,7 +112,7 @@ cross-compilation toolchain. ```sh cmake \ -DBUILD_TESTS=ON \ - -DBOARD_NAME="RPI2" \ + -DARCH_NAME="RPI2" \ -DCMAKE_CROSSCOMPILING=ON \ -DCMAKE_TOOLCHAIN_FILE=../CMake/crosscompile-toolchain.cmake \ -DTOOLCHAIN_PREFIX=/path/to/bootlin/toolchain/armv7-eabihf--glibc--stable-2024.02-1/bin/arm-buildroot-linux-gnueabihf- \ diff --git a/doc/embedded/supported_boards.md b/doc/embedded/supported_boards.md index d22bd1f812..a59f2fe5f0 100644 --- a/doc/embedded/supported_boards.md +++ b/doc/embedded/supported_boards.md @@ -6,7 +6,7 @@ functional operating system (e.g., Linux, MacOS, Windows) with compatible ABI on both the host and the target. In addition, your objective is to create an embedded ABI (eabi). For now, this guide does not support none-eabi or bare-metal C/C++. The following table refers only to possible values of -`BOARD_NAME` CMake flag that needs to be specified before the compilation +`ARCH_NAME` CMake flag that needs to be specified before the compilation process starts. If your device has a fully functional package manager such as apt (for Debian @@ -37,7 +37,7 @@ adapt the CMake command below. ***Don't forget to change ```sh cmake \ -DBUILD_TESTS=ON \ - -DBOARD_NAME=(Check the following table) \ + -DARCH_NAME=(Check the following table) \ -DCMAKE_CROSSCOMPILING=ON \ -DCMAKE_TOOLCHAIN_FILE=../CMake/crosscompile-toolchain.cmake \ -DTOOLCHAIN_PREFIX=(Check the following table) \ @@ -46,7 +46,7 @@ cmake \ ``` |----------------------------------------------------------------------------- -| `BOARD_NAME` | link to crosscompiler | CMake command | Example applications | +| `ARCH_NAME` | link to crosscompiler | CMake command | Example applications | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ARM11 | [Bootlin toolchain link](https://toolchains.bootlin.com/releases_armv6-eabihf.html) | [Sysroot and toolchain prefix](#arm11) | [ARM11 on Wikipedia](https://en.wikipedia.org/wiki/ARM11) | |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| From c4269a0876ac3e295ef5ebacd99e06f6ac7be0ca Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Wed, 8 Jan 2025 15:13:59 +0100 Subject: [PATCH 2/2] Update CMake/crosscompile-arch-config.cmake Co-authored-by: Ryan Curtin --- CMake/crosscompile-arch-config.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMake/crosscompile-arch-config.cmake b/CMake/crosscompile-arch-config.cmake index 6d3200ebd8..76345b8464 100644 --- a/CMake/crosscompile-arch-config.cmake +++ b/CMake/crosscompile-arch-config.cmake @@ -25,7 +25,7 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") # BOARD_NAME is deprecated and will be removed in mlpack 5. # please use ARCH_NAME instead. set(BOARD_NAME "" CACHE STRING "Specify Board name to optimize for.") -set(ARCH_NAME "" CACHE STRING "Specify Board name to optimize for.") +set(ARCH_NAME "" CACHE STRING "Name of embedded architecture to optimize for.") if (BOARD_NAME) set(ARCH_NAME "${BOARD_NAME}")