1e5dd7070Spatrick# CrossWinToARMLinux.cmake 2e5dd7070Spatrick# 3e5dd7070Spatrick# Set up a CMakeCache for a cross Windows to ARM Linux toolchain build. 4e5dd7070Spatrick# 5e5dd7070Spatrick# This cache file can be used to build a cross toolchain to ARM Linux 6e5dd7070Spatrick# on Windows platform. 7e5dd7070Spatrick# 8e5dd7070Spatrick# NOTE: the build requires a development ARM Linux root filesystem to use 9e5dd7070Spatrick# proper target platform depended library and header files. 10e5dd7070Spatrick# 11e5dd7070Spatrick# Configure: 12e5dd7070Spatrick# cmake -G Ninja ^ 13*12c85518Srobert# -DTOOLCHAIN_TARGET_TRIPLE=armv7-unknown-linux-gnueabihf ^ 14e5dd7070Spatrick# -DCMAKE_INSTALL_PREFIX=../install ^ 15e5dd7070Spatrick# -DDEFAULT_SYSROOT=<path-to-develop-arm-linux-root-fs> ^ 16e5dd7070Spatrick# -DLLVM_AR=<llvm_obj_root>/bin/llvm-ar[.exe] ^ 17e5dd7070Spatrick# -DCMAKE_CXX_FLAGS="-D__OPTIMIZE__" ^ 18e5dd7070Spatrick# -DREMOTE_TEST_HOST="<hostname>" ^ 19e5dd7070Spatrick# -DREMOTE_TEST_USER="<ssh_user_name>" ^ 20e5dd7070Spatrick# -C<llvm_src_root>/llvm-project/clang/cmake/caches/CrossWinToARMLinux.cmake ^ 21e5dd7070Spatrick# <llvm_src_root>/llvm-project/llvm 22e5dd7070Spatrick# Build: 23e5dd7070Spatrick# cmake --build . --target install 24a9ac8606Spatrick# Tests: 25e5dd7070Spatrick# cmake --build . --target check-llvm 26e5dd7070Spatrick# cmake --build . --target check-clang 27e5dd7070Spatrick# cmake --build . --target check-lld 28*12c85518Srobert# cmake --build . --target check-compiler-rt-<TOOLCHAIN_TARGET_TRIPLE> 29*12c85518Srobert# cmake --build . --target check-cxxabi-<TOOLCHAIN_TARGET_TRIPLE> 30*12c85518Srobert# cmake --build . --target check-unwind-<TOOLCHAIN_TARGET_TRIPLE> 31*12c85518Srobert# cmake --build . --target check-cxx-<TOOLCHAIN_TARGET_TRIPLE> 32e5dd7070Spatrick 33ec727ea7Spatrick# LLVM_PROJECT_DIR is the path to the llvm-project directory. 34ec727ea7Spatrick# The right way to compute it would probably be to use "${CMAKE_SOURCE_DIR}/../", 35ec727ea7Spatrick# but CMAKE_SOURCE_DIR is set to the wrong value on earlier CMake versions 36ec727ea7Spatrick# that we still need to support (for instance, 3.10.2). 37ec727ea7Spatrickget_filename_component(LLVM_PROJECT_DIR 38ec727ea7Spatrick "${CMAKE_CURRENT_LIST_DIR}/../../../" 39ec727ea7Spatrick ABSOLUTE) 40ec727ea7Spatrick 41e5dd7070Spatrickif (NOT DEFINED DEFAULT_SYSROOT) 42e5dd7070Spatrick message(WARNING "DEFAULT_SYSROOT must be specified for the cross toolchain build.") 43e5dd7070Spatrickendif() 44e5dd7070Spatrick 45e5dd7070Spatrickif (NOT DEFINED LLVM_TARGETS_TO_BUILD) 46e5dd7070Spatrick set(LLVM_TARGETS_TO_BUILD "ARM" CACHE STRING "") 47e5dd7070Spatrickendif() 48a9ac8606Spatrickif (NOT DEFINED LLVM_ENABLE_ASSERTIONS) 49a9ac8606Spatrick set(LLVM_ENABLE_ASSERTIONS ON CACHE BOOL "") 50a9ac8606Spatrickendif() 51a9ac8606Spatrickif (NOT DEFINED LLVM_ENABLE_PROJECTS) 52a9ac8606Spatrick set(LLVM_ENABLE_PROJECTS "clang;clang-tools-extra;lld" CACHE STRING "") 53a9ac8606Spatrickendif() 54a9ac8606Spatrickif (NOT DEFINED LLVM_ENABLE_RUNTIMES) 55a9ac8606Spatrick set(LLVM_ENABLE_RUNTIMES "compiler-rt;libunwind;libcxxabi;libcxx" CACHE STRING "") 56a9ac8606Spatrickendif() 57e5dd7070Spatrick 58*12c85518Srobertif (NOT DEFINED TOOLCHAIN_TARGET_TRIPLE) 59*12c85518Srobert set(TOOLCHAIN_TARGET_TRIPLE "armv7-unknown-linux-gnueabihf") 60a9ac8606Spatrickelse() 61a9ac8606Spatrick #NOTE: we must normalize specified target triple to a fully specified triple, 62a9ac8606Spatrick # including the vendor part. It is necessary to synchronize the runtime library 63a9ac8606Spatrick # installation path and operable target triple by Clang to get a correct runtime 64a9ac8606Spatrick # path through `-print-runtime-dir` Clang option. 65*12c85518Srobert string(REPLACE "-" ";" TOOLCHAIN_TARGET_TRIPLE "${TOOLCHAIN_TARGET_TRIPLE}") 66*12c85518Srobert list(LENGTH TOOLCHAIN_TARGET_TRIPLE TOOLCHAIN_TARGET_TRIPLE_LEN) 67*12c85518Srobert if (TOOLCHAIN_TARGET_TRIPLE_LEN LESS 3) 68a9ac8606Spatrick message(FATAL_ERROR "invalid target triple") 69a9ac8606Spatrick endif() 70a9ac8606Spatrick # We suppose missed vendor's part. 71*12c85518Srobert if (TOOLCHAIN_TARGET_TRIPLE_LEN LESS 4) 72*12c85518Srobert list(INSERT TOOLCHAIN_TARGET_TRIPLE 1 "unknown") 73a9ac8606Spatrick endif() 74*12c85518Srobert string(REPLACE ";" "-" TOOLCHAIN_TARGET_TRIPLE "${TOOLCHAIN_TARGET_TRIPLE}") 75e5dd7070Spatrickendif() 76e5dd7070Spatrick 77e5dd7070Spatrickif (NOT DEFINED CMAKE_BUILD_TYPE) 78e5dd7070Spatrick set(CMAKE_BUILD_TYPE "Release" CACHE STRING "") 79e5dd7070Spatrickendif() 80e5dd7070Spatrick 81*12c85518Srobertmessage(STATUS "Toolchain target triple: ${TOOLCHAIN_TARGET_TRIPLE}") 82a9ac8606Spatrick 83e5dd7070Spatrickset(CMAKE_CROSSCOMPILING ON CACHE BOOL "") 84e5dd7070Spatrickset(CMAKE_CL_SHOWINCLUDES_PREFIX "Note: including file: " CACHE STRING "") 85a9ac8606Spatrick# Required if COMPILER_RT_DEFAULT_TARGET_ONLY is ON 86*12c85518Srobertset(CMAKE_C_COMPILER_TARGET "${TOOLCHAIN_TARGET_TRIPLE}" CACHE STRING "") 87*12c85518Srobertset(CMAKE_CXX_COMPILER_TARGET "${TOOLCHAIN_TARGET_TRIPLE}" CACHE STRING "") 88e5dd7070Spatrick 89a9ac8606Spatrickset(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE BOOL "") 90*12c85518Srobertset(LLVM_DEFAULT_TARGET_TRIPLE "${TOOLCHAIN_TARGET_TRIPLE}" CACHE STRING "") 91*12c85518Srobertset(LLVM_TARGET_ARCH "${TOOLCHAIN_TARGET_TRIPLE}" CACHE STRING "") 92e5dd7070Spatrickset(LLVM_LIT_ARGS "-vv ${LLVM_LIT_ARGS}" CACHE STRING "" FORCE) 93e5dd7070Spatrick 94e5dd7070Spatrickset(CLANG_DEFAULT_LINKER "lld" CACHE STRING "") 95e5dd7070Spatrick 96*12c85518Srobertif(WIN32) 97*12c85518Srobert set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "") 98*12c85518Srobert set(LLVM_USE_CRT_RELEASE "MT" CACHE STRING "") 99*12c85518Srobertendif() 100e5dd7070Spatrick 101a9ac8606Spatrick# Set up RPATH for the target runtime/builtin libraries. 102a9ac8606Spatrick# See some details here: https://reviews.llvm.org/D91099 103a9ac8606Spatrickif (NOT DEFINED RUNTIMES_INSTALL_RPATH) 104a9ac8606Spatrick set(RUNTIMES_INSTALL_RPATH "\$ORIGIN/../lib;${CMAKE_INSTALL_PREFIX}/lib") 105a9ac8606Spatrickendif() 106a9ac8606Spatrick 107*12c85518Srobertset(LLVM_BUILTIN_TARGETS "${TOOLCHAIN_TARGET_TRIPLE}" CACHE STRING "") 108*12c85518Srobert 109*12c85518Srobertset(BUILTINS_${TOOLCHAIN_TARGET_TRIPLE}_CMAKE_SYSTEM_NAME "Linux" CACHE STRING "") 110*12c85518Srobertset(BUILTINS_${TOOLCHAIN_TARGET_TRIPLE}_CMAKE_SYSROOT "${DEFAULT_SYSROOT}" CACHE STRING "") 111*12c85518Srobertset(BUILTINS_${TOOLCHAIN_TARGET_TRIPLE}_CMAKE_INSTALL_RPATH "${RUNTIMES_INSTALL_RPATH}" CACHE STRING "") 112*12c85518Srobertset(BUILTINS_${TOOLCHAIN_TARGET_TRIPLE}_CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE BOOL "") 113*12c85518Srobert 114*12c85518Srobert 115*12c85518Srobertset(LLVM_RUNTIME_TARGETS "${TOOLCHAIN_TARGET_TRIPLE}" CACHE STRING "") 116*12c85518Srobert 117*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LLVM_ENABLE_RUNTIMES "${LLVM_ENABLE_RUNTIMES}" CACHE STRING "") 118*12c85518Srobert 119*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_CMAKE_SYSTEM_NAME "Linux" CACHE STRING "") 120*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_CMAKE_SYSROOT "${DEFAULT_SYSROOT}" CACHE STRING "") 121*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_CMAKE_INSTALL_RPATH "${RUNTIMES_INSTALL_RPATH}" CACHE STRING "") 122*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE BOOL "") 123*12c85518Srobert 124*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_BUILD_BUILTINS ON CACHE BOOL "") 125*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_BUILD_SANITIZERS OFF CACHE BOOL "") 126*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_BUILD_XRAY OFF CACHE BOOL "") 127*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_BUILD_LIBFUZZER OFF CACHE BOOL "") 128*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_BUILD_PROFILE OFF CACHE BOOL "") 129*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_BUILD_CRT OFF CACHE BOOL "") 130*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_BUILD_ORC OFF CACHE BOOL "") 131*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_DEFAULT_TARGET_ONLY ON CACHE BOOL "") 132*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_INCLUDE_TESTS ON CACHE BOOL "") 133*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_CAN_EXECUTE_TESTS ON CACHE BOOL "") 134*12c85518Srobert 135*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "") 136*12c85518Srobert 137*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") 138*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") 139*12c85518Srobert 140*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") 141*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") 142*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") 143*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS OFF CACHE BOOL "") 144*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") 145*12c85518Srobert 146*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") 147*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") 148*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_ABI_VERSION 2 CACHE STRING "") 149*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_CXX_ABI "libcxxabi" CACHE STRING "") #!!! 150*12c85518Srobertset(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS ON CACHE BOOL "") 151*12c85518Srobert 152e5dd7070Spatrick 153ec727ea7Spatrickfind_package(Python3 COMPONENTS Interpreter) 154ec727ea7Spatrick 155e5dd7070Spatrick# Remote test configuration. 156e5dd7070Spatrickif(DEFINED REMOTE_TEST_HOST) 157e5dd7070Spatrick # Allow override with the custom values. 158*12c85518Srobert if(NOT DEFINED DEFAULT_TEST_EXECUTOR) 159*12c85518Srobert set(DEFAULT_TEST_EXECUTOR "\\\"${Python3_EXECUTABLE}\\\" \\\"${LLVM_PROJECT_DIR}/libcxx/utils/ssh.py\\\" --host=${REMOTE_TEST_USER}@${REMOTE_TEST_HOST}") 160a9ac8606Spatrick endif() 161*12c85518Srobert 162*12c85518Srobert set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_COMPILER_RT_EMULATOR 163*12c85518Srobert "\\\"${Python3_EXECUTABLE}\\\" \\\"${LLVM_PROJECT_DIR}/llvm/utils/remote-exec.py\\\" --host=${REMOTE_TEST_USER}@${REMOTE_TEST_HOST}" 164*12c85518Srobert CACHE STRING "") 165*12c85518Srobert 166*12c85518Srobert set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBUNWIND_EXECUTOR "${DEFAULT_TEST_EXECUTOR}" CACHE STRING "") 167*12c85518Srobert set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXXABI_EXECUTOR "${DEFAULT_TEST_EXECUTOR}" CACHE STRING "") 168*12c85518Srobert set(RUNTIMES_${TOOLCHAIN_TARGET_TRIPLE}_LIBCXX_EXECUTOR "${DEFAULT_TEST_EXECUTOR}" CACHE STRING "") 169e5dd7070Spatrickendif() 170e5dd7070Spatrick 171e5dd7070Spatrickset(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "") 172e5dd7070Spatrickset(LLVM_TOOLCHAIN_TOOLS 173e5dd7070Spatrick llvm-ar 174e5dd7070Spatrick llvm-cov 175e5dd7070Spatrick llvm-cxxfilt 176e5dd7070Spatrick llvm-dwarfdump 177e5dd7070Spatrick llvm-lib 178e5dd7070Spatrick llvm-nm 179e5dd7070Spatrick llvm-objdump 180*12c85518Srobert llvm-pdbutil 181e5dd7070Spatrick llvm-profdata 182e5dd7070Spatrick llvm-ranlib 183e5dd7070Spatrick llvm-readobj 184e5dd7070Spatrick llvm-size 185e5dd7070Spatrick llvm-symbolizer 186e5dd7070Spatrick CACHE STRING "") 187e5dd7070Spatrick 188e5dd7070Spatrickset(LLVM_DISTRIBUTION_COMPONENTS 189e5dd7070Spatrick clang 190e5dd7070Spatrick lld 191e5dd7070Spatrick LTO 192e5dd7070Spatrick clang-format 193e5dd7070Spatrick builtins 194e5dd7070Spatrick runtimes 195e5dd7070Spatrick ${LLVM_TOOLCHAIN_TOOLS} 196e5dd7070Spatrick CACHE STRING "") 197