-
Notifications
You must be signed in to change notification settings - Fork 76
/
Copy pathCMakeLists.txt
136 lines (102 loc) · 4.56 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
cmake_minimum_required(VERSION 3.4)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
project(OpenD2)
option(BUILD_GAME "Build Executable" ON)
option(BUILD_D2CLIENT "Build D2Client" ON)
option(BUILD_D2SERVER "Build D2Server" ON)
# Common options
if(WIN32)
set(STATIC_LIBRARIES dbghelp.lib psapi.lib)
else()
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_COMPILER g++)
endif()
# Add shared files
file(GLOB_RECURSE SHARED_SRC Shared/*.h Shared/*.hpp Shared/*.c Shared/*.cpp)
source_group("Shared" FILES ${SHARED_SRC})
# Build game.exe
if(BUILD_GAME)
message(STATUS "Including game.exe files")
file(GLOB_RECURSE ENGINE_SRC Engine/*.h Engine/*.hpp Engine/*.c Engine/*.cpp)
find_package(OpenGL REQUIRED)
# Use the included SDL on Windows, use find_package to find SDL on Linux
if(WIN32)
list(REMOVE_ITEM ENGINE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/Engine/Platform_Linux.cpp)
file(GLOB_RECURSE SDL_SRC Libraries/sdl/*)
file(GLOB_RECURSE ADPCM_SRC Libraries/adpcm/*)
file(GLOB_RECURSE HUFFMAN_SRC Libraries/huffman/*)
file(GLOB_RECURSE PKWARE_SRC Libraries/pkware/*)
file(GLOB_RECURSE GLEW_SRC Libraries/glew/GL/*)
source_group("Engine" FILES ${ENGINE_SRC})
source_group("Libraries\\adpcm" FILES ${ADPCM_SRC})
source_group("Libraries\\huffman" FILES ${HUFFMAN_SRC})
source_group("Libraries\\pkware" FILES ${PKWARE_SRC})
source_group("Libraries\\SDL" FILES ${SDL_SRC})
source_group("Libraries\\glew\\include" FILES ${GLEW_SRC})
source_group("Libraries\\glm\\" FILES ${GLM_SRC})
source_group("Shared" FILES ${SHARED_SRC})
set(LIBRARY_SRC ${SDL_SRC} ${ADPCM_SRC} ${HUFFMAN_SRC} ${PKWARE_SRC} ${GLEW_SRC})
set(ENGINE_SRC ${ENGINE_SRC} ${SHARED_SRC} ${LIBRARY_SRC})
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
set(SDL2_LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/sdl/x86")
else()
set(SDL2_LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/sdl/x64")
endif()
set(SDL2_LIBRARIES "${SDL2_LIBRARY_DIR}/SDL2.lib" "${SDL2_LIBRARY_DIR}/SDL2main.lib"
"${SDL2_LIBRARY_DIR}/SDL2main.lib" "${SDL2_LIBRARY_DIR}/SDL2test.lib"
"${SDL2_LIBRARY_DIR}/SDL2_net.lib" "${SDL2_LIBRARY_DIR}/SDL2_mixer.lib"
)
set(GLEW_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/glew")
set(GLEW_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/glew/glew32.lib")
set(GLM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Libraries/glm")
else()
list(REMOVE_ITEM ENGINE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/Engine/Platform_Windows.cpp)
find_package(SDL2 REQUIRED)
find_package(GLEW REQUIRED)
find_package(GLM REQUIRED)
endif()
add_executable(game ${ENGINE_SRC})
set_target_properties(game PROPERTIES OUTPUT_NAME game)
set_target_properties(game PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(game PRIVATE ${SDL2_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES})
target_include_directories(game PRIVATE ${SDL2_INCLUDE_DIRS} ${GLEW_INCLUDE_DIRS} ${GLM_INCLUDE_DIR})
if(WIN32)
set_target_properties(game PROPERTIES LINK_FLAGS /SUBSYSTEM:WINDOWS)
else()
target_link_libraries(game PRIVATE m dl)
endif()
target_compile_definitions(game PUBLIC D2EXE)
endif()
# Build D2Common.dll
if(BUILD_D2CLIENT OR BUILD_D2SERVER)
message(STATUS "Including D2Common.dll files")
file(GLOB_RECURSE D2COMMON_SRC Modcode/Common/*.h Modcode/Common/*hpp Modcode/Common/*.c Modcode/Common/*.cpp)
source_group("Common" FILES ${D2COMMON_SRC})
source_group("Shared" FILES ${SHARED_SRC})
set(D2COMMON_SRC ${D2COMMON_SRC} ${SHARED_SRC})
add_library(D2Common SHARED ${D2COMMON_SRC})
set_target_properties(D2Common PROPERTIES OUTPUT_NAME D2Common)
set_target_properties(D2Common PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(D2Common ${STATIC_LIBRARIES})
target_compile_definitions(D2Common PUBLIC D2COMMON)
link_directories(${PROJECT_BINARY_DIR})
endif()
# Build D2Client.dll
if(BUILD_D2CLIENT)
message(STATUS "Including D2Client.dll files")
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/Modcode/Client")
endif()
# Build D2Server.dll
if(BUILD_D2SERVER)
message(STATUS "Including D2Server.dll files")
file(GLOB_RECURSE D2SERVER_SRC Modcode/Server/*.h Modcode/Server/*.hpp Modcode/Server/*.c Modcode/Server/*.cpp)
source_group("Server" FILES ${D2SERVER_SRC})
source_group("Shared" FILES ${SHARED_SRC})
set(D2SERVER_SRC ${D2SERVER_SRC} ${SHARED_SRC})
add_library(D2Server SHARED ${D2SERVER_SRC})
set_target_properties(D2Server PROPERTIES OUTPUT_NAME D2Server)
set_target_properties(D2Server PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(D2Server ${STATIC_LIBRARIES} D2Common)
target_compile_definitions(D2Server PUBLIC D2SERVER)
endif()