Chris Bieneman | e06e7e3 | 2016-06-08 21:22:03 +0000 | [diff] [blame] | 1 | function(llvm_create_cross_target_internal target_name toolchain buildtype) |
Chris Bieneman | 901166c | 2014-09-03 23:21:18 +0000 | [diff] [blame] | 2 | |
Chris Bieneman | a08ee01 | 2015-03-12 17:33:34 +0000 | [diff] [blame] | 3 | if(NOT DEFINED LLVM_${target_name}_BUILD) |
| 4 | set(LLVM_${target_name}_BUILD "${CMAKE_BINARY_DIR}/${target_name}") |
| 5 | set(LLVM_${target_name}_BUILD ${LLVM_${target_name}_BUILD} PARENT_SCOPE) |
| 6 | message(STATUS "Setting native build dir to " ${LLVM_${target_name}_BUILD}) |
| 7 | endif(NOT DEFINED LLVM_${target_name}_BUILD) |
Chris Bieneman | 901166c | 2014-09-03 23:21:18 +0000 | [diff] [blame] | 8 | |
Chris Bieneman | a08ee01 | 2015-03-12 17:33:34 +0000 | [diff] [blame] | 9 | if (EXISTS ${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake) |
Pavel Labath | f4f4ffb | 2017-12-08 09:59:48 +0000 | [diff] [blame] | 10 | set(CROSS_TOOLCHAIN_FLAGS_INIT |
| 11 | -DCMAKE_TOOLCHAIN_FILE=\"${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake\") |
| 12 | else() |
| 13 | set(CROSS_TOOLCHAIN_FLAGS_INIT |
| 14 | -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} |
| 15 | -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} |
| 16 | ) |
Chris Bieneman | a08ee01 | 2015-03-12 17:33:34 +0000 | [diff] [blame] | 17 | endif() |
Pavel Labath | f4f4ffb | 2017-12-08 09:59:48 +0000 | [diff] [blame] | 18 | set(CROSS_TOOLCHAIN_FLAGS_${target_name} ${CROSS_TOOLCHAIN_FLAGS_INIT} |
| 19 | CACHE STRING "Toolchain configuration for ${target_name}") |
Chris Bieneman | 901166c | 2014-09-03 23:21:18 +0000 | [diff] [blame] | 20 | |
Don Hinton | f4f3881 | 2017-12-02 19:12:38 +0000 | [diff] [blame] | 21 | if (buildtype) |
| 22 | set(build_type_flags "-DCMAKE_BUILD_TYPE=${buildtype}") |
| 23 | endif() |
| 24 | if (LLVM_USE_LINKER AND NOT CMAKE_CROSSCOMPILING) |
| 25 | set(linker_flag "-DLLVM_USE_LINKER=${LLVM_USE_LINKER}") |
| 26 | endif() |
| 27 | if (LLVM_EXTERNAL_CLANG_SOURCE_DIR) |
| 28 | # Propagate LLVM_EXTERNAL_CLANG_SOURCE_DIR so that clang-tblgen can be built |
| 29 | set(external_clang_dir "-DLLVM_EXTERNAL_CLANG_SOURCE_DIR=${LLVM_EXTERNAL_CLANG_SOURCE_DIR}") |
| 30 | endif() |
| 31 | |
Chris Bieneman | a08ee01 | 2015-03-12 17:33:34 +0000 | [diff] [blame] | 32 | add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD} |
| 33 | COMMAND ${CMAKE_COMMAND} -E make_directory ${LLVM_${target_name}_BUILD} |
| 34 | COMMENT "Creating ${LLVM_${target_name}_BUILD}...") |
Chris Bieneman | 901166c | 2014-09-03 23:21:18 +0000 | [diff] [blame] | 35 | |
Jonas Hahnfeld | 41dfa19 | 2017-11-08 14:31:51 +0000 | [diff] [blame] | 36 | add_custom_target(CREATE_LLVM_${target_name} |
| 37 | DEPENDS ${LLVM_${target_name}_BUILD}) |
| 38 | |
Justin Bogner | 9b89282 | 2017-12-11 19:53:23 +0000 | [diff] [blame] | 39 | # Escape semicolons in the targets list so that cmake doesn't expand |
| 40 | # them to spaces. |
| 41 | string(REPLACE ";" "$<SEMICOLON>" targets_to_build_arg |
| 42 | "${LLVM_TARGETS_TO_BUILD}") |
Alex Bradbury | 93b8ba0 | 2017-12-13 09:02:13 +0000 | [diff] [blame] | 43 | string(REPLACE ";" "$<SEMICOLON>" experimental_targets_to_build_arg |
| 44 | "${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}") |
Justin Bogner | 9b89282 | 2017-12-11 19:53:23 +0000 | [diff] [blame] | 45 | |
Chris Bieneman | a08ee01 | 2015-03-12 17:33:34 +0000 | [diff] [blame] | 46 | add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD}/CMakeCache.txt |
| 47 | COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" |
Shoaib Meenai | 4794bea | 2018-01-08 21:52:58 +0000 | [diff] [blame] | 48 | -DCMAKE_MAKE_PROGRAM="${CMAKE_MAKE_PROGRAM}" |
Don Hinton | e780c51 | 2017-12-06 15:25:14 +0000 | [diff] [blame] | 49 | ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_SOURCE_DIR} |
| 50 | -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE |
Justin Bogner | 9b89282 | 2017-12-11 19:53:23 +0000 | [diff] [blame] | 51 | -DLLVM_TARGETS_TO_BUILD="${targets_to_build_arg}" |
Alex Bradbury | 93b8ba0 | 2017-12-13 09:02:13 +0000 | [diff] [blame] | 52 | -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${experimental_targets_to_build_arg}" |
Petr Hosek | f5a4b47 | 2018-01-08 23:50:59 +0000 | [diff] [blame] | 53 | -DLLVM_DEFAULT_TARGET_TRIPLE="${TARGET_TRIPLE}" |
| 54 | -DLLVM_TARGET_ARCH="${LLVM_TARGET_ARCH}" |
Hans Wennborg | 64b01a8 | 2019-02-08 14:17:53 +0000 | [diff] [blame] | 55 | -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN="${LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN}" |
Don Hinton | f4f3881 | 2017-12-02 19:12:38 +0000 | [diff] [blame] | 56 | ${build_type_flags} ${linker_flag} ${external_clang_dir} |
Chris Bieneman | a08ee01 | 2015-03-12 17:33:34 +0000 | [diff] [blame] | 57 | WORKING_DIRECTORY ${LLVM_${target_name}_BUILD} |
Jonas Hahnfeld | 41dfa19 | 2017-11-08 14:31:51 +0000 | [diff] [blame] | 58 | DEPENDS CREATE_LLVM_${target_name} |
Chris Bieneman | a08ee01 | 2015-03-12 17:33:34 +0000 | [diff] [blame] | 59 | COMMENT "Configuring ${target_name} LLVM...") |
Chris Bieneman | 901166c | 2014-09-03 23:21:18 +0000 | [diff] [blame] | 60 | |
Chris Bieneman | a08ee01 | 2015-03-12 17:33:34 +0000 | [diff] [blame] | 61 | add_custom_target(CONFIGURE_LLVM_${target_name} |
| 62 | DEPENDS ${LLVM_${target_name}_BUILD}/CMakeCache.txt) |
Chris Bieneman | 901166c | 2014-09-03 23:21:18 +0000 | [diff] [blame] | 63 | |
Chris Bieneman | a08ee01 | 2015-03-12 17:33:34 +0000 | [diff] [blame] | 64 | endfunction() |
| 65 | |
| 66 | function(llvm_create_cross_target target_name sysroot) |
| 67 | llvm_create_cross_target_internal(${target_name} ${sysroot} ${CMAKE_BUILD_TYPE}) |
| 68 | endfunction() |
| 69 | |
| 70 | llvm_create_cross_target_internal(NATIVE "" Release) |