blob: d86fbf1f8e3da819884ef8ee8c2877b67873c1ce [file] [log] [blame]
Chris Bieneman120bdf82016-06-08 21:22:03 +00001function(llvm_create_cross_target_internal target_name toolchain buildtype)
Chris Bieneman50077412014-09-03 23:21:18 +00002
Chris Bieneman46a65b82015-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 Bieneman50077412014-09-03 23:21:18 +00008
Chris Bieneman46a65b82015-03-12 17:33:34 +00009 if (EXISTS ${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake)
10 set(CROSS_TOOLCHAIN_FLAGS_${target_name}
11 -DCMAKE_TOOLCHAIN_FILE=\"${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake\"
12 CACHE STRING "Toolchain file for ${target_name}")
13 endif()
Chris Bieneman50077412014-09-03 23:21:18 +000014
Don Hintonaa7d6db2017-12-02 19:12:38 +000015 if (buildtype)
16 set(build_type_flags "-DCMAKE_BUILD_TYPE=${buildtype}")
17 endif()
18 if (LLVM_USE_LINKER AND NOT CMAKE_CROSSCOMPILING)
19 set(linker_flag "-DLLVM_USE_LINKER=${LLVM_USE_LINKER}")
20 endif()
21 if (LLVM_EXTERNAL_CLANG_SOURCE_DIR)
22 # Propagate LLVM_EXTERNAL_CLANG_SOURCE_DIR so that clang-tblgen can be built
23 set(external_clang_dir "-DLLVM_EXTERNAL_CLANG_SOURCE_DIR=${LLVM_EXTERNAL_CLANG_SOURCE_DIR}")
24 endif()
25
Chris Bieneman46a65b82015-03-12 17:33:34 +000026 add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD}
27 COMMAND ${CMAKE_COMMAND} -E make_directory ${LLVM_${target_name}_BUILD}
28 COMMENT "Creating ${LLVM_${target_name}_BUILD}...")
Chris Bieneman50077412014-09-03 23:21:18 +000029
Jonas Hahnfeld5db0ae42017-11-08 14:31:51 +000030 add_custom_target(CREATE_LLVM_${target_name}
31 DEPENDS ${LLVM_${target_name}_BUILD})
32
Chris Bieneman46a65b82015-03-12 17:33:34 +000033 add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD}/CMakeCache.txt
34 COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"
Don Hintonaa7d6db2017-12-02 19:12:38 +000035 -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
36 -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
Don Hinton2e004b32017-12-06 15:25:14 +000037 ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_SOURCE_DIR}
38 -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE
Don Hintonaa7d6db2017-12-02 19:12:38 +000039 -DLLVM_TARGETS_TO_BUILD=Native
40 ${build_type_flags} ${linker_flag} ${external_clang_dir}
Chris Bieneman46a65b82015-03-12 17:33:34 +000041 WORKING_DIRECTORY ${LLVM_${target_name}_BUILD}
Jonas Hahnfeld5db0ae42017-11-08 14:31:51 +000042 DEPENDS CREATE_LLVM_${target_name}
Chris Bieneman46a65b82015-03-12 17:33:34 +000043 COMMENT "Configuring ${target_name} LLVM...")
Chris Bieneman50077412014-09-03 23:21:18 +000044
Chris Bieneman46a65b82015-03-12 17:33:34 +000045 add_custom_target(CONFIGURE_LLVM_${target_name}
46 DEPENDS ${LLVM_${target_name}_BUILD}/CMakeCache.txt)
Chris Bieneman50077412014-09-03 23:21:18 +000047
Chris Bieneman46a65b82015-03-12 17:33:34 +000048endfunction()
49
50function(llvm_create_cross_target target_name sysroot)
51 llvm_create_cross_target_internal(${target_name} ${sysroot} ${CMAKE_BUILD_TYPE})
52endfunction()
53
54llvm_create_cross_target_internal(NATIVE "" Release)