blob: bc3b210f01859d3a6aec3106aaa5fa476115fc4d [file] [log] [blame]
Chris Bienemane06e7e32016-06-08 21:22:03 +00001function(llvm_create_cross_target_internal target_name toolchain buildtype)
Chris Bieneman901166c2014-09-03 23:21:18 +00002
Chris Bienemana08ee012015-03-12 17:33:34 +00003 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 Bieneman901166c2014-09-03 23:21:18 +00008
Chris Bienemana08ee012015-03-12 17:33:34 +00009 if (EXISTS ${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake)
Pavel Labathf4f4ffb2017-12-08 09:59:48 +000010 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 Bienemana08ee012015-03-12 17:33:34 +000017 endif()
Pavel Labathf4f4ffb2017-12-08 09:59:48 +000018 set(CROSS_TOOLCHAIN_FLAGS_${target_name} ${CROSS_TOOLCHAIN_FLAGS_INIT}
19 CACHE STRING "Toolchain configuration for ${target_name}")
Chris Bieneman901166c2014-09-03 23:21:18 +000020
Don Hintonf4f38812017-12-02 19:12:38 +000021 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 Bienemana08ee012015-03-12 17:33:34 +000032 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 Bieneman901166c2014-09-03 23:21:18 +000035
Jonas Hahnfeld41dfa192017-11-08 14:31:51 +000036 add_custom_target(CREATE_LLVM_${target_name}
37 DEPENDS ${LLVM_${target_name}_BUILD})
38
Justin Bogner9b892822017-12-11 19:53:23 +000039 # 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 Bradbury93b8ba02017-12-13 09:02:13 +000043 string(REPLACE ";" "$<SEMICOLON>" experimental_targets_to_build_arg
44 "${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}")
Justin Bogner9b892822017-12-11 19:53:23 +000045
Chris Bienemana08ee012015-03-12 17:33:34 +000046 add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD}/CMakeCache.txt
47 COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"
Shoaib Meenai4794bea2018-01-08 21:52:58 +000048 -DCMAKE_MAKE_PROGRAM="${CMAKE_MAKE_PROGRAM}"
Don Hintone780c512017-12-06 15:25:14 +000049 ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_SOURCE_DIR}
50 -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE
Justin Bogner9b892822017-12-11 19:53:23 +000051 -DLLVM_TARGETS_TO_BUILD="${targets_to_build_arg}"
Alex Bradbury93b8ba02017-12-13 09:02:13 +000052 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${experimental_targets_to_build_arg}"
Petr Hosekf5a4b472018-01-08 23:50:59 +000053 -DLLVM_DEFAULT_TARGET_TRIPLE="${TARGET_TRIPLE}"
54 -DLLVM_TARGET_ARCH="${LLVM_TARGET_ARCH}"
Hans Wennborg64b01a82019-02-08 14:17:53 +000055 -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN="${LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN}"
Don Hintonf4f38812017-12-02 19:12:38 +000056 ${build_type_flags} ${linker_flag} ${external_clang_dir}
Chris Bienemana08ee012015-03-12 17:33:34 +000057 WORKING_DIRECTORY ${LLVM_${target_name}_BUILD}
Jonas Hahnfeld41dfa192017-11-08 14:31:51 +000058 DEPENDS CREATE_LLVM_${target_name}
Chris Bienemana08ee012015-03-12 17:33:34 +000059 COMMENT "Configuring ${target_name} LLVM...")
Chris Bieneman901166c2014-09-03 23:21:18 +000060
Chris Bienemana08ee012015-03-12 17:33:34 +000061 add_custom_target(CONFIGURE_LLVM_${target_name}
62 DEPENDS ${LLVM_${target_name}_BUILD}/CMakeCache.txt)
Chris Bieneman901166c2014-09-03 23:21:18 +000063
Chris Bienemana08ee012015-03-12 17:33:34 +000064endfunction()
65
66function(llvm_create_cross_target target_name sysroot)
67 llvm_create_cross_target_internal(${target_name} ${sysroot} ${CMAKE_BUILD_TYPE})
68endfunction()
69
70llvm_create_cross_target_internal(NATIVE "" Release)