Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions .github/workflows/cibuild.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:

matrix:
platform:
- { display_name: 'Linux Native Libraries', os: ubuntu-latest, preset_os: linux }
- { display_name: 'Linux Native Libraries', os: ubuntu-24.04, preset_os: linux }
- { display_name: 'Windows Native Libraries', os: windows-latest, preset_os: windows }

preset_build_type:
Expand All @@ -45,10 +45,10 @@ jobs:
echo "preset_name=$preset_name" >> "$GITHUB_ENV"

- name: Install packages
if: ${{ matrix.platform.os == 'ubuntu-latest' }}
if: ${{ matrix.platform.os == 'ubuntu-24.04' }}
run: |
sudo apt update
sudo apt install gcc-multilib g++-multilib ninja-build -y
sudo apt install libstdc++6 gcc-multilib g++-multilib ninja-build -y

- name: Install packages
if: ${{ matrix.platform.os == 'windows-latest' }}
Expand Down Expand Up @@ -97,6 +97,7 @@ jobs:
cmake
--preset ${{ env.preset_name }}
-DNEO_DEDICATED=ON
-DNEO_GENERATE_GAMEDATA=ON

- name: CMake dedicated library build
working-directory: ${{ env.source_dir }}
Expand All @@ -114,6 +115,7 @@ jobs:
echo "libraries_debuginfo=$(find . -regex '\.\/neo-\w*-\w*-libraries-debuginfo-\w*-\w*' -printf '%f')" >> "$GITHUB_ENV"
echo "dedicated=$(find . -regex '\.\/neo-\w*-\w*-dedicated-\w*-\w*' -printf '%f')" >> "$GITHUB_ENV"
echo "dedicated_debuginfo=$(find . -regex '\.\/neo-\w*-\w*-dedicated-debuginfo-\w*-\w*' -printf '%f')" >> "$GITHUB_ENV"
echo "gamedata=$(find . -regex '\.\/neo-\w*-\w*-gamedata' -printf '%f')" >> "$GITHUB_ENV"

- name: Upload libraries
uses: actions/upload-artifact@v4
Expand All @@ -139,6 +141,13 @@ jobs:
name: ${{ env.dedicated_debuginfo }}
path: ${{ env.install_dir }}/${{ env.dedicated_debuginfo }}

- name: Upload SourceMod gamedata
if: ${{ matrix.platform.preset_os == 'linux' && matrix.preset_build_type.name == 'release' }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.gamedata }}
path: ${{ env.install_dir }}/${{ env.gamedata }}

pack-resources:
name: Windows Native Resources

Expand Down Expand Up @@ -197,18 +206,18 @@ jobs:
name: Upload Latest Build

needs: [build, pack-resources]
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
if: github.ref == 'refs/heads/master'
permissions:
contents: write

steps:
- name: Download all artifacts
uses: actions/download-artifact@v4

- name: Packing artifacts
run: 'parallel 7z a -tzip -mx=9 "{}.zip" "./{}/*" ::: neo-*'

- name: Create & upload latest build
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -223,11 +232,11 @@ jobs:
name: Upload Release

needs: [build, pack-resources]
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
if: github.event_name == 'release' && github.event.action == 'published'
permissions:
contents: write

steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
Expand All @@ -237,7 +246,7 @@ jobs:

- name: Packing artifacts
run: 'parallel 7z a -tzip -mx=9 "{= s/neo-(.*)/neo-$GITHUB_REF_NAME-\1.zip/ =}" "./{}/*" ::: neo-*'

- name: Upload assets to a release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand Down
102 changes: 81 additions & 21 deletions mp/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ message(STATUS "TIMESTAMP: ${BUILD_DATETIME}")

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

set(OUTPUT_SUBDIRECTORY out)

include(cmake/utils.cmake)
include(cmake/build_info.cmake)

