xref: /aosp_15_r20/external/llvm/cmake/modules/CrossCompile.cmake (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Workerfunction(llvm_create_cross_target_internal target_name toolchain buildtype)
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker  if(NOT DEFINED LLVM_${target_name}_BUILD)
4*9880d681SAndroid Build Coastguard Worker    set(LLVM_${target_name}_BUILD "${CMAKE_BINARY_DIR}/${target_name}")
5*9880d681SAndroid Build Coastguard Worker    set(LLVM_${target_name}_BUILD ${LLVM_${target_name}_BUILD} PARENT_SCOPE)
6*9880d681SAndroid Build Coastguard Worker    message(STATUS "Setting native build dir to " ${LLVM_${target_name}_BUILD})
7*9880d681SAndroid Build Coastguard Worker  endif(NOT DEFINED LLVM_${target_name}_BUILD)
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker  if (EXISTS ${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake)
10*9880d681SAndroid Build Coastguard Worker    set(CROSS_TOOLCHAIN_FLAGS_${target_name}
11*9880d681SAndroid Build Coastguard Worker        -DCMAKE_TOOLCHAIN_FILE=\"${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake\"
12*9880d681SAndroid Build Coastguard Worker        CACHE STRING "Toolchain file for ${target_name}")
13*9880d681SAndroid Build Coastguard Worker  endif()
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker  add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD}
16*9880d681SAndroid Build Coastguard Worker    COMMAND ${CMAKE_COMMAND} -E make_directory ${LLVM_${target_name}_BUILD}
17*9880d681SAndroid Build Coastguard Worker    COMMENT "Creating ${LLVM_${target_name}_BUILD}...")
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker  add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD}/CMakeCache.txt
20*9880d681SAndroid Build Coastguard Worker    COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"
21*9880d681SAndroid Build Coastguard Worker        ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_SOURCE_DIR}
22*9880d681SAndroid Build Coastguard Worker        -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE
23*9880d681SAndroid Build Coastguard Worker    WORKING_DIRECTORY ${LLVM_${target_name}_BUILD}
24*9880d681SAndroid Build Coastguard Worker    DEPENDS ${LLVM_${target_name}_BUILD}
25*9880d681SAndroid Build Coastguard Worker    COMMENT "Configuring ${target_name} LLVM...")
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker  add_custom_target(CONFIGURE_LLVM_${target_name}
28*9880d681SAndroid Build Coastguard Worker                    DEPENDS ${LLVM_${target_name}_BUILD}/CMakeCache.txt)
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker  set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
31*9880d681SAndroid Build Coastguard Worker                                      ${LLVM_${target_name}_BUILD})
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker  if(NOT IS_DIRECTORY ${LLVM_${target_name}_BUILD})
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker    message(STATUS "Configuring ${target_name} build...")
37*9880d681SAndroid Build Coastguard Worker    execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory
38*9880d681SAndroid Build Coastguard Worker      ${LLVM_${target_name}_BUILD} )
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker    message(STATUS "Configuring ${target_name} targets...")
41*9880d681SAndroid Build Coastguard Worker    if (buildtype)
42*9880d681SAndroid Build Coastguard Worker      set(build_type_flags "-DCMAKE_BUILD_TYPE=${buildtype}")
43*9880d681SAndroid Build Coastguard Worker    endif()
44*9880d681SAndroid Build Coastguard Worker    execute_process(COMMAND ${CMAKE_COMMAND} ${build_type_flags}
45*9880d681SAndroid Build Coastguard Worker        -G "${CMAKE_GENERATOR}" -DLLVM_TARGETS_TO_BUILD=${LLVM_TARGETS_TO_BUILD}
46*9880d681SAndroid Build Coastguard Worker        ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_SOURCE_DIR}
47*9880d681SAndroid Build Coastguard Worker        -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE
48*9880d681SAndroid Build Coastguard Worker      WORKING_DIRECTORY ${LLVM_${target_name}_BUILD} )
49*9880d681SAndroid Build Coastguard Worker  endif(NOT IS_DIRECTORY ${LLVM_${target_name}_BUILD})
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerendfunction()
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerfunction(llvm_create_cross_target target_name sysroot)
54*9880d681SAndroid Build Coastguard Worker  llvm_create_cross_target_internal(${target_name} ${sysroot} ${CMAKE_BUILD_TYPE})
55*9880d681SAndroid Build Coastguard Workerendfunction()
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerllvm_create_cross_target_internal(NATIVE "" Release)
58