From 5ba8e60ee29acc6fced692121a2fedb8b68e6e04 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Wed, 5 Jun 2024 13:49:47 +0200 Subject: [PATCH 01/13] Add more optimisation flags, fix a couple of bugs, add more platforms Signed-off-by: Omar Shrit --- board/flags-config.cmake | 48 ++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/board/flags-config.cmake b/board/flags-config.cmake index 94b2060b44..17d6f0ae3c 100644 --- a/board/flags-config.cmake +++ b/board/flags-config.cmake @@ -4,7 +4,8 @@ # footprints. # Set generic minimization flags for all platforms. -# These flags are the same for all cross-compilation cases. +# These flags are the same for all cross-compilation cases and they are +# mainly to reduce the binary footprint. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -fdata-sections -ffunction-sections") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fomit-frame-pointer -fno-unwind-tables") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-asynchronous-unwind-tables -fvisibility=hidden") @@ -19,35 +20,58 @@ set(BOARD_NAME "" CACHE STRING "Specify Board name to optimize for.") string(TOUPPER ${BOARD_NAME} BOARD) # Set specific platforms CMAKE CXX flags. -if(BOARD MATCHES "RPI0" OR BOARD MATCHES "RPI1") +if(BOARD MATCHES "RPI0" OR BOARD MATCHES "RPI1" OR BOARD 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(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "ARMV6") set(OPENBLAS_BINARY "32") -elseif(BOARD MATCHES "RPI2") +elseif(BOARD MATCHES "RPI2" OR BOARD 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(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "ARMV7") set(OPENBLAS_BINARY "32") -elseif(BOARD MATCHES "RPI3") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a53") +elseif(BOARD 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(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") + set(OPENBLAS_TARGET "ARMV7") + set(OPENBLAS_BINARY "32") +elseif(BOARD 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(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") + set(OPENBLAS_TARGET "CORTEXA9") + set(OPENBLAS_BINARY "32") +elseif(BOARD 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(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") + set(OPENBLAS_TARGET "CORTEXA15") + set(OPENBLAS_BINARY "32") +elseif(BOARD MATCHES "RPI3" OR BOARD MATCHES "CORTEXA53") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a53 -mfloat-abi=hard") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-fp-armv8 -mneon-for-64bit") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "CORTEXA53") set(OPENBLAS_BINARY "64") -elseif(BOARD MATCHES "RPI4") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a72") +elseif(BOARD MATCHES "RPI4" OR BOARD MATCHES "CORTEXA72") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a72 -mfloat-abi=hard") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-fp-armv8 -mneon-for-64bit") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "CORTEXA72") set(OPENBLAS_BINARY "64") +elseif(BOARD MATCHES "JETSONAGX" OR BOARD MATCHES "CORTEXA76") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a76 -mfloat-abi=hard") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-fp-armv8 -mneon-for-64bit") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") + set(OPENBLAS_TARGET "CORTEXA76") + set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "BV") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "RISCV64_GENERIC") set(OPENBLAS_BINARY "64") -elseif(BOARD MATCHES "JETSONAGX") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -matune=cortex-a76") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") - set(OPENBLAS_TARGET "ARM8") - set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "KATAMI") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=pentium3") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") From b0ef01a11daaad4ac58f6ed51fb0234893794517 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Wed, 5 Jun 2024 17:42:27 +0200 Subject: [PATCH 02/13] Add two risc-v options Signed-off-by: Omar Shrit --- board/flags-config.cmake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/board/flags-config.cmake b/board/flags-config.cmake index 17d6f0ae3c..9789bd7aa7 100644 --- a/board/flags-config.cmake +++ b/board/flags-config.cmake @@ -72,6 +72,16 @@ elseif(BOARD MATCHES "BV") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "RISCV64_GENERIC") set(OPENBLAS_BINARY "64") +elseif(BOARD MATCHES "C906") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=thead-c906") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") + set(OPENBLAS_TARGET "RISCV64_GENERIC") + set(OPENBLAS_BINARY "64") +elseif(BOARD MATCHES "x280") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=sifive-x280") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") + set(OPENBLAS_TARGET "RISCV64_GENERIC") + set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "KATAMI") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=pentium3") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") From b4a878b4b633246fa12d90ee51a6b37e7c9a66bf Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Wed, 5 Jun 2024 18:28:37 +0200 Subject: [PATCH 03/13] OpenBLAS does support x280 Signed-off-by: Omar Shrit --- board/flags-config.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/board/flags-config.cmake b/board/flags-config.cmake index 9789bd7aa7..c8c402dbed 100644 --- a/board/flags-config.cmake +++ b/board/flags-config.cmake @@ -80,7 +80,7 @@ elseif(BOARD MATCHES "C906") elseif(BOARD MATCHES "x280") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=sifive-x280") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") - set(OPENBLAS_TARGET "RISCV64_GENERIC") + set(OPENBLAS_TARGET "x280") set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "KATAMI") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=pentium3") From 3d973c163718eb0dab86300368e72ded02d6e726 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Fri, 7 Jun 2024 08:02:04 +0200 Subject: [PATCH 04/13] Disable -O3 since we need to use -Os, also increase openblas min version Signed-off-by: Omar Shrit --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 75f6fe1b9d..69e7344903 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -249,7 +249,9 @@ if (DEBUG) else() add_definitions(-DNDEBUG) if (NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") + if (NOT CMAKE_CROSSCOMPILING) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") + endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -O3") else () set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O3") @@ -283,7 +285,7 @@ endif() # Download and compile OpenBLAS if we are cross compiling mlpack for a specific # architecture. The function takes the version of OpenBLAS as variable. if (CMAKE_CROSSCOMPILING) - search_openblas(0.3.13) + search_openblas(0.3.26) endif() if (NOT DOWNLOAD_DEPENDENCIES) From 1554508060df63817ab4a659805baf77b9bf215e Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Fri, 7 Jun 2024 09:34:42 +0200 Subject: [PATCH 05/13] Add various flags to reduce the bianry size Signed-off-by: Omar Shrit --- board/flags-config.cmake | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/board/flags-config.cmake b/board/flags-config.cmake index c8c402dbed..ec38e994f6 100644 --- a/board/flags-config.cmake +++ b/board/flags-config.cmake @@ -6,15 +6,18 @@ # Set generic minimization flags for all platforms. # These flags are the same for all cross-compilation cases and they are # mainly to reduce the binary footprint. -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -fdata-sections -ffunction-sections") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -s -fdata-sections -ffunction-sections") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fomit-frame-pointer -fno-unwind-tables") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-asynchronous-unwind-tables -fvisibility=hidden") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fshort-enums -finline-small-functions") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -findirect-inlining -fno-common") -#-flto -fuse-ld=gold # There is an issue with gold link when compiling on -# Ubuntu 16. At that point gcc linker did not integrate the flto support -# inside and it was a separate plugin that need to be added. Therefore, -# this can be added when mlpack Azure CI moves toward Ubuntu 20. +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmerge-all-constants -fno-ident") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-unroll-loops -fno-math-errno") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-stack-protector -Wl,-z,norelro") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto -Wl,--hash-style=gnu -Wl,--build-id=none") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostartfiles") ## this get us 400KB alone +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-nmagic,-Bsymbolic") + set(BOARD_NAME "" CACHE STRING "Specify Board name to optimize for.") string(TOUPPER ${BOARD_NAME} BOARD) From 3c415cf1c9a4a022f78be2330e70177503762080 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Sat, 8 Jun 2024 20:14:24 +0200 Subject: [PATCH 06/13] Optimize better for binary footprint Signed-off-by: Omar Shrit --- CMake/ConfigureCrossCompile.cmake | 1 + CMakeLists.txt | 2 +- board/flags-config.cmake | 27 ++++++++------------------- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/CMake/ConfigureCrossCompile.cmake b/CMake/ConfigureCrossCompile.cmake index a320d32932..0a39b829ed 100644 --- a/CMake/ConfigureCrossCompile.cmake +++ b/CMake/ConfigureCrossCompile.cmake @@ -28,6 +28,7 @@ macro(search_openblas version) get_deps(https://github.com/xianyi/OpenBLAS/releases/download/v${version}/OpenBLAS-${version}.tar.gz OpenBLAS OpenBLAS-${version}.tar.gz) if (NOT MSVC) if (NOT EXISTS "${CMAKE_BINARY_DIR}/deps/OpenBLAS-${version}/libopenblas.a") + set(ENV{COMMON_OPT} "${CMAKE_OPENBLAS_FLAGS}") # Pass our flags to OpenBLAS execute_process(COMMAND make TARGET=${OPENBLAS_TARGET} BINARY=${OPENBLAS_BINARY} HOSTCC=gcc CC=${CMAKE_C_COMPILER} FC=${CMAKE_FORTRAN_COMPILER} NO_SHARED=1 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/deps/OpenBLAS-${version}) endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 69e7344903..7ff506f01f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -327,7 +327,7 @@ if (StbImage_FOUND) # Make sure that we can link STB in multiple translation units. include(CMake/TestStaticSTB.cmake) - if (NOT CMAKE_HAS_WORKING_STATIC_STB) + if (NOT CMAKE_HAS_WORKING_STATIC_STB AND NOT CMAKE_CROSSCOMPILING) message(FATAL_ERROR "STB implementations's static mode cannot link across " "multiple translation units! Try upgrading your STB implementation, " "or using the auto-downloader (set DOWNLOAD_DEPENDENCIES=ON in the " diff --git a/board/flags-config.cmake b/board/flags-config.cmake index ec38e994f6..0f661805d2 100644 --- a/board/flags-config.cmake +++ b/board/flags-config.cmake @@ -13,11 +13,14 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fshort-enums -finline-small-functions") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -findirect-inlining -fno-common") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmerge-all-constants -fno-ident") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-unroll-loops -fno-math-errno") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-stack-protector -Wl,-z,norelro") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto -Wl,--hash-style=gnu -Wl,--build-id=none") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostartfiles") ## this get us 400KB alone -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-nmagic,-Bsymbolic") - +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-stack-protector") +set(CMAKE_OPENBLAS_FLAGS "${CMAKE_CXX_FLAGS}") # OpenBLAS does not supoport flto +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--hash-style=gnu -Wl,--build-id=none") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,norelro") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") +## Keep the following flag in comment, it will be relevant in the case of MCU's +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-nmagic,-Bsymbolic -nostartfiles") set(BOARD_NAME "" CACHE STRING "Specify Board name to optimize for.") string(TOUPPER ${BOARD_NAME} BOARD) @@ -26,78 +29,64 @@ string(TOUPPER ${BOARD_NAME} BOARD) if(BOARD MATCHES "RPI0" OR BOARD MATCHES "RPI1" OR BOARD 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(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "ARMV6") set(OPENBLAS_BINARY "32") elseif(BOARD MATCHES "RPI2" OR BOARD 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(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "ARMV7") set(OPENBLAS_BINARY "32") elseif(BOARD 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(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "ARMV7") set(OPENBLAS_BINARY "32") elseif(BOARD 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(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "CORTEXA9") set(OPENBLAS_BINARY "32") elseif(BOARD 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(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "CORTEXA15") set(OPENBLAS_BINARY "32") elseif(BOARD MATCHES "RPI3" OR BOARD MATCHES "CORTEXA53") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a53 -mfloat-abi=hard") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-fp-armv8 -mneon-for-64bit") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "CORTEXA53") set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "RPI4" OR BOARD MATCHES "CORTEXA72") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a72 -mfloat-abi=hard") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-fp-armv8 -mneon-for-64bit") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "CORTEXA72") set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "JETSONAGX" OR BOARD MATCHES "CORTEXA76") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a76 -mfloat-abi=hard") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-fp-armv8 -mneon-for-64bit") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "CORTEXA76") set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "BV") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "RISCV64_GENERIC") set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "C906") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=thead-c906") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "RISCV64_GENERIC") set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "x280") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=sifive-x280") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "x280") set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "KATAMI") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=pentium3") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "KATAMI") set(OPENBLAS_BINARY "32") elseif(BOARD MATCHES "COPPERMINE") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=pentium3") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "COPPERMINE") set(OPENBLAS_BINARY "32") elseif(BOARD MATCHES "NORTHWOOD") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=pentium4") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") set(OPENBLAS_TARGET "NORTHWOOD") set(OPENBLAS_BINARY "32") elseif(BOARD) From 8e3360dba78393cbac0b647573306de828b9e0b3 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Mon, 10 Jun 2024 12:39:13 +0200 Subject: [PATCH 07/13] Apply the same flags to C as well Signed-off-by: Omar Shrit --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ff506f01f..d5cc05c8ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -251,8 +251,9 @@ else() if (NOT MSVC) if (NOT CMAKE_CROSSCOMPILING) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -O3") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -O3") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") else () set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O3") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /O3") From ad84e0d2fdee0c8a84987a4fd9a9cba39958c899 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Mon, 17 Jun 2024 11:59:19 +0200 Subject: [PATCH 08/13] Remove the STB unecessary flag Signed-off-by: Omar Shrit --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d5cc05c8ea..43bf312d01 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -328,7 +328,7 @@ if (StbImage_FOUND) # Make sure that we can link STB in multiple translation units. include(CMake/TestStaticSTB.cmake) - if (NOT CMAKE_HAS_WORKING_STATIC_STB AND NOT CMAKE_CROSSCOMPILING) + if (NOT CMAKE_HAS_WORKING_STATIC_STB) message(FATAL_ERROR "STB implementations's static mode cannot link across " "multiple translation units! Try upgrading your STB implementation, " "or using the auto-downloader (set DOWNLOAD_DEPENDENCIES=ON in the " From 54645e454ae243acd4d04357ca1a2c97a6507f33 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Mon, 17 Jun 2024 12:23:45 +0200 Subject: [PATCH 09/13] We can not check working atomic for crosscompiled version Signed-off-by: Omar Shrit --- CMake/CheckAtomic.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMake/CheckAtomic.cmake b/CMake/CheckAtomic.cmake index 3985c9aa0a..2e62c5bdf0 100644 --- a/CMake/CheckAtomic.cmake +++ b/CMake/CheckAtomic.cmake @@ -70,7 +70,9 @@ if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64) if(HAVE_CXX_LIBATOMICS64) list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") - check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB) + if (NOT CMAKE_CROSSCOMPILING) + check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB) + endif() if (NOT HAVE_CXX_ATOMICS64_WITH_LIB) message(FATAL_ERROR "Host compiler must support std::atomic!") endif() From a7e90eb3e5b793ccf0d58d38bce3baeca91e8229 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Mon, 17 Jun 2024 12:30:40 +0200 Subject: [PATCH 10/13] Ractify the condition to include the results Signed-off-by: Omar Shrit --- CMake/CheckAtomic.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMake/CheckAtomic.cmake b/CMake/CheckAtomic.cmake index 2e62c5bdf0..145518d4a3 100644 --- a/CMake/CheckAtomic.cmake +++ b/CMake/CheckAtomic.cmake @@ -72,9 +72,9 @@ if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") if (NOT CMAKE_CROSSCOMPILING) check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB) - endif() - if (NOT HAVE_CXX_ATOMICS64_WITH_LIB) - message(FATAL_ERROR "Host compiler must support std::atomic!") + if (NOT HAVE_CXX_ATOMICS64_WITH_LIB) + message(FATAL_ERROR "Host compiler must support std::atomic!") + endif() endif() else() message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.") From 30c3bd0dd47751614476776f7c067932d7572531 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Tue, 9 Jul 2024 13:41:41 +0200 Subject: [PATCH 11/13] Remove deprecated flags and use new ones Signed-off-by: Omar Shrit --- board/flags-config.cmake | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/board/flags-config.cmake b/board/flags-config.cmake index 0f661805d2..5999ab86ac 100644 --- a/board/flags-config.cmake +++ b/board/flags-config.cmake @@ -19,7 +19,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--hash-style=gnu -Wl,--build-id=none") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,norelro") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") -## Keep the following flag in comment, it will be relevant in the case of MCU's +## 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") set(BOARD_NAME "" CACHE STRING "Specify Board name to optimize for.") @@ -52,18 +52,15 @@ elseif(BOARD MATCHES "CORTEXA15") set(OPENBLAS_TARGET "CORTEXA15") set(OPENBLAS_BINARY "32") elseif(BOARD MATCHES "RPI3" OR BOARD MATCHES "CORTEXA53") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a53 -mfloat-abi=hard") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-fp-armv8 -mneon-for-64bit") + 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") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a72 -mfloat-abi=hard") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-fp-armv8 -mneon-for-64bit") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a72 -ftree-vectorize") set(OPENBLAS_TARGET "CORTEXA72") set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "JETSONAGX" OR BOARD MATCHES "CORTEXA76") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a76 -mfloat-abi=hard") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-fp-armv8 -mneon-for-64bit") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=cortex-a76 -ftree-vectorize") set(OPENBLAS_TARGET "CORTEXA76") set(OPENBLAS_BINARY "64") elseif(BOARD MATCHES "BV") From 48162f2913baee09593e307398f6f117d0f544ac Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Thu, 11 Jul 2024 10:56:17 +0200 Subject: [PATCH 12/13] Adding an else to make the condition better Signed-off-by: Omar Shrit --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43bf312d01..5ec830d509 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -252,8 +252,9 @@ else() if (NOT CMAKE_CROSSCOMPILING) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -O3") + else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") else () set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O3") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /O3") From 62017342f67c2e90591c139d712a17ccc222b77a Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Thu, 11 Jul 2024 12:49:00 +0200 Subject: [PATCH 13/13] Remove the restriction on CheckAtomic in the case of crosscompilation Signed-off-by: Omar Shrit --- CMake/CheckAtomic.cmake | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/CMake/CheckAtomic.cmake b/CMake/CheckAtomic.cmake index 145518d4a3..3985c9aa0a 100644 --- a/CMake/CheckAtomic.cmake +++ b/CMake/CheckAtomic.cmake @@ -70,11 +70,9 @@ if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64) if(HAVE_CXX_LIBATOMICS64) list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") - if (NOT CMAKE_CROSSCOMPILING) - check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB) - if (NOT HAVE_CXX_ATOMICS64_WITH_LIB) - message(FATAL_ERROR "Host compiler must support std::atomic!") - endif() + check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB) + if (NOT HAVE_CXX_ATOMICS64_WITH_LIB) + message(FATAL_ERROR "Host compiler must support std::atomic!") endif() else() message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.")