|
1 | 1 | # CMake toolchain file for cross-compiling to ARM64 (aarch64) on Debian/Ubuntu |
2 | 2 | # Usage: cmake -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/aarch64-linux-gnu.cmake |
3 | 3 |
|
4 | | -# The name of the target operating system |
5 | 4 | set(CMAKE_SYSTEM_NAME Linux) |
6 | | - |
7 | | -# Set processor type |
8 | 5 | set(CMAKE_SYSTEM_PROCESSOR aarch64) |
9 | 6 |
|
10 | | -# Set compiler prefix |
11 | | -set(COMPILER_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) |
| 7 | +# Use GCC version from environment variable if available |
| 8 | +if(DEFINED ENV{LINUX_GCC_VERSION}) # cmake-lint: disable=W0106 |
| 9 | + set(LINUX_GCC_VERSION "-$ENV{LINUX_GCC_VERSION}") |
| 10 | +else() |
| 11 | + set(LINUX_GCC_VERSION "") # default to no version suffix |
| 12 | +endif() |
| 13 | + |
| 14 | +# Set compiler prefix and target |
| 15 | +set(CMAKE_C_COMPILER_TARGET ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) |
| 16 | +set(CMAKE_CXX_COMPILER_TARGET ${CMAKE_C_COMPILER_TARGET}) |
12 | 17 |
|
13 | 18 | # Which compilers to use for C and C++ |
14 | | -set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc) |
15 | | -set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++) |
16 | | -set(CMAKE_ASM_COMPILER ${COMPILER_PREFIX}-gcc) |
| 19 | +set(CMAKE_C_COMPILER ${CMAKE_C_COMPILER_TARGET}-gcc${LINUX_GCC_VERSION}) |
| 20 | +set(CMAKE_CXX_COMPILER ${CMAKE_C_COMPILER_TARGET}-g++${LINUX_GCC_VERSION}) |
| 21 | +set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER_TARGET}-gcc${LINUX_GCC_VERSION}) |
17 | 22 |
|
18 | 23 | # Here is the target environment located |
19 | | -set(CMAKE_FIND_ROOT_PATH /usr/${COMPILER_PREFIX}) |
20 | | - |
21 | | -# Adjust the default behavior of the FIND_XXX() commands: |
22 | | -# search headers and libraries in the target environment, search |
23 | | -# programs in the host environment |
24 | | -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) |
25 | | -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) |
26 | | -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) |
27 | | -set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) |
28 | | - |
29 | | -# Set pkg-config environment for cross-compilation |
30 | | -set(ENV{PKG_CONFIG_PATH} "/usr/lib/${COMPILER_PREFIX}/pkgconfig:/usr/share/pkgconfig") |
31 | | -set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/${COMPILER_PREFIX}/pkgconfig:/usr/share/pkgconfig") |
32 | | -set(ENV{PKG_CONFIG_SYSROOT_DIR} "/usr/${COMPILER_PREFIX}") |
33 | | - |
34 | | -# Set compiler flags for cross-compilation |
35 | | -set(CMAKE_C_FLAGS_INIT "-march=armv8-a") |
36 | | -set(CMAKE_CXX_FLAGS_INIT "-march=armv8-a") |
37 | | - |
38 | | -# Explicitly set OpenSSL paths for cross-compilation |
39 | | -set(OPENSSL_ROOT_DIR "/usr/${COMPILER_PREFIX}") |
40 | | -set(OPENSSL_INCLUDE_DIR "/usr/${COMPILER_PREFIX}/include") |
41 | | -set(OPENSSL_CRYPTO_LIBRARY "/usr/${COMPILER_PREFIX}/lib/libcrypto.so") |
42 | | -set(OPENSSL_SSL_LIBRARY "/usr/${COMPILER_PREFIX}/lib/libssl.so") |
43 | | - |
44 | | -# Additional library paths |
45 | | -set(CMAKE_LIBRARY_PATH "/usr/${COMPILER_PREFIX}/lib" ${CMAKE_LIBRARY_PATH}) |
46 | | -set(CMAKE_INCLUDE_PATH "/usr/${COMPILER_PREFIX}/include" ${CMAKE_INCLUDE_PATH}) |
| 24 | +set(CMAKE_FIND_ROOT_PATH /usr/${CMAKE_C_COMPILER_TARGET}) |
47 | 25 |
|
48 | 26 | # Packaging |
49 | 27 | set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") |
0 commit comments