Skip to content

Commit 1c7ef9d

Browse files
authored
Feature/multi game compile (#2)
* feat: add compile targets per game * feat: infer game path from compile target * fix: incorrect argc check * fix: gcc compile * fix: enable dota
1 parent 8db5e7a commit 1c7ef9d

File tree

10 files changed

+77
-57
lines changed

10 files changed

+77
-57
lines changed

.gitmodules

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
[submodule "vendor/hl2sdk"]
2-
path = vendor/hl2sdk
2+
path = vendor/hl2sdk-cs2
33
url = https://github.com/alliedmodders/hl2sdk
44
shallow = true
55
[submodule "vendor/fmt"]
66
path = vendor/fmt
77
url = https://github.com/fmtlib/fmt
88
shallow = true
9+
[submodule "vendor/hl2sdk-dota"]
10+
path = vendor/hl2sdk-dota
11+
url = https://github.com/alliedmodders/hl2sdk
12+
shallow = true

cmake/platform.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
add_definitions(-DMETA_IS_SOURCE2 -D_ITERATOR_DEBUG_LEVEL=0)
22

33
if(UNIX)
4-
add_definitions(-D_LINUX -DPOSIX -DLINUX -DGNUC -DCOMPILER_GCC -DPLATFORM_64BITS -D_GLIBCXX_USE_CXX11_ABI=0)
4+
add_definitions(
5+
-D_LINUX -DPOSIX -DLINUX -DGNUC -DCOMPILER_GCC -DPLATFORM_64BITS -D_GLIBCXX_USE_CXX11_ABI=0 -Dstricmp=strcasecmp
6+
-D_stricmp=strcasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -DHAVE_STDINT_H
7+
)
58
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc -static-libstdc++")
69
elseif(WIN32)
710
add_definitions(

src/main/CMakeLists.txt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,20 @@ file(GLOB_RECURSE HEADERS_LIST
66
"*.h"
77
)
88

9-
add_executable(DumpSource2 ${SOURCES_LIST} ${HEADERS_LIST})
9+
function(BUILD_GAME GAME GAME_PATH)
10+
add_executable(DumpSource2-${GAME} ${SOURCES_LIST} ${HEADERS_LIST})
1011

11-
target_link_libraries(DumpSource2 PRIVATE
12-
HL2SDK
13-
fmt::fmt
14-
${CMAKE_DL_LIBS}
15-
)
12+
target_link_libraries(DumpSource2-${GAME} PRIVATE
13+
HL2SDK-${GAME}
14+
fmt::fmt
15+
${CMAKE_DL_LIBS}
16+
)
17+
18+
target_compile_definitions(DumpSource2-${GAME} PRIVATE GAME_${GAME} GAME_PATH="${GAME_PATH}")
19+
endfunction()
20+
21+
build_game(CS2 csgo)
22+
build_game(DOTA dota)
1623

1724
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX "Source Files" FILES ${SOURCES_LIST})
1825
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX "Header Files" FILES ${HEADERS_LIST})

