diff --git a/CMakeLists.txt b/CMakeLists.txt index 953373b5..1a81742f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,6 +78,8 @@ if(FORCE_COLORED_OUTPUT) endif() endif() +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") + include(GNUInstallDirs) if(FORCE_PORTABLE_INSTALL) set(CMAKE_INSTALL_BINDIR ".") @@ -110,6 +112,15 @@ if(BUILD_TESTING) add_subdirectory(tests) endif() +# Define names for HOG files +if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") + set(HOG_NAME "linux") +elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(HOG_NAME "osx") +elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(HOG_NAME "win") +endif() + # rebuild d3_version.h every time add_custom_target(get_git_hash ALL) diff --git a/Descent3/CMakeLists.txt b/Descent3/CMakeLists.txt index 8cdd2755..4e29fd6e 100644 --- a/Descent3/CMakeLists.txt +++ b/Descent3/CMakeLists.txt @@ -344,7 +344,34 @@ target_link_libraries(Descent3 PRIVATE ${PLATFORM_LIBS}) target_include_directories(Descent3 PRIVATE ${PROJECT_BINARY_DIR}/lib) target_link_options(Descent3 PRIVATE $<$:/DEBUG:FULL>) -add_dependencies(Descent3 get_git_hash Direct_TCP_IP_Hog Descent3_Online_TCP_IP_Hog HogFull NetgamesDir Parallax_Online_Hog) +add_dependencies(Descent3 + get_git_hash + Direct_TCP_IP_Hog + Descent3_Online_TCP_IP_Hog + HogFull + Parallax_Online_Hog + anarchy + coop + ctf + entropy + hoard + hyperanarchy + monsterball + roboanarchy + tanarchy +) + +# Custom command for copying custom targets such HOG files +# We cannot use here TARGET_FILE_DIR generated expressions since custom target don't have one +add_custom_command(TARGET Descent3 POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/scripts/$/d3-${HOG_NAME}.hog" "$" + COMMAND ${CMAKE_COMMAND} -E make_directory "$/online" + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/netcon/descent3onlineclient/$/Descent3 Online.d3c" "$/online" + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/netcon/lanclient/$/Direct TCP~IP.d3c" "$/online" + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/netcon/mtclient/$/Parallax Online.d3c" "$/online" + COMMENT "Copying HOG-files into Descent3 work dir" +) + install(TARGETS Descent3 RUNTIME BUNDLE DESTINATION .) if(MSVC) install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/cmake/HogMaker.cmake b/cmake/HogMaker.cmake new file mode 100644 index 00000000..4f58acc8 --- /dev/null +++ b/cmake/HogMaker.cmake @@ -0,0 +1,58 @@ +# Descent 3 +# Copyright (C) 2024 Descent Developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# - Function making a HOG file based on supplied filelist. +# +# This module provides function MakeHog() used for building HOG files. +# MakeHog() registers custom target TARGET which can be used as dependency. +# +# MakeHog( +# +# +# +# [SEARCH_PATH additional_dirs] +# [DEPENDS additional_dependencies] +# ) +# + +function(MakeHog) + set(options) + set(oneValueArgs INPUT_FILE OUTPUT TARGET) + set(multiValueArgs DEPENDS SEARCH_PATH) + + cmake_parse_arguments(PARSE_ARGV 0 + "HOG" + "${options}" + "${oneValueArgs}" + "${multiValueArgs}" + ) + + # Register custom target for tracking dependencies + add_custom_target("${HOG_TARGET}" + DEPENDS "${HOG_OUTPUT}" + ) + + add_custom_command(OUTPUT "${HOG_OUTPUT}" + COMMAND $ + "${HOG_OUTPUT}" + "${HOG_INPUT_FILE}" + "${HOG_SEARCH_PATH}" + DEPENDS HogMaker ${HOG_INPUT_FILE} ${HOG_DEPENDS} + COMMENT "Generate ${HOG_OUTPUT}" + COMMAND_EXPAND_LISTS + ) +endfunction() diff --git a/netcon/descent3onlineclient/CMakeLists.txt b/netcon/descent3onlineclient/CMakeLists.txt index 2fcdd697..fbf3255e 100644 --- a/netcon/descent3onlineclient/CMakeLists.txt +++ b/netcon/descent3onlineclient/CMakeLists.txt @@ -26,14 +26,12 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set_target_properties(Descent3_Online_TCP_IP PROPERTIES SUFFIX ".dylib") endif() -add_custom_target(Descent3_Online_TCP_IP_Hog - COMMAND $ - "$/online/Descent3 Online.d3c" - "${CMAKE_SOURCE_DIR}/netcon/descent3onlineclient/d3online.d3c.txt" - "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" - "$" - - DEPENDS Descent3_Online_TCP_IP HogMaker - COMMENT "Generate 'Descent3 Online.d3c'" +include(HogMaker) +MakeHog( + TARGET Descent3_Online_TCP_IP_Hog + OUTPUT "$/Descent3 Online.d3c" + INPUT_FILE "${CMAKE_SOURCE_DIR}/netcon/descent3onlineclient/d3online.d3c.txt" + SEARCH_PATH "$" "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" + DEPENDS Descent3_Online_TCP_IP ) -install(FILES "$/online/Descent3 Online.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$/Descent3 Online.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online) diff --git a/netcon/descent3onlineclient/d3online.d3c.txt b/netcon/descent3onlineclient/d3online.d3c.txt index b9480aff..6ca42f50 100644 --- a/netcon/descent3onlineclient/d3online.d3c.txt +++ b/netcon/descent3onlineclient/d3online.d3c.txt @@ -4,4 +4,3 @@ Descent3 Online.dll Descent3 Online.dylib d3online_main.ogf d3online_game.ogf - diff --git a/netcon/lanclient/CMakeLists.txt b/netcon/lanclient/CMakeLists.txt index f6237c66..e8edf223 100644 --- a/netcon/lanclient/CMakeLists.txt +++ b/netcon/lanclient/CMakeLists.txt @@ -19,14 +19,12 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set_target_properties(Direct_TCP_IP PROPERTIES SUFFIX ".dylib") endif() -add_custom_target(Direct_TCP_IP_Hog - COMMAND $ - "$/online/Direct TCP~IP.d3c" - "${CMAKE_SOURCE_DIR}/netcon/lanclient/TCP_IP.d3c.txt" - "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" - "$" - - DEPENDS Direct_TCP_IP HogMaker - COMMENT "Generate 'Direct TCP~IP.d3c'" +include(HogMaker) +MakeHog( + TARGET Direct_TCP_IP_Hog + OUTPUT "$/Direct TCP~IP.d3c" + INPUT_FILE "${CMAKE_SOURCE_DIR}/netcon/lanclient/TCP_IP.d3c.txt" + SEARCH_PATH "$" "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" + DEPENDS Direct_TCP_IP ) -install(FILES "$/online/Direct TCP~IP.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$/Direct TCP~IP.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online) diff --git a/netcon/mtclient/CMakeLists.txt b/netcon/mtclient/CMakeLists.txt index 5a85ad0a..81a689d9 100644 --- a/netcon/mtclient/CMakeLists.txt +++ b/netcon/mtclient/CMakeLists.txt @@ -29,14 +29,13 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set_target_properties(Parallax_Online PROPERTIES SUFFIX ".dylib") endif() -add_custom_target(Parallax_Online_Hog - COMMAND $ - "$/online/Parallax Online.d3c" - "${CMAKE_SOURCE_DIR}/netcon/mtclient/Parallax_Online.d3c.txt" - "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" - "$" - - DEPENDS Parallax_Online HogMaker - COMMENT "Generate 'Parallax Online.d3c'" +include(HogMaker) +MakeHog( + TARGET Parallax_Online_Hog + OUTPUT "$/Parallax Online.d3c" + INPUT_FILE "${CMAKE_SOURCE_DIR}/netcon/mtclient/Parallax_Online.d3c.txt" + SEARCH_PATH "$" "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" + DEPENDS Parallax_Online ) -install(FILES "$/online/Parallax Online.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$/Parallax Online.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online) diff --git a/netgames/CMakeLists.txt b/netgames/CMakeLists.txt index 18de0e0a..479a40d1 100644 --- a/netgames/CMakeLists.txt +++ b/netgames/CMakeLists.txt @@ -11,16 +11,3 @@ add_subdirectory(hyperanarchy) add_subdirectory(monsterball) add_subdirectory(roboanarchy) add_subdirectory(tanarchy) - -add_custom_target(NetgamesDir - COMMAND ${CMAKE_COMMAND} -E copy $ "$/netgames/Anarchy.d3m" - COMMAND ${CMAKE_COMMAND} -E copy $ "$/netgames/Co-op.d3m" - COMMAND ${CMAKE_COMMAND} -E copy $ "$/netgames/CTF.d3m" - COMMAND ${CMAKE_COMMAND} -E copy $ "$/netgames/Entropy.d3m" - COMMAND ${CMAKE_COMMAND} -E copy $ "$/netgames/Hoard.d3m" - COMMAND ${CMAKE_COMMAND} -E copy $ "$/netgames/Hyper-Anarchy.d3m" - COMMAND ${CMAKE_COMMAND} -E copy $ "$/netgames/Monsterball.d3m" - COMMAND ${CMAKE_COMMAND} -E copy $ "$/netgames/Robo-Anarchy.d3m" - COMMAND ${CMAKE_COMMAND} -E copy $ "$/netgames/Team Anarchy.d3m" - COMMENT "Create netgames/ directory" -) diff --git a/netgames/anarchy/CMakeLists.txt b/netgames/anarchy/CMakeLists.txt index 7783b4ca..96454d09 100644 --- a/netgames/anarchy/CMakeLists.txt +++ b/netgames/anarchy/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS}) set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") +set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$/netgames") target_link_libraries(${NETGAME_MODULE} PRIVATE dmfc diff --git a/netgames/coop/CMakeLists.txt b/netgames/coop/CMakeLists.txt index c69e2996..43111250 100644 --- a/netgames/coop/CMakeLists.txt +++ b/netgames/coop/CMakeLists.txt @@ -9,6 +9,7 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS}) set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") +set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$/netgames") target_link_libraries(${NETGAME_MODULE} PRIVATE dmfc diff --git a/netgames/ctf/CMakeLists.txt b/netgames/ctf/CMakeLists.txt index 211cd7a7..d226d1ee 100644 --- a/netgames/ctf/CMakeLists.txt +++ b/netgames/ctf/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS}) set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") +set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$/netgames") target_link_libraries(${NETGAME_MODULE} PRIVATE dmfc diff --git a/netgames/entropy/CMakeLists.txt b/netgames/entropy/CMakeLists.txt index ce4f7481..7a759f47 100644 --- a/netgames/entropy/CMakeLists.txt +++ b/netgames/entropy/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS}) set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") +set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$/netgames") target_link_libraries(${NETGAME_MODULE} PRIVATE dmfc diff --git a/netgames/hoard/CMakeLists.txt b/netgames/hoard/CMakeLists.txt index e5b5c779..523098d3 100644 --- a/netgames/hoard/CMakeLists.txt +++ b/netgames/hoard/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS}) set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") +set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$/netgames") target_link_libraries(${NETGAME_MODULE} PRIVATE dmfc diff --git a/netgames/hyperanarchy/CMakeLists.txt b/netgames/hyperanarchy/CMakeLists.txt index 4364cd7b..ee80cb3d 100644 --- a/netgames/hyperanarchy/CMakeLists.txt +++ b/netgames/hyperanarchy/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS}) set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") +set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$/netgames") target_link_libraries(${NETGAME_MODULE} PRIVATE dmfc diff --git a/netgames/monsterball/CMakeLists.txt b/netgames/monsterball/CMakeLists.txt index bfffff2d..b94037fa 100644 --- a/netgames/monsterball/CMakeLists.txt +++ b/netgames/monsterball/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS}) set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") +set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$/netgames") target_link_libraries(${NETGAME_MODULE} PRIVATE dmfc diff --git a/netgames/roboanarchy/CMakeLists.txt b/netgames/roboanarchy/CMakeLists.txt index aea13703..49dabd5e 100644 --- a/netgames/roboanarchy/CMakeLists.txt +++ b/netgames/roboanarchy/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS}) set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") +set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$/netgames") target_link_libraries(${NETGAME_MODULE} PRIVATE dmfc diff --git a/netgames/tanarchy/CMakeLists.txt b/netgames/tanarchy/CMakeLists.txt index 1d48e936..42ce3796 100644 --- a/netgames/tanarchy/CMakeLists.txt +++ b/netgames/tanarchy/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS}) set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") +set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$/netgames") target_link_libraries(${NETGAME_MODULE} PRIVATE dmfc diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 7c09cc35..ece3ee7d 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -67,12 +67,8 @@ set(SCRIPTS SewerRat testscript TrainingMission - Y2K) - -#add_custom_target(HogDemo-copy -# COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/scripts/data/demohog ${CMAKE_BINARY_DIR}/scripts/data/demohog/ -# COMMENT "Copy script/data/demohog directory" -#) + Y2K +) add_library(dallas STATIC DallasFuncs.cpp osiris_import.cpp osiris_vector.cpp) set_target_properties(dallas PROPERTIES PREFIX "") @@ -94,25 +90,15 @@ foreach(SCRIPT ${SCRIPTS}) endif() endforeach() -if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") - set(HOG_NAME "linux") -elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(HOG_NAME "osx") -elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") - set(HOG_NAME "win") -endif() - -add_custom_target(HogFull - COMMAND $ - "$/d3-${HOG_NAME}.hog" - "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/d3-${HOG_NAME}-fullhog.txt" - "$" - DEPENDS ${SCRIPTS} HogMaker data/fullhog/d3-${HOG_NAME}-fullhog.txt - COMMENT "Generate fullhog/d3-${HOG_NAME}.hog" +include(HogMaker) +MakeHog( + TARGET HogFull + OUTPUT "$/d3-${HOG_NAME}.hog" + INPUT_FILE "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/d3-${HOG_NAME}-fullhog.txt" + SEARCH_PATH "$" + DEPENDS ${SCRIPTS} ) - -# Place file next to Descent3 executable on installation -install(FILES "$/d3-${HOG_NAME}.hog" DESTINATION ${CMAKE_INSTALL_DATADIR}) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$/d3-${HOG_NAME}.hog" DESTINATION ${CMAKE_INSTALL_DATADIR}) # FIXME: there may be only one d3-linux.hog, need deal with demo somehow. # add_custom_target(HogLinuxDemo