diff --git a/CMakeLists.txt b/CMakeLists.txt index a20fe620fc..279656cbfb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,10 +143,48 @@ compile_flags() add_executable(openttd WIN32 ${GENERATED_SOURCE_FILES}) # All other files are added via target_sources() +set(host_tools_list strgen settingsgen) + +if(CMAKE_CROSSCOMPILING) + # Pawn off the creation of the host utilities into its own dedicated space + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/host_tools) + file(TO_NATIVE_PATH ${CMAKE_COMMAND} native_cmake_command) + file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} native_cmake_current_source_dir) + execute_process( + COMMAND "${native_cmake_command}" "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" "${native_cmake_current_source_dir}" + "-DCMAKE_C_COMPILER=/usr/bin/cc" "-DCMAKE_CXX_COMPILER=/usr/bin/c++" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/host_tools + ) + + add_custom_target(host_tools + COMMAND ${CMAKE_COMMAND} --build . --target host_tools --config $ + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/host_tools + ) + include(${CMAKE_CURRENT_BINARY_DIR}/host_tools/host_tools.cmake) + + foreach(tgt IN ITEMS ${host_tools_list}) + add_dependencies(host${tgt} host_tools) + endforeach() + +else() + # Add an empty target, host tools are built inplace + add_custom_target(host_tools + DEPENDS ${host_tools_list} + ) +endif() + include(AddCustomXXXTimestamp) add_subdirectory(${CMAKE_SOURCE_DIR}/src) add_subdirectory(${CMAKE_SOURCE_DIR}/media/baseset) +if(NOT CMAKE_CROSSCOMPILING) + foreach(tgt IN ITEMS ${host_tools_list}) + add_executable(host${tgt} ALIAS ${tgt}) + endforeach() + + export(TARGETS ${host_tools_list} NAMESPACE host FILE host_tools.cmake) +endif() + add_dependencies(openttd find_version) @@ -265,6 +303,7 @@ add_custom_target(find_version -DFIND_VERSION_BINARY_DIR=${CMAKE_BINARY_DIR}/generated -DCPACK_BINARY_DIR=${CMAKE_BINARY_DIR} -DCONFIGURE_DEFINES="${CFG_DEFS}" + $<$:-DWIN32=TRUE> -P "${CMAKE_SOURCE_DIR}/cmake/scripts/FindVersion.cmake" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} BYPRODUCTS ${GENERATED_SOURCE_FILES} diff --git a/src/lang/CMakeLists.txt b/src/lang/CMakeLists.txt index 00b554126f..9a95d0a12d 100644 --- a/src/lang/CMakeLists.txt +++ b/src/lang/CMakeLists.txt @@ -67,11 +67,11 @@ foreach(LANG_SOURCE_FILE IN LISTS LANG_SOURCE_FILES) add_custom_command(OUTPUT ${LANG_BINARY_FILE} COMMAND ${CMAKE_COMMAND} -E make_directory ${LANG_BINARY_DIR} - COMMAND strgen + COMMAND hoststrgen -s ${CMAKE_CURRENT_SOURCE_DIR} -d ${LANG_BINARY_DIR} ${LANG_SOURCE_FILE} - DEPENDS strgen + DEPENDS hoststrgen MAIN_DEPENDENCY ${LANG_SOURCE_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Compiling language ${LANG_SOURCE_FILE_NAME_WE}" @@ -96,10 +96,10 @@ set(TABLE_BINARY_DIR ${GENERATED_BINARY_DIR}/table) # Generate a command and target to create the strings table add_custom_command_timestamp(OUTPUT ${TABLE_BINARY_DIR}/strings.h COMMAND ${CMAKE_COMMAND} -E make_directory ${TABLE_BINARY_DIR} - COMMAND strgen + COMMAND hoststrgen -s ${CMAKE_CURRENT_SOURCE_DIR} -d ${TABLE_BINARY_DIR} - DEPENDS strgen ${LANG_SOURCE_FILES} + DEPENDS hoststrgen ${LANG_SOURCE_FILES} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating table/strings.h" ) diff --git a/src/table/CMakeLists.txt b/src/table/CMakeLists.txt index 8988b9a0d5..ef0b32fdeb 100644 --- a/src/table/CMakeLists.txt +++ b/src/table/CMakeLists.txt @@ -14,12 +14,12 @@ set(TABLE_INI_SOURCE_FILES # Generate a command and target to create the settings table add_custom_command_timestamp(OUTPUT ${TABLE_BINARY_DIR}/settings.h COMMAND ${CMAKE_COMMAND} -E make_directory ${TABLE_BINARY_DIR} - COMMAND settingsgen + COMMAND hostsettingsgen -o ${TABLE_BINARY_DIR}/settings.h -b ${CMAKE_SOURCE_DIR}/src/table/settings.h.preamble -a ${CMAKE_SOURCE_DIR}/src/table/settings.h.postamble ${TABLE_INI_SOURCE_FILES} - DEPENDS settingsgen ${TABLE_INI_SOURCE_FILES} + DEPENDS hostsettingsgen ${TABLE_INI_SOURCE_FILES} ${CMAKE_SOURCE_DIR}/src/table/settings.h.preamble ${CMAKE_SOURCE_DIR}/src/table/settings.h.postamble WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}