xref: /openbsd-src/gnu/llvm/clang/cmake/caches/CrossWinToARMLinux.cmake (revision 12c855180aad702bbcca06e0398d774beeafb155)
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