src/main/appframework.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,18 +138,19 @@ void InitializeAppSystems()
138138
{
139139
for (const auto& appSystem : g_appSystems)
140140
{
141-
if ((appSystem.flags & CS2_ONLY) != 0 && Globals::modName != "csgo")
141+
#ifndef GAME_CS2
142+
if ((appSystem.flags & CS2_ONLY) != 0)
142143
continue;
144+
#endif // !GAME_CS2
143145

144-
std::string path = appSystem.gameBin ? fmt::format("../../{}/bin/{}", Globals::modName.c_str(), PLATFORM_FOLDER) : "";
146+
std::string path = appSystem.gameBin ? fmt::format("../../{}/bin/{}", GAME_PATH, PLATFORM_FOLDER) : "";
145147

146148
CModule module(path.c_str(), appSystem.moduleName);
147149

148150
auto interface = module.FindInterface<IAppSystem*>(appSystem.interfaceVersion.c_str());
149151

150152
g_factoryMap[appSystem.interfaceVersion] = interface;
151-
152-
if (appSystem.connect && Globals::modName == "csgo")
153+
if (appSystem.connect)
153154
{
154155
interface->Connect(&AppSystemFactory);
155156
interface->Init();

src/main/globalvariables.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
namespace Globals {
2626

27-
inline std::string modName;
2827
inline std::filesystem::path outputPath;
2928
inline std::ofstream stringsIgnoreStream;
3029

src/main/main.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,18 @@
2828

2929
void Usage()
3030
{
31-
printf("Usage: DumpSource2 <mod name> <output path>\n");
31+
printf("Usage: DumpSource2 <output path>\n");
3232
}
3333

3434
int main(int argc, char** argv)
3535
{
36-
if (argc <= 2)
36+
if (argc <= 1)
3737
{
3838
Usage();
3939
return 0;
4040
}
4141

42-
Globals::modName = argv[1];
43-
Globals::outputPath = argv[2];
42+
Globals::outputPath = argv[1];
4443

4544
if (!std::filesystem::is_directory(Globals::outputPath))
4645
{
@@ -55,9 +54,6 @@ int main(int argc, char** argv)
5554

5655
printf("Dumping\n");
5756

58-
// TEMP: cs2 and dota/deadlock sdks are mismatched in ICvar vtable right now
59-
if(Globals::modName == "csgo")
60-
Dumpers::ConCommands::Dump();
61-
57+
Dumpers::ConCommands::Dump();
6258
Dumpers::Schemas::Dump();
6359
}

src/main/utils/common.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,11 @@ void Plat_ExitProcess(int) {
9595
// STUB
9696
}
9797

98+
#ifdef GAME_CS2
9899
void Plat_FatalErrorFunc(const tchar* pMsg, ...) {
99100
// STUB
100101
}
102+
#endif
101103

102104
bool Plat_IsInDebugSession() {
103105
// STUB

vendor/CMakeLists.txt

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,56 @@
11
# HL2SDK/METAMOD SETUP
22
# ---
33

4-
SET(HL2SDK_INCLUDES
5-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk
6-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk/common
7-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk/game/shared
8-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk/game/server
9-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk/public
10-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk/public/engine
11-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk/public/mathlib
12-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk/public/tier0
13-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk/public/tier1
14-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk/public/entity2
15-
${PROJECT_SOURCE_DIR}/vendor/hl2sdk/public/game/server
16-
)
17-
18-
add_library(HL2SDK STATIC
19-
hl2sdk/tier1/convar.cpp
20-
hl2sdk/tier1/generichash.cpp
21-
hl2sdk/tier1/keyvalues3.cpp
22-
)
23-
24-
target_include_directories(HL2SDK PUBLIC ${HL2SDK_INCLUDES})
25-
26-
if(WIN32)
27-
target_link_libraries(HL2SDK PUBLIC
28-
${CMAKE_CURRENT_SOURCE_DIR}/hl2sdk/lib/public/win64/tier1.lib
29-
${CMAKE_CURRENT_SOURCE_DIR}/hl2sdk/lib/public/win64/interfaces.lib
30-
${CMAKE_CURRENT_SOURCE_DIR}/hl2sdk/lib/public/win64/mathlib.lib
31-
)
32-
elseif(UNIX)
33-
target_link_libraries(HL2SDK PUBLIC
34-
${CMAKE_CURRENT_SOURCE_DIR}/hl2sdk/lib/linux64/tier1.a
35-
${CMAKE_CURRENT_SOURCE_DIR}/hl2sdk/lib/linux64/interfaces.a
36-
${CMAKE_CURRENT_SOURCE_DIR}/hl2sdk/lib/linux64/mathlib.a
37-
)
38-
endif()
4+
function(BUILD_HL2SDK GAME GAME_PATH)
5+
SET(HL2SDK_INCLUDES
6+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}
7+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}/common
8+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}/game/shared
9+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}/game/server
10+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}/public
11+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}/public/engine
12+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}/public/mathlib
13+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}/public/tier0
14+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}/public/tier1
15+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}/public/entity2
16+
${PROJECT_SOURCE_DIR}/vendor/${GAME_PATH}/public/game/server
17+
)
18+
19+
add_library(HL2SDK-${GAME} STATIC
20+
${GAME_PATH}/tier1/convar.cpp
21+
${GAME_PATH}/tier1/generichash.cpp
22+
${GAME_PATH}/tier1/keyvalues3.cpp
23+
)
24+
25+
target_include_directories(HL2SDK-${GAME} PUBLIC ${HL2SDK_INCLUDES})
26+
27+
if(WIN32)
28+
target_link_libraries(HL2SDK-${GAME} PUBLIC
29+
${CMAKE_CURRENT_SOURCE_DIR}/${GAME_PATH}/lib/public/win64/tier1.lib
30+
${CMAKE_CURRENT_SOURCE_DIR}/${GAME_PATH}/lib/public/win64/interfaces.lib
31+
${CMAKE_CURRENT_SOURCE_DIR}/${GAME_PATH}/lib/public/win64/mathlib.lib
32+
)
33+
elseif(UNIX)
34+
target_link_libraries(HL2SDK-${GAME} PUBLIC
35+
${CMAKE_CURRENT_SOURCE_DIR}/${GAME_PATH}/lib/linux64/tier1.a
36+
${CMAKE_CURRENT_SOURCE_DIR}/${GAME_PATH}/lib/linux64/interfaces.a
37+
${CMAKE_CURRENT_SOURCE_DIR}/${GAME_PATH}/lib/linux64/mathlib.a
38+
)
39+
endif()
40+
message(STATUS "Setting up HL2SDK-${GAME}") # What does this print?
41+
endfunction()
42+
43+
build_hl2sdk(CS2 hl2sdk-cs2)
44+
build_hl2sdk(DOTA hl2sdk-dota)
3945

4046
# EXTERNAL LIBRARIES
4147
# ---
4248

4349
add_subdirectory(fmt)
4450

4551
set_target_properties(
46-
HL2SDK
52+
HL2SDK-CS2
53+
HL2SDK-DOTA
4754
PROPERTIES FOLDER SDK
4855
)
4956

vendor/hl2sdk-dota

Submodule hl2sdk-dota added at aa40133

0 commit comments

Comments
 (0)