brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.9 KiB · 2a69c51 Raw
156 lines · plain
1include(AddLLVM)2include(LLVMExternalProjectUtils)3 4 5function(llvm_create_cross_target project_name target_name toolchain buildtype)6 7  if(NOT DEFINED ${project_name}_${target_name}_BUILD)8    set(${project_name}_${target_name}_BUILD9      "${CMAKE_CURRENT_BINARY_DIR}/${target_name}")10    set(${project_name}_${target_name}_BUILD11      ${${project_name}_${target_name}_BUILD} PARENT_SCOPE)12    message(STATUS "Setting native build dir to " ${${project_name}_${target_name}_BUILD})13  endif(NOT DEFINED ${project_name}_${target_name}_BUILD)14 15  if(NOT DEFINED ${project_name}_${target_name}_STAMP)16    set(${project_name}_${target_name}_STAMP17      "${CMAKE_CURRENT_BINARY_DIR}/${target_name}-stamps")18    set(${project_name}_${target_name}_STAMP19      ${${project_name}_${target_name}_STAMP} PARENT_SCOPE)20    message(STATUS "Setting native stamp dir to " ${${project_name}_${target_name}_STAMP})21  endif(NOT DEFINED ${project_name}_${target_name}_STAMP)22 23  if (EXISTS ${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake)24    set(CROSS_TOOLCHAIN_FLAGS_INIT25      -DCMAKE_TOOLCHAIN_FILE=\"${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake\")26  elseif (NOT CMAKE_CROSSCOMPILING)27    set(CROSS_TOOLCHAIN_FLAGS_INIT28      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}29      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}30      )31  endif()32  set(CROSS_TOOLCHAIN_FLAGS_${target_name} ${CROSS_TOOLCHAIN_FLAGS_INIT}33    CACHE STRING "Toolchain configuration for ${target_name}")34 35  # project specific version of the flags up above36  set(CROSS_TOOLCHAIN_FLAGS_${project_name}_${target_name} ""37    CACHE STRING "Toolchain configuration for ${project_name}_${target_name}")38 39  if (buildtype)40    set(build_type_flags "-DCMAKE_BUILD_TYPE=${buildtype}")41  endif()42  if (LLVM_USE_LINKER AND NOT CMAKE_CROSSCOMPILING)43    set(linker_flag "-DLLVM_USE_LINKER=${LLVM_USE_LINKER}")44  endif()45  if (LLVM_EXTERNAL_CLANG_SOURCE_DIR)46    # Propagate LLVM_EXTERNAL_CLANG_SOURCE_DIR so that clang-tblgen can be built47    set(external_clang_dir "-DLLVM_EXTERNAL_CLANG_SOURCE_DIR=${LLVM_EXTERNAL_CLANG_SOURCE_DIR}")48  endif()49 50  add_custom_command(OUTPUT ${${project_name}_${target_name}_BUILD}51    COMMAND ${CMAKE_COMMAND} -E make_directory ${${project_name}_${target_name}_BUILD}52    COMMENT "Creating ${${project_name}_${target_name}_BUILD}...")53 54  add_custom_target(CREATE_${project_name}_${target_name}55    DEPENDS ${${project_name}_${target_name}_BUILD})56  get_subproject_title(subproject_title)57  set_target_properties(CREATE_${project_name}_${target_name} PROPERTIES FOLDER "${subproject_title}/Native")58 59  # Escape semicolons in the targets list so that cmake doesn't expand60  # them to spaces.61  string(REPLACE ";" "$<SEMICOLON>" targets_to_build_arg62         "${LLVM_TARGETS_TO_BUILD}")63  string(REPLACE ";" "$<SEMICOLON>" experimental_targets_to_build_arg64         "${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD}")65 66  string(REPLACE ";" "$<SEMICOLON>" llvm_enable_projects_arg67         "${LLVM_ENABLE_PROJECTS}")68  string(REPLACE ";" "$<SEMICOLON>" llvm_external_projects_arg69         "${LLVM_EXTERNAL_PROJECTS}")70  string(REPLACE ";" "$<SEMICOLON>" llvm_enable_runtimes_arg71         "${LLVM_ENABLE_RUNTIMES}")72 73  set(external_project_source_dirs)74  foreach(project ${LLVM_EXTERNAL_PROJECTS})75    canonicalize_tool_name(${project} name)76    list(APPEND external_project_source_dirs77         "-DLLVM_EXTERNAL_${name}_SOURCE_DIR=${LLVM_EXTERNAL_${name}_SOURCE_DIR}")78  endforeach()79 80  if(LLVM_LIBC_GPU_BUILD)81    set(libc_flags -DLLVM_LIBC_GPU_BUILD=ON)82  endif()83 84  add_custom_command(OUTPUT ${${project_name}_${target_name}_BUILD}/CMakeCache.txt85    COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"86        "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}"87        "-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}"88        "-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}"89        ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_CURRENT_SOURCE_DIR}90        ${CROSS_TOOLCHAIN_FLAGS_${project_name}_${target_name}}91        -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE92        -DLLVM_TARGETS_TO_BUILD="${targets_to_build_arg}"93        -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${experimental_targets_to_build_arg}"94        -DLLVM_DEFAULT_TARGET_TRIPLE="${LLVM_TARGET_TRIPLE}"95        -DLLVM_TARGET_ARCH="${LLVM_TARGET_ARCH}"96        -DLLVM_ENABLE_PROJECTS="${llvm_enable_projects_arg}"97        -DLLVM_EXTERNAL_PROJECTS="${llvm_external_projects_arg}"98        -DLLVM_ENABLE_RUNTIMES="${llvm_enable_runtimes_arg}"99        ${external_project_source_dirs}100        -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN="${LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN}"101        -DLLVM_INCLUDE_BENCHMARKS=OFF102        -DLLVM_INCLUDE_TESTS=OFF103        -DLLVM_TABLEGEN_FLAGS="${LLVM_TABLEGEN_FLAGS}"104        -DPYTHON_EXECUTABLE="${PYTHON_EXECUTABLE}"105        ${build_type_flags} ${linker_flag} ${external_clang_dir} ${libc_flags}106        ${ARGN}107    WORKING_DIRECTORY ${${project_name}_${target_name}_BUILD}108    DEPENDS CREATE_${project_name}_${target_name}109    COMMENT "Configuring ${target_name} ${project_name}...")110 111  add_custom_target(CONFIGURE_${project_name}_${target_name}112    DEPENDS ${${project_name}_${target_name}_BUILD}/CMakeCache.txt)113  get_subproject_title(subproject_title)114  set_target_properties(CONFIGURE_${project_name}_${target_name} PROPERTIES FOLDER "${subproject_title}/Native")115 116endfunction()117 118function(get_native_tool_path target output_path_var)119  if(CMAKE_CONFIGURATION_TYPES)120    set(output_path "${${PROJECT_NAME}_NATIVE_BUILD}/Release/bin/${target}")121  else()122    set(output_path "${${PROJECT_NAME}_NATIVE_BUILD}/bin/${target}")123  endif()124  set(${output_path_var} ${output_path}${LLVM_HOST_EXECUTABLE_SUFFIX} PARENT_SCOPE)125endfunction()126 127# Sets up a native build for a tool, used e.g. for cross-compilation and128# LLVM_OPTIMIZED_TABLEGEN. Always builds in Release.129# - target: The target to build natively130# - output_path_var: A variable name which receives the path to the built target131# - DEPENDS: Any additional dependencies for the target132function(build_native_tool target output_path_var)133  cmake_parse_arguments(ARG "" "" "DEPENDS" ${ARGN})134 135  get_native_tool_path(${target} output_path)136 137  # Make chain of preceding actions138  if(CMAKE_GENERATOR MATCHES "Visual Studio")139    get_property(host_targets GLOBAL PROPERTY ${PROJECT_NAME}_HOST_TARGETS)140    set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_HOST_TARGETS ${output_path})141  endif()142 143  llvm_ExternalProject_BuildCmd(build_cmd ${target}144                                ${${PROJECT_NAME}_NATIVE_BUILD}145                                ${${PROJECT_NAME}_NATIVE_STAMP}146                                CONFIGURATION Release)147  add_custom_command(OUTPUT "${output_path}"148                     COMMAND ${build_cmd}149                     DEPENDS CONFIGURE_${PROJECT_NAME}_NATIVE ${ARG_DEPENDS} ${host_targets}150                     WORKING_DIRECTORY "${${PROJECT_NAME}_NATIVE_BUILD}"151                     COMMENT "Building native ${target}..."152                     USES_TERMINAL153                     VERBATIM)154  set(${output_path_var} "${output_path}" PARENT_SCOPE)155endfunction()156