Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -847,6 +847,7 @@ # when crosscompiling import the executable targets from a file if(LLVM_USE_HOST_TOOLS) include(CrossCompile) + llvm_create_cross_target(LLVM NATIVE "" Release) endif(LLVM_USE_HOST_TOOLS) if(LLVM_TARGET_IS_CROSSCOMPILE_HOST) # Dummy use to avoid CMake Warning: Manually-specified variables were not used Index: cmake/modules/CrossCompile.cmake =================================================================== --- cmake/modules/CrossCompile.cmake +++ cmake/modules/CrossCompile.cmake @@ -1,14 +1,20 @@ include(LLVMExternalProjectUtils) -function(llvm_create_cross_target_internal target_name toolchain buildtype) - if(NOT DEFINED LLVM_${target_name}_BUILD) - set(LLVM_${target_name}_BUILD "${CMAKE_BINARY_DIR}/${target_name}") - set(LLVM_${target_name}_BUILD ${LLVM_${target_name}_BUILD} PARENT_SCOPE) - message(STATUS "Setting native build dir to " ${LLVM_${target_name}_BUILD}) - endif(NOT DEFINED LLVM_${target_name}_BUILD) +function(llvm_create_cross_target project_name target_name toolchain buildtype) - if (EXISTS ${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake) + if(NOT DEFINED ${project_name}_${target_name}_BUILD) + set(${project_name}_${target_name}_BUILD + "${CMAKE_BINARY_DIR}/${target_name}") + set(${project_name}_${target_name}_BUILD + ${${project_name}_${target_name}_BUILD} PARENT_SCOPE) + message(STATUS "Setting native build dir to " ${${project_name}_${target_name}_BUILD}) + endif(NOT DEFINED ${project_name}_${target_name}_BUILD) + + # use old variable format for backwards compatibility + if (CROSS_TOOLCHAIN_FLAGS_NATIVE) + set(CROSS_TOOLCHAIN_FLAGS_INIT=\"${CROSS_TOOLCHAIN_FLAGS_NATIVE}\") + elseif (EXISTS ${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake) set(CROSS_TOOLCHAIN_FLAGS_INIT -DCMAKE_TOOLCHAIN_FILE=\"${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake\") else() @@ -17,7 +23,7 @@ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} ) endif() - set(CROSS_TOOLCHAIN_FLAGS_${target_name} ${CROSS_TOOLCHAIN_FLAGS_INIT} + set(CROSS_TOOLCHAIN_FLAGS_${project_name}_${target_name} ${CROSS_TOOLCHAIN_FLAGS_INIT} CACHE STRING "Toolchain configuration for ${target_name}") if (buildtype) @@ -31,12 +37,12 @@ set(external_clang_dir "-DLLVM_EXTERNAL_CLANG_SOURCE_DIR=${LLVM_EXTERNAL_CLANG_SOURCE_DIR}") endif() - add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD} - COMMAND ${CMAKE_COMMAND} -E make_directory ${LLVM_${target_name}_BUILD} - COMMENT "Creating ${LLVM_${target_name}_BUILD}...") + add_custom_command(OUTPUT ${${project_name}_${target_name}_BUILD} + COMMAND ${CMAKE_COMMAND} -E make_directory ${${project_name}_${target_name}_BUILD} + COMMENT "Creating ${${project_name}_${target_name}_BUILD}...") - add_custom_target(CREATE_LLVM_${target_name} - DEPENDS ${LLVM_${target_name}_BUILD}) + add_custom_target(CREATE_${project_name}_${target_name} + DEPENDS ${${project_name}_${target_name}_BUILD}) # Escape semicolons in the targets list so that cmake doesn't expand # them to spaces. @@ -50,10 +56,10 @@ string(REPLACE ";" "$" llvm_external_projects_arg "${LLVM_EXTERNAL_PROJECTS}") - add_custom_command(OUTPUT ${LLVM_${target_name}_BUILD}/CMakeCache.txt + add_custom_command(OUTPUT ${${project_name}_${target_name}_BUILD}/CMakeCache.txt COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" -DCMAKE_MAKE_PROGRAM="${CMAKE_MAKE_PROGRAM}" - ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_SOURCE_DIR} + ${CROSS_TOOLCHAIN_FLAGS_${project_name}_${target_name}} ${CMAKE_SOURCE_DIR} -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE -DLLVM_TARGETS_TO_BUILD="${targets_to_build_arg}" -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="${experimental_targets_to_build_arg}" @@ -63,17 +69,14 @@ -DLLVM_EXTERNAL_PROJECTS="${llvm_external_projects_arg}" -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN="${LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN}" ${build_type_flags} ${linker_flag} ${external_clang_dir} - WORKING_DIRECTORY ${LLVM_${target_name}_BUILD} - DEPENDS CREATE_LLVM_${target_name} - COMMENT "Configuring ${target_name} LLVM...") - - add_custom_target(CONFIGURE_LLVM_${target_name} - DEPENDS ${LLVM_${target_name}_BUILD}/CMakeCache.txt) + ${ARGN} + WORKING_DIRECTORY ${${project_name}_${target_name}_BUILD} + DEPENDS CREATE_${project_name}_${target_name} + COMMENT "Configuring ${target_name} ${project_name}...") -endfunction() + add_custom_target(CONFIGURE_${project_name}_${target_name} + DEPENDS ${${project_name}_${target_name}_BUILD}/CMakeCache.txt) -function(llvm_create_cross_target target_name sysroot) - llvm_create_cross_target_internal(${target_name} ${sysroot} ${CMAKE_BUILD_TYPE}) endfunction() # Sets up a native build for a tool, used e.g. for cross-compilation and @@ -85,20 +88,18 @@ cmake_parse_arguments(ARG "" "" "DEPENDS" ${ARGN}) if(CMAKE_CONFIGURATION_TYPES) - set(output_path "${LLVM_NATIVE_BUILD}/Release/bin/${target}") + set(output_path "${${CMAKE_PROJECT_NAME}_NATIVE_BUILD}/Release/bin/${target}") else() - set(output_path "${LLVM_NATIVE_BUILD}/bin/${target}") + set(output_path "${${CMAKE_PROJECT_NAME}_NATIVE_BUILD}/bin/${target}") endif() - llvm_ExternalProject_BuildCmd(build_cmd ${target} ${LLVM_NATIVE_BUILD} + llvm_ExternalProject_BuildCmd(build_cmd ${target} ${${CMAKE_PROJECT_NAME}_NATIVE_BUILD} CONFIGURATION Release) add_custom_command(OUTPUT "${output_path}" COMMAND ${build_cmd} - DEPENDS CONFIGURE_LLVM_NATIVE ${ARG_DEPENDS} - WORKING_DIRECTORY "${LLVM_NATIVE_BUILD}" + DEPENDS CONFIGURE_${CMAKE_PROJECT_NAME}_NATIVE ${ARG_DEPENDS} + WORKING_DIRECTORY "${${CMAKE_PROJECT_NAME}_NATIVE_BUILD}" COMMENT "Building native ${target}..." USES_TERMINAL) set(${output_path_var} "${output_path}" PARENT_SCOPE) endfunction() - -llvm_create_cross_target_internal(NATIVE "" Release)