1 min read

cross build 시 CMake Toolchain file 작성법

CMAKE로 이용하여 크로스 빌드하는 일이 많아짐에 따라 cmake toolchain file을 별도로 작성하게 된다.

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)

SET(CMAKE_C_COMPILER ${COMPILER_ROOT}gcc)
SET(CMAKE_CXX_COMPILER ${COMPILER_ROOT}g++)
SET(CMAKE_LINKER ${COMPILER_ROOT}ld)
SET(CMAKE_NM ${COMPILER_ROOT}nm)
SET(CMAKE_OBJCOPY ${COMPILER_ROOT}objcopy)
SET(CMAKE_OBJDUMP ${COMPILER_ROOT}objdump)
SET(CMAKE_RANLIB ${COMPILER_ROOT}ranlib)

SET(CMAKE_FIND_ROOT_PATH "/usr/arm-${TARGET_ABI}")
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# optional
SET(CMAKE_SYSROOT ${cross_root}/sysroot)

CMAKE_SYSROOT 는 기본적으로 프로그램은 어디 path에 라이브러리를 찾는지 기술되어 있다. 하지만 내가 컴파일한 환경과 실행시키는 환경의 lib가 다른 경우가 종종 발생하는데 이때 CMAKE_SYSROOT가 필수적이다.

cmake 빌드 시 -DCMAKE_TOOLCHAIN_FILE 해당 파일을 설정해두면 된다.

참고시 좋은 링크

https://docs.oracle.com/cd/E88353_01/html/E37853/cmake-toolchains-7.html

https://android.googlesource.com/platform/ndk/+/master/build/cmake/android.toolchain.cmake