1# CrossWinToARMLinux.cmake 2# 3# Set up a CMakeCache for a cross Windows to ARM Linux toolchain build. 4# 5# This cache file can be used to build a cross toolchain to ARM Linux 6# on Windows platform. 7# 8# NOTE: the build requires a development ARM Linux root filesystem to use 9# proper target platform depended library and header files. 10# 11# Configure: 12# cmake -G Ninja ^ 13# -DTARGET_TRIPLE=armv7-linux-gnueabihf ^ 14# -DCMAKE_INSTALL_PREFIX=../install ^ 15# -DDEFAULT_SYSROOT=<path-to-develop-arm-linux-root-fs> ^ 16# -DLLVM_AR=<llvm_obj_root>/bin/llvm-ar[.exe] ^ 17# -DCMAKE_CXX_FLAGS="-D__OPTIMIZE__" ^ 18# -DREMOTE_TEST_HOST="<hostname>" ^ 19# -DREMOTE_TEST_USER="<ssh_user_name>" ^ 20# -C<llvm_src_root>/llvm-project/clang/cmake/caches/CrossWinToARMLinux.cmake ^ 21# <llvm_src_root>/llvm-project/llvm 22# Build: 23# cmake --build . --target install 24# Tests: 25# cmake --build . --target check-llvm 26# cmake --build . --target check-clang 27# cmake --build . --target check-lld 28# cmake --build . --target check-compiler-rt 29# cmake --build . --target check-cxxabi 30# cmake --build . --target check-unwind 31# cmake --build . --target check-cxx 32 33# LLVM_PROJECT_DIR is the path to the llvm-project directory. 34# The right way to compute it would probably be to use "${CMAKE_SOURCE_DIR}/../", 35# but CMAKE_SOURCE_DIR is set to the wrong value on earlier CMake versions 36# that we still need to support (for instance, 3.10.2). 37get_filename_component(LLVM_PROJECT_DIR 38 "${CMAKE_CURRENT_LIST_DIR}/../../../" 39 ABSOLUTE) 40 41if (NOT DEFINED DEFAULT_SYSROOT) 42 message(WARNING "DEFAULT_SYSROOT must be specified for the cross toolchain build.") 43endif() 44 45if (DEFINED LLVM_AR) 46 set(CMAKE_AR "${LLVM_AR}" CACHE STRING "") 47endif() 48if (NOT DEFINED LLVM_TARGETS_TO_BUILD) 49 set(LLVM_TARGETS_TO_BUILD "ARM" CACHE STRING "") 50endif() 51if (NOT DEFINED LLVM_ENABLE_ASSERTIONS) 52 set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "") 53endif() 54if (NOT DEFINED LLVM_ENABLE_PROJECTS) 55 set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld" CACHE STRING "") 56endif() 57if (NOT DEFINED LLVM_ENABLE_RUNTIMES) 58 set(LLVM_ENABLE_RUNTIMES "compiler-rt;libunwind;libcxxabi;libcxx" CACHE STRING "") 59endif() 60 61if (NOT DEFINED TARGET_TRIPLE) 62 set(TARGET_TRIPLE "armv7-unknown-linux-gnueabihf") 63else() 64 #NOTE: we must normalize specified target triple to a fully specified triple, 65 # including the vendor part. It is necessary to synchronize the runtime library 66 # installation path and operable target triple by Clang to get a correct runtime 67 # path through `-print-runtime-dir` Clang option. 68 string(REPLACE "-" ";" TARGET_TRIPLE "${TARGET_TRIPLE}") 69 list(LENGTH TARGET_TRIPLE TARGET_TRIPLE_LEN) 70 if (TARGET_TRIPLE_LEN LESS 3) 71 message(FATAL_ERROR "invalid target triple") 72 endif() 73 # We suppose missed vendor's part. 74 if (TARGET_TRIPLE_LEN LESS 4) 75 list(INSERT TARGET_TRIPLE 1 "unknown") 76 endif() 77 string(REPLACE ";" "-" TARGET_TRIPLE "${TARGET_TRIPLE}") 78endif() 79 80if (NOT DEFINED CMAKE_BUILD_TYPE) 81 set(CMAKE_BUILD_TYPE "Release" CACHE STRING "") 82endif() 83 84message(STATUS "Toolchain target triple: ${TARGET_TRIPLE}") 85 86set(CMAKE_CROSSCOMPILING ON CACHE BOOL "") 87set(CMAKE_CL_SHOWINCLUDES_PREFIX "Note: including file: " CACHE STRING "") 88# Required if COMPILER_RT_DEFAULT_TARGET_ONLY is ON 89set(CMAKE_C_COMPILER_TARGET "${TARGET_TRIPLE}" CACHE STRING "") 90 91set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE BOOL "") 92set(LLVM_DEFAULT_TARGET_TRIPLE "${TARGET_TRIPLE}" CACHE STRING "") 93set(LLVM_TARGET_ARCH "${TARGET_TRIPLE}" CACHE STRING "") 94set(LLVM_LIT_ARGS "-vv ${LLVM_LIT_ARGS}" CACHE STRING "" FORCE) 95 96set(CLANG_DEFAULT_LINKER "lld" CACHE STRING "") 97 98set(COMPILER_RT_BUILD_BUILTINS ON CACHE BOOL "") 99set(COMPILER_RT_BUILD_SANITIZERS OFF CACHE BOOL "") 100set(COMPILER_RT_BUILD_XRAY OFF CACHE BOOL "") 101set(COMPILER_RT_BUILD_LIBFUZZER OFF CACHE BOOL "") 102set(COMPILER_RT_BUILD_PROFILE OFF CACHE BOOL "") 103set(COMPILER_RT_BUILD_CRT OFF CACHE BOOL "") 104set(COMPILER_RT_DEFAULT_TARGET_ONLY ON CACHE BOOL "") 105set(COMPILER_RT_INCLUDE_TESTS ON CACHE BOOL "") 106 107set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 108set(LIBUNWIND_TARGET_TRIPLE "${TARGET_TRIPLE}" CACHE STRING "") 109set(LIBUNWIND_SYSROOT "${DEFAULT_SYSROOT}" CACHE STRING "") 110set(LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 111 112set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 113set(LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 114set(LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 115set(LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") 116set(LIBCXXABI_TARGET_TRIPLE "${TARGET_TRIPLE}" CACHE STRING "") 117set(LIBCXXABI_SYSROOT "${DEFAULT_SYSROOT}" CACHE STRING "") 118set(LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXXABI OFF CACHE BOOL "") 119set(LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX OFF CACHE BOOL "") 120set(LIBCXX_LINK_TESTS_WITH_SHARED_LIBCXXABI OFF CACHE BOOL "") 121set(LIBCXX_LINK_TESTS_WITH_SHARED_LIBCXX OFF CACHE BOOL "") 122 123set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") 124set(LIBCXX_TARGET_TRIPLE "${TARGET_TRIPLE}" CACHE STRING "") 125set(LIBCXX_SYSROOT "${DEFAULT_SYSROOT}" CACHE STRING "") 126set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 127set(LIBCXX_CXX_ABI "libcxxabi" CACHE STRING "") 128set(LIBCXX_CXX_ABI_INCLUDE_PATHS "${LLVM_PROJECT_DIR}/libcxxabi/include" CACHE PATH "") 129set(LIBCXX_CXX_ABI_LIBRARY_PATH "${CMAKE_BINARY_DIR}/lib/${LIBCXX_TARGET_TRIPLE}" CACHE PATH "") 130set(LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS ON CACHE BOOL "") 131 132# Set up RPATH for the target runtime/builtin libraries. 133# See some details here: https://reviews.llvm.org/D91099 134if (NOT DEFINED RUNTIMES_INSTALL_RPATH) 135 set(RUNTIMES_INSTALL_RPATH "\$ORIGIN/../lib;${CMAKE_INSTALL_PREFIX}/lib") 136endif() 137 138set(BUILTINS_CMAKE_ARGS "-DCMAKE_SYSTEM_NAME=Linux;-DCMAKE_AR=${CMAKE_AR};-DCMAKE_INSTALL_RPATH=${RUNTIMES_INSTALL_RPATH};-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" CACHE STRING "") 139set(RUNTIMES_CMAKE_ARGS "-DCMAKE_SYSTEM_NAME=Linux;-DCMAKE_AR=${CMAKE_AR};-DCMAKE_INSTALL_RPATH=${RUNTIMES_INSTALL_RPATH};-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" CACHE STRING "") 140 141find_package(Python3 COMPONENTS Interpreter) 142 143# Remote test configuration. 144if(DEFINED REMOTE_TEST_HOST) 145 set(DEFAULT_TEST_EXECUTOR "\\\"${Python3_EXECUTABLE}\\\" \\\"${LLVM_PROJECT_DIR}/libcxx/utils/ssh.py\\\" --host='${REMOTE_TEST_USER}@${REMOTE_TEST_HOST}'") 146 set(DEFAULT_TEST_TARGET_INFO "libcxx.test.target_info.LinuxRemoteTI") 147 148 # Allow override with the custom values. 149 if(NOT DEFINED COMPILER_RT_EMULATOR) 150 set(COMPILER_RT_EMULATOR "\\\"${Python3_EXECUTABLE}\\\" \\\"${LLVM_PROJECT_DIR}/llvm/utils/remote-exec.py\\\" --execdir %%T --exec-pattern='.*\\.c.*\\.tmp.*' --host='${REMOTE_TEST_USER}@${REMOTE_TEST_HOST}'" CACHE STRING "") 151 endif() 152 if(NOT DEFINED LIBUNWIND_TARGET_INFO) 153 set(LIBUNWIND_TARGET_INFO "${DEFAULT_TEST_TARGET_INFO}" CACHE STRING "") 154 endif() 155 if(NOT DEFINED LIBUNWIND_EXECUTOR) 156 set(LIBUNWIND_EXECUTOR "${DEFAULT_TEST_EXECUTOR}" CACHE STRING "") 157 endif() 158 if(NOT DEFINED LIBCXXABI_TARGET_INFO) 159 set(LIBCXXABI_TARGET_INFO "${DEFAULT_TEST_TARGET_INFO}" CACHE STRING "") 160 endif() 161 if(NOT DEFINED LIBCXXABI_EXECUTOR) 162 set(LIBCXXABI_EXECUTOR "${DEFAULT_TEST_EXECUTOR}" CACHE STRING "") 163 endif() 164 if(NOT DEFINED LIBCXX_TARGET_INFO) 165 set(LIBCXX_TARGET_INFO "${DEFAULT_TEST_TARGET_INFO}" CACHE STRING "") 166 endif() 167 if(NOT DEFINED LIBCXX_EXECUTOR) 168 set(LIBCXX_EXECUTOR "${DEFAULT_TEST_EXECUTOR}" CACHE STRING "") 169 endif() 170endif() 171 172set(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "") 173set(LLVM_TOOLCHAIN_TOOLS 174 llvm-ar 175 llvm-cov 176 llvm-cxxfilt 177 llvm-dwarfdump 178 llvm-lib 179 llvm-nm 180 llvm-objdump 181 llvm-profdata 182 llvm-ranlib 183 llvm-readobj 184 llvm-size 185 llvm-symbolizer 186 CACHE STRING "") 187 188set(LLVM_DISTRIBUTION_COMPONENTS 189 clang 190 lld 191 LTO 192 clang-format 193 builtins 194 runtimes 195 ${LLVM_TOOLCHAIN_TOOLS} 196 CACHE STRING "") 197