Skip to content

Commit 4fdeac8

Browse files
vuolenxtreme8000
authored andcommitted
CMake rework (#56)
* Add findmodules for libdeflate and enet * Modified CMakeLists for proper dependency management * CMake now copies resources and downloads dependencies * Fixed Findenet.cmake and some other cmake stuff * Added newlines to the end of new files
1 parent 66b5788 commit 4fdeac8

File tree

5 files changed

+179
-50
lines changed

5 files changed

+179
-50
lines changed

CMakeLists.txt

+3-50
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,4 @@
1-
cmake_minimum_required(VERSION 2.9)
2-
project(client C)
3-
find_package(Threads)
1+
cmake_minimum_required(VERSION 2.8)
2+
project(BetterSpades C)
43

5-
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
6-
7-
#if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
8-
add_compile_options(-O3 -s -static -static-libgcc -static-libstdc++)
9-
#endif()
10-
11-
file(GLOB resources resources/*)
12-
file(COPY ${resources} DESTINATION ${CMAKE_BINARY_DIR}/bin)
13-
14-
if(MINGW)
15-
set(CMAKE_RC_COMPILER_INIT windres)
16-
ENABLE_LANGUAGE(RC)
17-
SET(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>")
18-
endif()
19-
20-
file(GLOB sources src/*c)
21-
if(WIN32)
22-
add_executable(client ${sources} resources/icon.rc)
23-
target_link_libraries(client ${CMAKE_THREAD_LIBS_INIT} -static)
24-
else()
25-
add_executable(client ${sources})
26-
target_link_libraries(client ${CMAKE_THREAD_LIBS_INIT})
27-
endif()
28-
29-
file(GLOB libs libs/*lib)
30-
target_link_libraries(client ${libs})
31-
file(GLOB libs2 libs/*a)
32-
target_link_libraries(client ${libs2})
33-
34-
if(APPLE)
35-
target_link_libraries(client "-framework OpenGL")
36-
target_link_libraries(client "-framework OpenAL")
37-
target_link_libraries(client glfw)
38-
target_link_libraries(client enet)
39-
elseif(WIN32)
40-
target_link_libraries(client gdi32)
41-
target_link_libraries(client opengl32)
42-
target_link_libraries(client ws2_32)
43-
target_link_libraries(client winmm)
44-
else()
45-
target_link_libraries(client GL)
46-
target_link_libraries(client m)
47-
target_link_libraries(client openal)
48-
target_link_libraries(client glfw)
49-
target_link_libraries(client enet)
50-
target_link_libraries(client GLEW)
51-
endif()
4+
add_subdirectory(src)

cmake/Modules/Finddeflate.cmake

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2+
# file Copyright.txt or https://cmake.org/licensing for details.
3+
4+
#.rst:
5+
# Finddeflate
6+
# -------
7+
#
8+
# Finds the libdeflate library
9+
#
10+
# This will define the following variables::
11+
#
12+
# deflate_FOUND - True if the system has the deflate library
13+
#
14+
# and also the following imported target:
15+
#
16+
# deflate::deflate
17+
#
18+
19+
find_package(PkgConfig)
20+
pkg_check_modules(PC_deflate QUIET deflate)
21+
find_path(deflate_INCLUDE_DIR
22+
NAMES libdeflate.h
23+
PATHS ${PC_deflate_INCLUDE_DIRS}
24+
PATH_SUFFIXES deflate
25+
)
26+
find_library(deflate_LIBRARY
27+
NAMES deflate
28+
PATHS ${PC_deflate_LIBRARY_DIRS}
29+
)
30+
31+
include(FindPackageHandleStandardArgs)
32+
find_package_handle_standard_args(deflate
33+
FOUND_VAR deflate_FOUND
34+
REQUIRED_VARS
35+
deflate_LIBRARY
36+
deflate_INCLUDE_DIR
37+
)
38+
39+
if (deflate_FOUND)
40+
add_library(deflate::deflate STATIC IMPORTED)
41+
set_target_properties(deflate::deflate PROPERTIES
42+
IMPORTED_LOCATION ${deflate_LIBRARY}
43+
INTERFACE_INCLUDE_DIRECTORIES ${deflate_INCLUDE_DIR}
44+
)
45+
endif (deflate_FOUND)

cmake/Modules/Findenet.cmake

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2+
# file Copyright.txt or https://cmake.org/licensing for details.
3+
4+
#.rst:
5+
# Findenet
6+
# -------
7+
#
8+
# Finds the libenet library
9+
#
10+
# This will define the following variables::
11+
#
12+
# enet_FOUND - True if the system has the enet library
13+
#
14+
# and also the following imported target:
15+
#
16+
# enet::enet
17+
#
18+
find_package(PkgConfig)
19+
pkg_check_modules(PC_enet QUIET enet)
20+
21+
find_path(enet_INCLUDE_DIR
22+
NAMES enet/enet.h
23+
PATHS ${PC_enet_INCLUDE_DIRS}
24+
PATH_SUFFIXES enet
25+
)
26+
27+
find_library(enet_LIBRARY
28+
NAMES enet
29+
PATHS ${PC_enet_LIBRARY_DIRS}
30+
)
31+
32+
include(FindPackageHandleStandardArgs)
33+
find_package_handle_standard_args(enet
34+
FOUND_VAR enet_FOUND
35+
REQUIRED_VARS
36+
enet_LIBRARY
37+
enet_INCLUDE_DIR
38+
)
39+
40+
if (enet_FOUND)
41+
add_library(enet::enet STATIC IMPORTED)
42+
set_target_properties(enet::enet PROPERTIES
43+
IMPORTED_LOCATION ${enet_LIBRARY}
44+
INTERFACE_INCLUDE_DIRECTORIES ${enet_INCLUDE_DIR}
45+
)
46+
target_include_directories(enet::enet INTERFACE ${enet_INCLUDE_DIR})
47+
if (WIN32)
48+
set_target_properties(enet::enet PROPERTIES
49+
INTERFACE_LINK_LIBRARIES "ws2_32;winmm"
50+
)
51+
endif (WIN32)
52+
endif (enet_FOUND)

libs/.gitignore deps/.gitignore

File renamed without changes.

src/CMakeLists.txt

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
macro(download_file_if_it_doesnt_exist filename url)
2+
if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${filename})
3+
message(STATUS "Downloading ${filename}")
4+
file(DOWNLOAD ${url} ${CMAKE_CURRENT_SOURCE_DIR}/${filename} STATUS stat)
5+
list(GET stat 0 success)
6+
list(GET stat 1 error)
7+
if (NOT ${success})
8+
message(STATUS "Downloaded ${filename} succesfully")
9+
else()
10+
file(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/${filename})
11+
message(FATAL_ERROR "Failed to download ${filename} (${error})")
12+
endif()
13+
endif()
14+
endmacro(download_file_if_it_doesnt_exist)
15+
16+
download_file_if_it_doesnt_exist(ini.c https://raw.githubusercontent.com/benhoyt/inih/master/ini.c)
17+
download_file_if_it_doesnt_exist(ini.h https://raw.githubusercontent.com/benhoyt/inih/master/ini.h)
18+
download_file_if_it_doesnt_exist(lodepng/lodepng.c https://raw.githubusercontent.com/lvandeve/lodepng/master/lodepng.cpp)
19+
download_file_if_it_doesnt_exist(lodepng/lodepng.h https://raw.githubusercontent.com/lvandeve/lodepng/master/lodepng.h)
20+
download_file_if_it_doesnt_exist(dr_wav.c https://raw.githubusercontent.com/mackron/dr_libs/master/dr_wav.h)
21+
download_file_if_it_doesnt_exist(stb_truetype.h https://raw.githubusercontent.com/nothings/stb/master/stb_truetype.h)
22+
download_file_if_it_doesnt_exist(parson.c https://raw.githubusercontent.com/kgabis/parson/master/parson.c)
23+
download_file_if_it_doesnt_exist(parson.h https://raw.githubusercontent.com/kgabis/parson/master/parson.h)
24+
download_file_if_it_doesnt_exist(http.h https://raw.githubusercontent.com/mattiasgustavsson/libs/master/http.h)
25+
26+
list(APPEND CLIENT_SOURCES aabb.c)
27+
list(APPEND CLIENT_SOURCES camera.c)
28+
list(APPEND CLIENT_SOURCES cameracontroller.c)
29+
list(APPEND CLIENT_SOURCES chunk.c)
30+
list(APPEND CLIENT_SOURCES config.c)
31+
list(APPEND CLIENT_SOURCES dr_wav.c)
32+
list(APPEND CLIENT_SOURCES file.c)
33+
list(APPEND CLIENT_SOURCES font.c)
34+
list(APPEND CLIENT_SOURCES glx.c)
35+
list(APPEND CLIENT_SOURCES grenade.c)
36+
list(APPEND CLIENT_SOURCES http.c)
37+
list(APPEND CLIENT_SOURCES hud.c)
38+
list(APPEND CLIENT_SOURCES ini.c)
39+
list(APPEND CLIENT_SOURCES list.c)
40+
list(APPEND CLIENT_SOURCES main.c)
41+
list(APPEND CLIENT_SOURCES map.c)
42+
list(APPEND CLIENT_SOURCES matrix.c)
43+
list(APPEND CLIENT_SOURCES model.c)
44+
list(APPEND CLIENT_SOURCES network.c)
45+
list(APPEND CLIENT_SOURCES parson.c)
46+
list(APPEND CLIENT_SOURCES particle.c)
47+
list(APPEND CLIENT_SOURCES player.c)
48+
list(APPEND CLIENT_SOURCES sound.c)
49+
list(APPEND CLIENT_SOURCES stb_truetype.c)
50+
list(APPEND CLIENT_SOURCES texture.c)
51+
list(APPEND CLIENT_SOURCES tracer.c)
52+
list(APPEND CLIENT_SOURCES weapon.c)
53+
list(APPEND CLIENT_SOURCES window.c)
54+
list(APPEND CLIENT_SOURCES ${BetterSpades_SOURCE_DIR}/resources/icon.rc)
55+
56+
add_executable(client ${CLIENT_SOURCES})
57+
target_compile_definitions(client PRIVATE DR_WAV_IMPLEMENTATION)
58+
set_target_properties(
59+
client PROPERTIES
60+
RUNTIME_OUTPUT_DIRECTORY ${BetterSpades_SOURCE_DIR}/build/BetterSpades
61+
C_STANDARD 99
62+
)
63+
64+
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${BetterSpades_SOURCE_DIR}/deps)
65+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${BetterSpades_SOURCE_DIR}/cmake/Modules)
66+
find_package(glfw3 REQUIRED)
67+
find_package(OpenGL REQUIRED)
68+
find_package(OpenAL CONFIG REQUIRED)
69+
find_package(enet REQUIRED)
70+
find_package(deflate REQUIRED)
71+
72+
target_link_libraries(client glfw OpenGL::GL OpenAL::OpenAL enet::enet deflate::deflate)
73+
74+
add_custom_command(
75+
TARGET client
76+
POST_BUILD
77+
COMMAND ${CMAKE_COMMAND} -E echo "Copying resources.."
78+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${BetterSpades_SOURCE_DIR}/resources ${BetterSpades_SOURCE_DIR}/build/BetterSpades
79+
)

0 commit comments

Comments
 (0)