Linux cross-compile x64 to aarch64

Unless anyone can convince me of otherwise, I’ve given up on cmake being able to cross-compile on Linux from x64 to aarch64.

I started this topic about it earlier on a C group:

https://groups.google.com/forum/#!topic/comp.lang.c/B9msZxHI-as

I think tomorrow I will take the CMakeLists.txt files, generate GNU Makefiles from them, and then dismantle the GNU Makefiles so that I have simple one-liner commands like:

aarch64-linux-gnu-gcc -o interface.o -c interface.c
aarch64-linux-gnu-gcc -o computation.o -c computation.c
aarch64-linux-gnu-gcc -o calculator interface.o computation.o

Then I’ll just collect all these one-liner commands together and put them in a script, “make.sh”.

I even tried editing the cmake source code for “try_compile” in order to try get rid of the error about not being able to find an intermediary executable file, but I didn’t get anywhere.

I haven’t heard of anyone successfully cross-compiling with cmake on Linux from x64 to aarch64.

Unless anyone can convince me of otherwise, I’ve given up on cmake
being able to cross-compile on Linux from x64 to aarch64.

I’m doing this every day and it works fine. Documentation is here:

https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html

1 Like

I’ve read the manual and tried a few different “toolchain” files. Still can’t make an aarch64 build on a x64 host (both Linux).

Mine looks like this:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

# specify the cross compiler
set(CMAKE_C_COMPILER /somewhere/bin/aarch64-unknown-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER /somewhere/bin/aarch64-unknown-linux-gnueabi-g++)

# where is the target environment
set(CMAKE_FIND_ROOT_PATH /somewhere/sysroot)
set(CMAKE_SYSROOT /somewhere/sysroot)

# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# automatically use the cross-wrapper for pkg-config
set(PKG_CONFIG_EXECUTABLE "/somewhere/bin/aarch64-unknown-linux-gnueabi-pkg-config" CACHE FILEPATH "pkg-config executable")