Last active
August 21, 2019 09:02
-
-
Save mologie/4425c16477e2218af83078c4f8708867 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# CMake Toolchain file for cross compilation to Alpine 3.7 running on a Raspberry Pi via LLVM. | |
# Dec. 2017, Oliver Kuckertz <[email protected]> | |
# https://mologie.github.io/blog/programming/2017/12/25/cross-compiling-cpp-with-cmake-llvm.html | |
# License: MIT | |
# Where did you create the Alpine sysroot? Oliver has his cross-toolchains in ~/Toolchains. | |
SET(CMAKE_SYSROOT "$ENV{HOME}/Toolchains/sysroots/alpine-armhf") | |
# Where is LLVM/clang installed on your host? These are defaults for common platforms: | |
IF(APPLE) | |
# LLVM 5.0 from Homebrew with Homebrew at its default path | |
SET(CROSS_LLVM_PREFIX "/usr/local/opt/llvm@5") | |
ELSEIF(UNIX) | |
# LLVM 5.0 installation from https://apt.llvm.org/ | |
SET(CROSS_LLVM_PREFIX "/usr/lib/llvm-5.0") | |
ELSE() | |
MESSAGE(FATAL_ERROR "You'll have to edit this toolchain file and add rules for your platform.") | |
ENDIF() | |
# Configure target platform, change these when porting: | |
SET(CMAKE_SYSTEM_NAME Linux) # uname -o | |
SET(CMAKE_SYSTEM_PROCESSOR armv6) # uname -p | |
SET(CROSS_TARGET armv6-alpine-linux-musleabihf) | |
SET(CROSS_GCC_BASEVER "6.4.0") # Alpine 3.7 uses GCC 6.4 | |
SET(CROSS_MACHINE_FLAGS "-marm -march=armv6zk -mfloat-abi=hard -mfpu=vfp") | |
# Here be dragons! This is boilerplate code for wrangling CMake into working with a standalone LLVM | |
# installation and all of CMake's quirks. Side effect: Linker flags are no longer passed to ar (and | |
# neither should they be.) When editing, use plenty of fish to keep the dragon sated. | |
SET(CROSS_LIBSTDCPP_INC_DIR "/usr/include/c++/${CROSS_GCC_BASEVER}") | |
SET(CROSS_LIBSTDCPPBITS_INC_DIR "${CROSS_LIBSTDCPP_INC_DIR}/${CROSS_TARGET}") | |
SET(CROSS_LIBGCC_DIR "/usr/lib/gcc/${CROSS_TARGET}/${CROSS_GCC_BASEVER}") | |
SET(CROSS_COMPILER_FLAGS "") | |
SET(CROSS_LINKER_FLAGS "-fuse-ld=lld -stdlib=libstdc++ -L \"${CROSS_LIBGCC_DIR}\"") | |
SET(CMAKE_CROSSCOMPILING ON) | |
SET(CMAKE_AR "${CROSS_LLVM_PREFIX}/bin/llvm-ar" CACHE FILEPATH "" FORCE) | |
SET(CMAKE_NM "${CROSS_LLVM_PREFIX}/bin/llvm-nm" CACHE FILEPATH "" FORCE) | |
SET(CMAKE_RANLIB "${CROSS_LLVM_PREFIX}/bin/llvm-ranlib" CACHE FILEPATH "" FORCE) | |
SET(CMAKE_C_COMPILER ${CROSS_LLVM_PREFIX}/bin/clang) | |
SET(CMAKE_C_COMPILER_TARGET ${CROSS_TARGET}) | |
SET(CMAKE_C_FLAGS "${CROSS_COMPILER_FLAGS} ${CROSS_MACHINE_FLAGS}" CACHE STRING "" FORCE) | |
SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <OBJECTS>") | |
SET(CMAKE_CXX_COMPILER ${CROSS_LLVM_PREFIX}/bin/clang++) | |
SET(CMAKE_CXX_COMPILER_TARGET ${CROSS_TARGET}) | |
SET(CMAKE_CXX_FLAGS "${CROSS_COMPILER_FLAGS} ${CROSS_MACHINE_FLAGS}" CACHE STRING "" FORCE) | |
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -iwithsysroot \"${CROSS_LIBSTDCPP_INC_DIR}\"") | |
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -iwithsysroot \"${CROSS_LIBSTDCPPBITS_INC_DIR}\"") | |
SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <OBJECTS>") | |
SET(CMAKE_EXE_LINKER_FLAGS ${CROSS_LINKER_FLAGS} CACHE STRING "" FORCE) | |
SET(CMAKE_MODULE_LINKER_FLAGS ${CROSS_LINKER_FLAGS} CACHE STRING "" FORCE) | |
SET(CMAKE_SHARED_LINKER_FLAGS ${CROSS_LINKER_FLAGS} CACHE STRING "" FORCE) | |
SET(CMAKE_STATIC_LINKER_FLAGS ${CROSS_LINKER_FLAGS} CACHE STRING "" FORCE) | |
SET(CMAKE_FIND_ROOT_PATH ${CROSS_LLVM_PREFIX}) | |
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) | |
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) | |
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment