Merge pull request #637 from winterheart/cmake-makehogs

Optimize making HOG files
This commit is contained in:
Louis Gombert 2024-10-29 20:05:57 +00:00 committed by GitHub
commit f6faeaacb7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
22 changed files with 261 additions and 95 deletions

View File

@ -40,7 +40,7 @@ The build process uses [**CMake**](https://cmake.org/) and, by default, [**Ninja
git clone --recurse-submodules https://github.com/DescentDevelopers/Descent3 git clone --recurse-submodules https://github.com/DescentDevelopers/Descent3
``` ```
4. **Build Descent3.** 3. **Build Descent3.**
```batch ```batch
cd Descent3 cd Descent3
@ -49,7 +49,7 @@ The build process uses [**CMake**](https://cmake.org/) and, by default, [**Ninja
``` ```
See [Build Options](#build-options) below for more information on `Debug` vs `Release`. See [Build Options](#build-options) below for more information on `Debug` vs `Release`.
Once CMake finishes, the built files will be put in `builds\win\Descent3\Debug` or `builds\win\Descent3\Release`. Once CMake finishes, the built files will be put in `builds\win\build\Debug` or `builds\win\build\Release`.
## Building - macOS ## Building - macOS
1. **Install the prerequisite build tools.** 1. **Install the prerequisite build tools.**
@ -87,7 +87,7 @@ Once CMake finishes, the built files will be put in `builds\win\Descent3\Debug`
``` ```
See [Build Options](#build-options) below for more information on `Debug` vs `Release`. See [Build Options](#build-options) below for more information on `Debug` vs `Release`.
Once CMake finishes, the built files will be put in `builds/mac/Descent3/Debug` or `builds/mac/Descent3/Release`. Once CMake finishes, the built files will be put in `builds/mac/build/Debug` or `builds/mac/build/Release`.
## Building - Linux ## Building - Linux
1. **Install the prerequisite build tools.** 1. **Install the prerequisite build tools.**
@ -147,7 +147,30 @@ Once CMake finishes, the built files will be put in `builds/mac/Descent3/Debug`
``` ```
See [Build Options](#build-options) below for more information on `Debug` vs `Release`. See [Build Options](#build-options) below for more information on `Debug` vs `Release`.
Once CMake finishes, the built files will be put in `builds/linux/Descent3/Debug` or `builds/linux/Descent3/Release`. Once CMake finishes, the built files will be put in `builds/linux/build/Debug` or `builds/linux/build/Release`.
## Cross-compilation
In order to cross-compile Descent3 to another platform (for example, Linux ARM64), you'll need to build auxiliary
tools which needed to build data files. First create build-native directory and configure project in it:
```shell
mkdir build-native
cd build-native
cmake ..
make HogMaker
```
Now you ready for cross-compilation. Create cross-compile directory and configure project in it, but this time add
`-DCMAKE_TOOLCHAIN_FILE=MyToolchain.cmake` and `-DHogMaker_DIR=<path-to-Descent3/build-native/` options. This enables
cross-compilation environment.
```shell
mkdir build-cross
cd build-cross
cmake -DCMAKE_TOOLCHAIN_FILE=MyToolchain.cmake -DHogMaker_DIR=~/src/build-native/ ..
make
```
## Build Options ## Build Options

View File

@ -78,6 +78,8 @@ if(FORCE_COLORED_OUTPUT)
endif() endif()
endif() endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(GNUInstallDirs) include(GNUInstallDirs)
if(FORCE_PORTABLE_INSTALL) if(FORCE_PORTABLE_INSTALL)
set(CMAKE_INSTALL_BINDIR ".") set(CMAKE_INSTALL_BINDIR ".")
@ -86,6 +88,15 @@ if(FORCE_PORTABLE_INSTALL)
set(CMAKE_INSTALL_DOCDIR ".") set(CMAKE_INSTALL_DOCDIR ".")
endif() endif()
# Get info about multi-config environment
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
# Properly determine output directory for generated files
if(IS_MULTI_CONFIG)
set(D3_GENERATED_FILES_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/build/$<CONFIG>")
else ()
set(D3_GENERATED_FILES_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/build")
endif()
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/installed" CACHE PATH "Default install path" FORCE) set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/installed" CACHE PATH "Default install path" FORCE)
endif() endif()
@ -110,6 +121,15 @@ if(BUILD_TESTING)
add_subdirectory(tests) add_subdirectory(tests)
endif() 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 # rebuild d3_version.h every time
add_custom_target(get_git_hash ALL) add_custom_target(get_git_hash ALL)

View File

@ -344,7 +344,24 @@ target_link_libraries(Descent3 PRIVATE
${PLATFORM_LIBS}) ${PLATFORM_LIBS})
target_include_directories(Descent3 PRIVATE ${PROJECT_BINARY_DIR}/lib) target_include_directories(Descent3 PRIVATE ${PROJECT_BINARY_DIR}/lib)
target_link_options(Descent3 PRIVATE $<$<PLATFORM_ID:Windows>:/DEBUG:FULL>) target_link_options(Descent3 PRIVATE $<$<PLATFORM_ID:Windows>:/DEBUG:FULL>)
add_dependencies(Descent3 get_git_hash Direct_TCP_IP_Hog Descent3_Online_TCP_IP_Hog HogFull NetgamesDir Parallax_Online_Hog) set_target_properties(Descent3 PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/build")
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
)
install(TARGETS Descent3 RUNTIME BUNDLE DESTINATION .) install(TARGETS Descent3 RUNTIME BUNDLE DESTINATION .)
if(MSVC) if(MSVC)
install(FILES $<TARGET_PDB_FILE:Descent3> DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES $<TARGET_PDB_FILE:Descent3> DESTINATION ${CMAKE_INSTALL_BINDIR})

View File

@ -1,31 +1,74 @@
# Descent 3 Open source usage instructions # Descent 3 Open source usage instructions
**Important note**: This open source distribution of Descent 3 DOES NOT CONTAIN GAME ASSETS. Assets must be acquired separately from an official copy of the game, and copied as describe in the next section. **Important note**: This open source distribution of Descent 3 DOES NOT CONTAIN
GAME ASSETS. Assets must be acquired separately from an official copy of the
game, and copied as describe in the next section.
This is the first release of the Descent 3 open source engine, that should be considered a beta version. If you find a bug that has not been reported before, please open a new ticket it on our [online issue tracker](https://github.com/DescentDevelopers/Descent3/issues). This is the first release of the Descent 3 open source engine, that should be
considered a beta version. If you find a bug that has not been reported before,
please open a new ticket it on our [online issue tracker](https://github.com/DescentDevelopers/Descent3/issues).
1. Make sure that you have a copy of Descent 3. You can purchase a copy of
Descent 3 from [GOG](https://www.gog.com/game/descent_3_expansion) or
[Steam](https://store.steampowered.com/app/273590/Descent_3/).
1. Make sure that you have a copy of Descent 3. You can purchase a copy of Descent 3 from [GOG](https://www.gog.com/game/descent_3_expansion) or [Steam](https://store.steampowered.com/app/273590/Descent_3/).
2. Install Descent 3. 2. Install Descent 3.
**Note for Steam users:** If you own Descent 3 on Steam, then its recommended that you install the Windows version of the game even if youre running macOS or Linux, otherwise movies will not work due to [current lack of Ogv support](https://github.com/DescentDevelopers/Descent3/issues/240). You can use either [Steam Play](https://help.steampowered.com/en/faqs/view/08F7-5D56-9654-39AF) or [SteamCMD](https://developer.valvesoftware.com/wiki/SteamCMD#Cross-Platform_Installation) to install the Windows version of the game on macOS or Linux. **Note for Steam users:** If you own Descent 3 on Steam, then its recommended
3. If your version of Descent 3 is older than v1.4, then [update it to v1.4](http://descent3.com/downloads.php). that you install the Windows version of the game even if youre running macOS
4. Find the installation location of Descent 3. Using the Steam client, you can find it from the library page using the `Manage > Browse local files` context menu. or Linux, otherwise movies will not work due to
[current lack of OGV support](https://github.com/DescentDevelopers/Descent3/issues/240).
You can use either [Steam Play](https://help.steampowered.com/en/faqs/view/08F7-5D56-9654-39AF)
or [SteamCMD](https://developer.valvesoftware.com/wiki/SteamCMD#Cross-Platform_Installation)
to install the Windows version of the game on macOS or Linux.
3. If your version of Descent 3 is older than v1.4, then
[update it to v1.4](http://descent3.com/downloads.php).
4. Find the installation location of Descent 3. Using the Steam client, you can
find it from the library page using the `Manage > Browse local files`
context menu.
5. Create a new folder named `D3-open-source`. 5. Create a new folder named `D3-open-source`.
6. Copy the following files from your installation of Descent 3 to `D3-open-source`: 6. Copy the following files from your installation of Descent 3 to `D3-open-source`:
- All `.hog` files - All `.hog` files
- The `missions` folder - The `missions` folder
- _(Optional)_ All `.pld` files - _(Optional)_ All `.pld` files
- _(Optional)_ The `movies` folder - _(Optional)_ The `movies` folder
7. Create the `custom/` folder in `D3-open-source` 7. Create the `custom/` folder in `D3-open-source`
8. Obtain new Descent 3 engine files: 8. Obtain new Descent 3 engine files:
- If you want to use pre-built binaries, then download the latest [release](https://github.com/DescentDevelopers/Descent3/releases). For a more cutting-edge experience with the latest features, use the artifacts from the latest automated build. You can find the list of automated builds [here](https://github.com/DescentDevelopers/Descent3/actions/workflows/build.yml?query=branch%3Amain+event%3Apush). - If you want to use pre-built binaries, then download the latest
- If you want to build the engine files yourself, the follow the instructions in [BUILD.md](BUILD.md). Once you build the engine files, theyll be put in `builds/<platform>/Descent3/<build-type>/`. For example, if youre using Linux and you create a “Release” build, then the files will be located at `builds/linux/Descent3/Release`. [release](https://github.com/DescentDevelopers/Descent3/releases). For a
9. Copy all of the new engine files into `D3-open-source` and overwrite any conflicts. more cutting-edge experience with the latest features, use the artifacts
from the latest automated build. You can find the list of automated
builds [here](https://github.com/DescentDevelopers/Descent3/actions/workflows/build.yml?query=branch%3Amain+event%3Apush).
- If you want to build the engine files yourself, the follow the
instructions in [BUILD.md](BUILD.md). Once you build the engine files,
theyll be put in `builds/<platform>/<build-type>/`. For example, if
youre using Linux and you create a “Release” build, then the files will
be located at `builds/linux/Release`.
9. Copy all the new engine files into `D3-open-source` and overwrite any
conflicts.
10. Special notes: 10. Special notes:
- D3 Open Source compiles level scripts in their own hogfiles. Make sure you copy and overwrite `d3-{platform}.hog`. - D3 Open Source compiles level scripts in their own hogfiles. Make sure
you copy and overwrite `d3-{platform}.hog`.
11. Run the game: 11. Run the game:
- On Windows, run `D3-open-source\Descent3.exe` from a command-line or double-click on the `Descent3` executable. - On Windows, run `D3-open-source\Descent3.exe` from a command-line or
- On Linux, `cd` to `D3-open-source` and run `./Descent3`. Wayland users may need to set environement variable `SDL_VIDEODRIVER=wayland` before launching the game. double-click on the `Descent3` executable.
- On MacOS, the `.app` bundle is currently not signed, so your operating system will not let you run it by double-clicking it. To remediate that, open your terminal and `cd` to `D3-open-source`. Run `xattr -c ./Descent3.app` and then `chmod +x ./Descent3.app/Content/MacOS/Descent3`, then run the game using `./Descent3.app/Content/MacOS/Descent3` - On Linux, `cd` to `D3-open-source` and run `./Descent3`. Wayland users
may need to set environment variable `SDL_VIDEODRIVER=wayland` before
launching the game.
- On macOS, the `.app` bundle is currently not signed, so your operating
system will not let you run it by double-clicking it. To remediate that,
open your terminal and `cd` to `D3-open-source`. Run
`xattr -c ./Descent3.app` and then
`chmod +x ./Descent3.app/Content/MacOS/Descent3`, then run the game
using `./Descent3.app/Content/MacOS/Descent3`
## Troubleshooting ## Troubleshooting
@ -33,7 +76,9 @@ This is the first release of the Descent 3 open source engine, that should be co
Descent 3 Message(Error: Couldn't find the string table.) Descent 3 Message(Error: Couldn't find the string table.)
``` ```
This error means that game data could not be found. Make sure you copied all game files to the `D3-open-source` folder, and that you're running the game from this same folder. This error means that game data could not be found. Make sure you copied all
game files to the `D3-open-source` folder, and that you're running the game
from this same folder.
## Command line options ## Command line options

58
cmake/HogMaker.cmake Normal file
View File

@ -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 <http://www.gnu.org/licenses/>.
# - 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(
# <TARGET target>
# <OUTPUT d3-full-win32.hog>
# <INPUT_FILE filelist.txt>
# [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 $<TARGET_FILE:HogMaker>
"${HOG_OUTPUT}"
"${HOG_INPUT_FILE}"
"${HOG_SEARCH_PATH}"
DEPENDS HogMaker ${HOG_INPUT_FILE} ${HOG_DEPENDS}
COMMENT "Generate ${HOG_OUTPUT}"
COMMAND_EXPAND_LISTS
)
endfunction()

View File

@ -26,14 +26,16 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set_target_properties(Descent3_Online_TCP_IP PROPERTIES SUFFIX ".dylib") set_target_properties(Descent3_Online_TCP_IP PROPERTIES SUFFIX ".dylib")
endif() endif()
add_custom_target(Descent3_Online_TCP_IP_Hog include(HogMaker)
COMMAND $<TARGET_FILE:HogMaker> MakeHog(
"$<TARGET_FILE_DIR:Descent3>/online/Descent3 Online.d3c" TARGET Descent3_Online_TCP_IP_Hog
"${CMAKE_SOURCE_DIR}/netcon/descent3onlineclient/d3online.d3c.txt" OUTPUT "${D3_GENERATED_FILES_OUTPUT_DIRECTORY}/online/Descent3 Online.d3c"
"${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" INPUT_FILE "${CMAKE_SOURCE_DIR}/netcon/descent3onlineclient/d3online.d3c.txt"
"$<TARGET_FILE_DIR:Descent3_Online_TCP_IP>" SEARCH_PATH "$<TARGET_FILE_DIR:Descent3_Online_TCP_IP>" "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/"
DEPENDS Descent3_Online_TCP_IP
DEPENDS Descent3_Online_TCP_IP HogMaker )
COMMENT "Generate 'Descent3 Online.d3c'"
install(
FILES "${D3_GENERATED_FILES_OUTPUT_DIRECTORY}/online/Descent3 Online.d3c"
DESTINATION ${CMAKE_INSTALL_DATADIR}/online
) )
install(FILES "$<TARGET_FILE_DIR:Descent3>/online/Descent3 Online.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online)

View File

@ -4,4 +4,3 @@ Descent3 Online.dll
Descent3 Online.dylib Descent3 Online.dylib
d3online_main.ogf d3online_main.ogf
d3online_game.ogf d3online_game.ogf

View File

@ -19,14 +19,16 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set_target_properties(Direct_TCP_IP PROPERTIES SUFFIX ".dylib") set_target_properties(Direct_TCP_IP PROPERTIES SUFFIX ".dylib")
endif() endif()
add_custom_target(Direct_TCP_IP_Hog include(HogMaker)
COMMAND $<TARGET_FILE:HogMaker> MakeHog(
"$<TARGET_FILE_DIR:Descent3>/online/Direct TCP~IP.d3c" TARGET Direct_TCP_IP_Hog
"${CMAKE_SOURCE_DIR}/netcon/lanclient/TCP_IP.d3c.txt" OUTPUT "${D3_GENERATED_FILES_OUTPUT_DIRECTORY}/online/Direct TCP~IP.d3c"
"${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" INPUT_FILE "${CMAKE_SOURCE_DIR}/netcon/lanclient/TCP_IP.d3c.txt"
"$<TARGET_FILE_DIR:Direct_TCP_IP>" SEARCH_PATH "$<TARGET_FILE_DIR:Direct_TCP_IP>" "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/"
DEPENDS Direct_TCP_IP
DEPENDS Direct_TCP_IP HogMaker )
COMMENT "Generate 'Direct TCP~IP.d3c'"
install(
FILES "${D3_GENERATED_FILES_OUTPUT_DIRECTORY}/online/Direct TCP~IP.d3c"
DESTINATION ${CMAKE_INSTALL_DATADIR}/online
) )
install(FILES "$<TARGET_FILE_DIR:Descent3>/online/Direct TCP~IP.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online)

View File

@ -29,14 +29,16 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set_target_properties(Parallax_Online PROPERTIES SUFFIX ".dylib") set_target_properties(Parallax_Online PROPERTIES SUFFIX ".dylib")
endif() endif()
add_custom_target(Parallax_Online_Hog include(HogMaker)
COMMAND $<TARGET_FILE:HogMaker> MakeHog(
"$<TARGET_FILE_DIR:Descent3>/online/Parallax Online.d3c" TARGET Parallax_Online_Hog
"${CMAKE_SOURCE_DIR}/netcon/mtclient/Parallax_Online.d3c.txt" OUTPUT "${D3_GENERATED_FILES_OUTPUT_DIRECTORY}/online/Parallax Online.d3c"
"${CMAKE_SOURCE_DIR}/scripts/data/fullhog/" INPUT_FILE "${CMAKE_SOURCE_DIR}/netcon/mtclient/Parallax_Online.d3c.txt"
"$<TARGET_FILE_DIR:Parallax_Online>" SEARCH_PATH "$<TARGET_FILE_DIR:Parallax_Online>" "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/"
DEPENDS Parallax_Online
DEPENDS Parallax_Online HogMaker )
COMMENT "Generate 'Parallax Online.d3c'"
install(
FILES "${D3_GENERATED_FILES_OUTPUT_DIRECTORY}/online/Parallax Online.d3c"
DESTINATION ${CMAKE_INSTALL_DATADIR}/online
) )
install(FILES "$<TARGET_FILE_DIR:Descent3>/online/Parallax Online.d3c" DESTINATION ${CMAKE_INSTALL_DATADIR}/online)

View File

@ -11,16 +11,3 @@ add_subdirectory(hyperanarchy)
add_subdirectory(monsterball) add_subdirectory(monsterball)
add_subdirectory(roboanarchy) add_subdirectory(roboanarchy)
add_subdirectory(tanarchy) add_subdirectory(tanarchy)
add_custom_target(NetgamesDir
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:anarchy> "$<TARGET_FILE_DIR:Descent3>/netgames/Anarchy.d3m"
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:coop> "$<TARGET_FILE_DIR:Descent3>/netgames/Co-op.d3m"
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:ctf> "$<TARGET_FILE_DIR:Descent3>/netgames/CTF.d3m"
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:entropy> "$<TARGET_FILE_DIR:Descent3>/netgames/Entropy.d3m"
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:hoard> "$<TARGET_FILE_DIR:Descent3>/netgames/Hoard.d3m"
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:hyperanarchy> "$<TARGET_FILE_DIR:Descent3>/netgames/Hyper-Anarchy.d3m"
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:monsterball> "$<TARGET_FILE_DIR:Descent3>/netgames/Monsterball.d3m"
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:roboanarchy> "$<TARGET_FILE_DIR:Descent3>/netgames/Robo-Anarchy.d3m"
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:tanarchy> "$<TARGET_FILE_DIR:Descent3>/netgames/Team Anarchy.d3m"
COMMENT "Create netgames/ directory"
)

View File

@ -7,6 +7,8 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS})
set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden")
set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "")
set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_NAME "anarchy")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:Descent3>/netgames")
target_link_libraries(${NETGAME_MODULE} PRIVATE target_link_libraries(${NETGAME_MODULE} PRIVATE
dmfc dmfc

View File

@ -9,6 +9,8 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS})
set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden")
set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "")
set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_NAME "co-op")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:Descent3>/netgames")
target_link_libraries(${NETGAME_MODULE} PRIVATE target_link_libraries(${NETGAME_MODULE} PRIVATE
dmfc dmfc

View File

@ -7,6 +7,8 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS})
set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden")
set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "")
set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_NAME "ctf")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:Descent3>/netgames")
target_link_libraries(${NETGAME_MODULE} PRIVATE target_link_libraries(${NETGAME_MODULE} PRIVATE
dmfc dmfc

View File

@ -7,6 +7,8 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS})
set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden")
set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "")
set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_NAME "entropy")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:Descent3>/netgames")
target_link_libraries(${NETGAME_MODULE} PRIVATE target_link_libraries(${NETGAME_MODULE} PRIVATE
dmfc dmfc

View File

@ -7,6 +7,8 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS})
set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden")
set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "")
set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_NAME "hoard")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:Descent3>/netgames")
target_link_libraries(${NETGAME_MODULE} PRIVATE target_link_libraries(${NETGAME_MODULE} PRIVATE
dmfc dmfc

View File

@ -7,6 +7,8 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS})
set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden")
set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "")
set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_NAME "hyper-anarchy")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:Descent3>/netgames")
target_link_libraries(${NETGAME_MODULE} PRIVATE target_link_libraries(${NETGAME_MODULE} PRIVATE
dmfc dmfc

View File

@ -7,6 +7,8 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS})
set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden")
set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "")
set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_NAME "monsterball")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:Descent3>/netgames")
target_link_libraries(${NETGAME_MODULE} PRIVATE target_link_libraries(${NETGAME_MODULE} PRIVATE
dmfc dmfc

View File

@ -7,6 +7,8 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS})
set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden")
set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "")
set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_NAME "robo-anarchy")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:Descent3>/netgames")
target_link_libraries(${NETGAME_MODULE} PRIVATE target_link_libraries(${NETGAME_MODULE} PRIVATE
dmfc dmfc

View File

@ -7,6 +7,8 @@ add_library(${NETGAME_MODULE} MODULE ${CPPS} ${HEADERS})
set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden") set_target_properties(${NETGAME_MODULE} PROPERTIES CXX_VISIBILITY_PRESET "hidden")
set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "") set_target_properties(${NETGAME_MODULE} PROPERTIES PREFIX "")
set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m") set_target_properties(${NETGAME_MODULE} PROPERTIES SUFFIX ".d3m")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_NAME "team anarchy")
set_target_properties(${NETGAME_MODULE} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:Descent3>/netgames")
target_link_libraries(${NETGAME_MODULE} PRIVATE target_link_libraries(${NETGAME_MODULE} PRIVATE
dmfc dmfc

View File

@ -67,12 +67,8 @@ set(SCRIPTS
SewerRat SewerRat
testscript testscript
TrainingMission TrainingMission
Y2K) 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"
#)
add_library(dallas STATIC DallasFuncs.cpp osiris_import.cpp osiris_vector.cpp) add_library(dallas STATIC DallasFuncs.cpp osiris_import.cpp osiris_vector.cpp)
set_target_properties(dallas PROPERTIES PREFIX "") set_target_properties(dallas PROPERTIES PREFIX "")
@ -94,25 +90,19 @@ foreach(SCRIPT ${SCRIPTS})
endif() endif()
endforeach() endforeach()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") include(HogMaker)
set(HOG_NAME "linux") MakeHog(
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") TARGET HogFull
set(HOG_NAME "osx") OUTPUT "${D3_GENERATED_FILES_OUTPUT_DIRECTORY}/d3-${HOG_NAME}.hog"
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") INPUT_FILE "${CMAKE_SOURCE_DIR}/scripts/data/fullhog/d3-${HOG_NAME}-fullhog.txt"
set(HOG_NAME "win") SEARCH_PATH "$<TARGET_FILE_DIR:AIGame>"
endif() DEPENDS ${SCRIPTS}
add_custom_target(HogFull
COMMAND $<TARGET_FILE:HogMaker>
"$<TARGET_FILE_DIR:Descent3>/d3-${HOG_NAME}.hog"
"${CMAKE_SOURCE_DIR}/scripts/data/fullhog/d3-${HOG_NAME}-fullhog.txt"
"$<TARGET_FILE_DIR:AIGame>"
DEPENDS ${SCRIPTS} HogMaker data/fullhog/d3-${HOG_NAME}-fullhog.txt
COMMENT "Generate fullhog/d3-${HOG_NAME}.hog"
) )
# Place file next to Descent3 executable on installation install(
install(FILES "$<TARGET_FILE_DIR:Descent3>/d3-${HOG_NAME}.hog" DESTINATION ${CMAKE_INSTALL_DATADIR}) FILES "${D3_GENERATED_FILES_OUTPUT_DIRECTORY}/d3-${HOG_NAME}.hog"
DESTINATION ${CMAKE_INSTALL_DATADIR}
)
# FIXME: there may be only one d3-linux.hog, need deal with demo somehow. # FIXME: there may be only one d3-linux.hog, need deal with demo somehow.
# add_custom_target(HogLinuxDemo # add_custom_target(HogLinuxDemo

View File

@ -1,7 +1,11 @@
if(CMAKE_CROSSCOMPILING)
find_package(HogMaker)
else()
add_executable( add_executable(
HogMaker HogMaker
HogMaker/HogFormat.cpp HogMaker/HogFormat.cpp
HogMaker/HogMaker.cpp HogMaker/HogMaker.cpp
) )
add_dependencies(HogMaker get_git_hash)
target_include_directories(HogMaker PRIVATE ${PROJECT_BINARY_DIR}/lib) target_include_directories(HogMaker PRIVATE ${PROJECT_BINARY_DIR}/lib)
export(TARGETS HogMaker FILE "${CMAKE_BINARY_DIR}/HogMakerConfig.cmake")
endif()

View File

@ -22,7 +22,6 @@
#include <fstream> #include <fstream>
#include <string> #include <string>
#include "d3_version.h"
#include "HogFormat.h" #include "HogFormat.h"
// TODO: To our descendants from the future: remove it when code will support C++20 // TODO: To our descendants from the future: remove it when code will support C++20
@ -48,7 +47,7 @@ int main(int argc, char *argv[]) {
std::vector<std::filesystem::path> input_files; std::vector<std::filesystem::path> input_files;
if (argc < 3) { if (argc < 3) {
std::cout << "HogMaker v" << D3_MAJORVER << "." << D3_MINORVER << "." << D3_BUILD << "-g" << D3_GIT_HASH << "\n" std::cout << "HogMaker - tool for creating Descent3 HOG2 files.\n"
<< "Usage:\n" << "Usage:\n"
<< " " << argv[0] << " <hogfile.hog> <inputfile.txt> [search_path]\n" << " " << argv[0] << " <hogfile.hog> <inputfile.txt> [search_path]\n"
<< std::endl; << std::endl;