X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=sdk%2Fcmake%2Fhost-tools.cmake;h=dedcb11a4c554696cb0369b87e655cd3dd49628d;hp=92eb199df77b731072e9e5d17df85ac553ff3851;hb=bbe47e61b180c1ce19ecea57ebd852f3434d2207;hpb=6cb3b62b4c5b6f8fd1c28b9f46f30c211c070ec3;ds=sidebyside diff --git a/sdk/cmake/host-tools.cmake b/sdk/cmake/host-tools.cmake index 92eb199df77..dedcb11a4c5 100644 --- a/sdk/cmake/host-tools.cmake +++ b/sdk/cmake/host-tools.cmake @@ -1,72 +1,31 @@ -function(configure_host_tools HOST_TOOLS_DIR) - file(MAKE_DIRECTORY ${HOST_TOOLS_DIR}) - - message(STATUS "Configuring host tools...") - # cmake sets CC and CXX when those languages are enabled - # so we need to clear them here - execute_process(COMMAND - ${CMAKE_COMMAND} - -E env --unset=CC --unset=CXX - ${CMAKE_COMMAND} - -G "${CMAKE_GENERATOR}" - -DARCH:STRING=${ARCH} - ${USE_CLANG_CL_ARG} - ${REACTOS_SOURCE_DIR} - WORKING_DIRECTORY ${HOST_TOOLS_DIR} - RESULT_VARIABLE _host_config_result - OUTPUT_VARIABLE _host_config_log - ERROR_VARIABLE _host_config_log) - - # Show cmake output only if host-tools breaks - if(NOT _host_config_result EQUAL 0) - message("\nHost tools log:") - message("${_host_config_log}") - message(FATAL_ERROR "Failed to configure host tools") - endif() - - set_property(SOURCE host_tools PROPERTY SYMBOLIC 1) - - include(${HOST_TOOLS_DIR}/ImportExecutables.cmake) - include(${HOST_TOOLS_DIR}/TargetList.cmake) - - foreach(_target ${NATIVE_TARGETS}) - get_target_property(_target_location native-${_target} LOCATION) - list(APPEND _target_locations ${_target_location}) - endforeach() - - # Make a host-tools target so it'll be built when needed - # custom target + symbolic output prevents cmake from running - # the command multiple times per build - # Specify the --config option, so the Release/Debug setting from the IDE can be used - add_custom_command( - COMMAND ${CMAKE_COMMAND} --build ${HOST_TOOLS_DIR} --config $ - OUTPUT host_tools - BYPRODUCTS ${_target_locations}) - add_custom_target(build-host-tools ALL DEPENDS host_tools) - - foreach(_target ${NATIVE_TARGETS}) - add_dependencies(native-${_target} build-host-tools) - endforeach() - -endfunction() +include(ExternalProject) function(setup_host_tools) - if(WITH_HOST_TOOLS) - # Use pre-built tools, required for cross compiling with msvc - # as only one target architecture is available at a time - find_path(HOST_TOOLS_DIR - NAMES ImportExecutables.cmake - HINTS ${WITH_HOST_TOOLS} ${REACTOS_SOURCE_DIR}/${WITH_HOST_TOOLS} - NO_CMAKE_PATH - NO_CMAKE_ENVIRONMENT_PATH) - message(STATUS "Using prebuilt host tools: ${HOST_TOOLS_DIR}") - include(${HOST_TOOLS_DIR}/ImportExecutables.cmake) - else() - # Build host-tools. Changes to tool sources will rebuild targets - # using that tool - set(HOST_TOOLS_DIR ${REACTOS_BINARY_DIR}/host-tools) - configure_host_tools(${HOST_TOOLS_DIR}) + list(APPEND HOST_TOOLS bin2c widl gendib cabman fatten hpp isohybrid mkhive mkisofs obj2bin spec2def geninc mkshelllink utf16le xml2sdb) + if(NOT MSVC) + list(APPEND HOST_TOOLS rsym pefixup) + endif() + list(TRANSFORM HOST_TOOLS PREPEND "${REACTOS_BINARY_DIR}/host-tools/bin/" OUTPUT_VARIABLE HOST_TOOLS_OUTPUT) + if (CMAKE_HOST_WIN32) + list(TRANSFORM HOST_TOOLS_OUTPUT APPEND ".exe") + set(HOST_EXE_SUFFIX ".exe") endif() + ExternalProject_Add(host-tools + SOURCE_DIR ${REACTOS_SOURCE_DIR} + PREFIX ${REACTOS_BINARY_DIR}/host-tools + INSTALL_DIR ${REACTOS_BINARY_DIR}/host-tools + CMAKE_ARGS -UCMAKE_TOOLCHAIN_FILE -DARCH:STRING=${ARCH} -DCMAKE_INSTALL_PREFIX=${REACTOS_BINARY_DIR}/host-tools + BUILD_ALWAYS TRUE + BUILD_BYPRODUCTS ${HOST_TOOLS_OUTPUT} + ) + + ExternalProject_Get_Property(host-tools INSTALL_DIR) + + foreach(_tool ${HOST_TOOLS}) + add_executable(native-${_tool} IMPORTED) + set_target_properties(native-${_tool} PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/bin/${_tool}${HOST_EXE_SUFFIX}) + add_dependencies(native-${_tool} host-tools) + endforeach() endfunction()