summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: fc2ce175338f699a2bdfc458a9615f0abc0a5567 (plain)
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
cmake_minimum_required(VERSION 3.10)

project(videogame)
set(CMAKE_CXX_COMPILER "clang++")
set(CMAKE_CXX_STANDARD 17)

file(GLOB_RECURSE SRC_FILES ./src/*.cpp ./src/game/*.cpp ./src/util/config/*.cpp)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(UNIX)
  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
else()
  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
endif()
add_executable(app ${SRC_FILES})

find_package(PkgConfig REQUIRED)
pkg_check_modules(SDL2 REQUIRED sdl2)
pkg_check_modules(FREETYPE REQUIRED freetype2)
pkg_check_modules(GLEW REQUIRED glew)

find_package(OpenGL REQUIRED)
# release build settings
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wno-nontrivial-memcall")
# debug build settings
set(CMAKE_CXX_FLAGS_DEBUG "-g -DDEBUG=1 -fsanitize=address -Wno-nontrivial-memcall")

target_include_directories(app PRIVATE
  ${SDL2_INCLUDE_DIRS}
  ${FREETYPE_INCLUDE_DIRS}
  ${GLEW_INCLUDE_DIRS}
  ${OPENGL_INCLUDE_DIR}
)

# Platform-specific linking
if(WIN32)
  target_link_libraries(app PRIVATE
    ${SDL2_LIBRARIES}
    ${FREETYPE_LIBRARIES}
    ${GLEW_LIBRARIES}
    ${OPENGL_LIBRARIES}
    winmm  # For timeGetDevCaps, timeBeginPeriod, timeEndPeriod
  )
else()
  target_link_libraries(app PRIVATE
    ${SDL2_LIBRARIES}
    ${FREETYPE_LIBRARIES}
    ${GLEW_LIBRARIES}
    ${OPENGL_LIBRARIES}
  )
endif()

target_compile_options(app PRIVATE -Wall)
target_compile_options(app PRIVATE -Wno-nontrivial-memcall)

add_custom_target(debug
  COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_BINARY_DIR}
  COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  COMMENT "Building ~~**DEBUG**~~"
)
add_custom_target(release
  COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_BINARY_DIR}
  COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  COMMENT "Building ~~**RELEASE**~~"
)