Expand Down Expand Up @@ -40,6 +42,7 @@ option(NEO_INSTALL_LIBRARIES "Install game libraries" OFF)
option(NEO_INSTALL_RESOURCES "Install game resources" OFF)
option(NEO_USE_SEPARATE_BUILD_INFO "Use separate build info on Linux" OFF)
option(NEO_ENABLE_CPACK "Enable CPack" OFF)
option(NEO_GENERATE_GAMEDATA "Generate SourceMod gamedata" ${NEO_DEDICATED})

message(STATUS "CI build mode: ${NEO_CI_BUILD}")
message(STATUS "chroot build mode: ${NEO_CHROOT_BUILD}")
Expand Down Expand Up @@ -85,14 +88,12 @@ set(CMAKE_POSITION_INDEPENDENT_CODE FALSE)

set(SOURCESDK TRUE)

# TODO use base.xcconfig for OS_MACOS

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_compile_definitions(
DEBUG
_DEBUG
)
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
elseif(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
add_compile_definitions(
NDEBUG
)
Expand Down Expand Up @@ -213,7 +214,7 @@ if(OS_WINDOWS)
/NODEFAULTLIB:libcpmt
/NODEFAULTLIB:libcpmt1
)
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
elseif(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
# TODO "Use Link Time Code Generation" [$LTCG] ?
# Also /GL https://learn.microsoft.com/en-us/cpp/build/reference/gl-whole-program-optimization

Expand Down Expand Up @@ -392,6 +393,20 @@ endif()

add_subdirectory(lib)

if(NEO_GENERATE_GAMEDATA)
include(FetchContent) # once in the project to include the module

FetchContent_Declare(
gamedata-gen
URL https://github.com/NeotokyoRebuild/gamedata-gen/releases/download/v1/gamedata-gen.zip
URL_HASH MD5=cdf528d1ebbf19b3b67e4129a0dcbe98
)

FetchContent_MakeAvailable(gamedata-gen)

set(GAMEDATA_GEN_PATH "${gamedata-gen_SOURCE_DIR}/gamedata-gen")
endif()

if(NOT NEO_DEDICATED)
add_subdirectory(game/client)
add_subdirectory(materialsystem/stdshaders)
Expand All @@ -405,11 +420,13 @@ else()
unset(COPY_ALL_LIBS_FLAG)
endif()

add_custom_target(
copy_all_libs ${COPY_ALL_LIBS_FLAG}
DEPENDS client_copy_lib server_copy_lib game_shader_dx9_copy_lib
VERBATIM
)
if(NOT NEO_DEDICATED)
add_custom_target(
copy_all_libs ${COPY_ALL_LIBS_FLAG}
DEPENDS client_copy_lib server_copy_lib game_shader_dx9_copy_lib
VERBATIM
)
endif()

if(NEO_CI_BUILD AND "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
set(BUILD_TYPE_NAME "Release")
Expand All @@ -424,41 +441,53 @@ if(NEO_INSTALL_LIBRARIES)
if(NEO_DEDICATED)
set(LIBRARY_INSTALL_PATH "${INSTALL_PATH_PREFIX}-dedicated-${INSTALL_PATH_SUFFIX}")

install(
TARGETS server
LIBRARY DESTINATION "${LIBRARY_INSTALL_PATH}"
RUNTIME DESTINATION "${LIBRARY_INSTALL_PATH}"
)

if(NEO_USE_SEPARATE_BUILD_INFO)
set(SPLIT_DEBUG_INFO_INSTALL_PATH "${INSTALL_PATH_PREFIX}-dedicated-debuginfo-${INSTALL_PATH_SUFFIX}")

if(OS_WINDOWS)
install(
TARGETS server
LIBRARY DESTINATION "${LIBRARY_INSTALL_PATH}"
RUNTIME DESTINATION "${LIBRARY_INSTALL_PATH}"
)

install(
FILES "$<TARGET_PDB_FILE:server>"
DESTINATION "${SPLIT_DEBUG_INFO_INSTALL_PATH}"
)
else()
get_target_property(SERVER_STRIPPED_FILE server STRIPPED_FILE)
install(
FILES ${SERVER_STRIPPED_FILE}
DESTINATION "${LIBRARY_INSTALL_PATH}"
)

get_target_property(SERVER_SPLIT_DEBUG_INFO_FILE server SPLIT_DEBUG_INFO_FILE)
install(
FILES ${SERVER_SPLIT_DEBUG_INFO_FILE}
DESTINATION "${SPLIT_DEBUG_INFO_INSTALL_PATH}"
)
endif()
else()
install(
TARGETS server
LIBRARY DESTINATION "${LIBRARY_INSTALL_PATH}"
RUNTIME DESTINATION "${LIBRARY_INSTALL_PATH}"
)
endif()
else()
set(LIBRARY_INSTALL_PATH "${INSTALL_PATH_PREFIX}-libraries-${INSTALL_PATH_SUFFIX}")

install(
TARGETS client game_shader_dx9 server
LIBRARY DESTINATION "${LIBRARY_INSTALL_PATH}"
RUNTIME DESTINATION "${LIBRARY_INSTALL_PATH}"
)

if(NEO_USE_SEPARATE_BUILD_INFO)
set(SPLIT_DEBUG_INFO_INSTALL_PATH "${INSTALL_PATH_PREFIX}-libraries-debuginfo-${INSTALL_PATH_SUFFIX}")

if(OS_WINDOWS)
install(
TARGETS client game_shader_dx9 server
LIBRARY DESTINATION "${LIBRARY_INSTALL_PATH}"
RUNTIME DESTINATION "${LIBRARY_INSTALL_PATH}"
)

install(
FILES
$<TARGET_PDB_FILE:client>
Expand All @@ -467,6 +496,17 @@ if(NEO_INSTALL_LIBRARIES)
DESTINATION "${SPLIT_DEBUG_INFO_INSTALL_PATH}"
)
else()
get_target_property(CLIENT_STRIPPED_FILE client STRIPPED_FILE)
get_target_property(SHADER_STRIPPED_FILE game_shader_dx9 STRIPPED_FILE)
get_target_property(SERVER_STRIPPED_FILE server STRIPPED_FILE)
install(
FILES
${CLIENT_STRIPPED_FILE}
${SHADER_STRIPPED_FILE}
${SERVER_STRIPPED_FILE}
DESTINATION "${LIBRARY_INSTALL_PATH}"
)

get_target_property(CLIENT_SPLIT_DEBUG_INFO_FILE client SPLIT_DEBUG_INFO_FILE)
get_target_property(SHADER_SPLIT_DEBUG_INFO_FILE game_shader_dx9 SPLIT_DEBUG_INFO_FILE)
get_target_property(SERVER_SPLIT_DEBUG_INFO_FILE server SPLIT_DEBUG_INFO_FILE)
Expand All @@ -478,8 +518,28 @@ if(NEO_INSTALL_LIBRARIES)
DESTINATION "${SPLIT_DEBUG_INFO_INSTALL_PATH}"
)
endif()
else()
install(
TARGETS client game_shader_dx9 server
LIBRARY DESTINATION "${LIBRARY_INSTALL_PATH}"
RUNTIME DESTINATION "${LIBRARY_INSTALL_PATH}"
)
endif()
endif()

if(OS_LINUX AND NEO_GENERATE_GAMEDATA)
get_target_property(SERVER_GAMEDATA_SDKHOOKS_OUTPUT_FILE server GAMEDATA_SDKHOOKS_OUTPUT_FILE)
install(
FILES ${SERVER_GAMEDATA_SDKHOOKS_OUTPUT_FILE}
DESTINATION "${INSTALL_PATH_PREFIX}-gamedata/neo/addons/sourcemod/gamedata/sdkhooks.games"
)

get_target_property(SERVER_GAMEDATA_SDKTOOLS_OUTPUT_FILE server GAMEDATA_SDKTOOLS_OUTPUT_FILE)
install(
FILES ${SERVER_GAMEDATA_SDKTOOLS_OUTPUT_FILE}
DESTINATION "${INSTALL_PATH_PREFIX}-gamedata/neo/addons/sourcemod/gamedata/sdktools.games"
)
endif()
endif()

if(NEO_INSTALL_RESOURCES)
Expand Down
Loading