-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
105 lines (93 loc) · 3.81 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
# Project definition
cmake_minimum_required(VERSION 3.12)
project(opengl-demo)
set(CMAKE_CXX_STANDARD 17)
set(BIN_NAME "${PROJECT_NAME}")
set(LIB_DIR "libs")
add_custom_command(OUTPUT vertex_shader.c
DEPENDS ${CMAKE_SOURCE_DIR}/src/vertex.shd
COMMAND ${CMAKE_SOURCE_DIR}/compile_shader.sh ${CMAKE_SOURCE_DIR}/src/vertex.shd vertex_shader.c)
add_custom_command(OUTPUT fragment_shader.c
DEPENDS ${CMAKE_SOURCE_DIR}/src/fragment.shd
COMMAND ${CMAKE_SOURCE_DIR}/compile_shader.sh ${CMAKE_SOURCE_DIR}/src/fragment.shd fragment_shader.c)
add_custom_command(OUTPUT vertex_2_shader.c
DEPENDS ${CMAKE_SOURCE_DIR}/src/vertex_2.shd
COMMAND ${CMAKE_SOURCE_DIR}/compile_shader.sh ${CMAKE_SOURCE_DIR}/src/vertex_2.shd vertex_2_shader.c)
add_custom_command(OUTPUT fragment_2_shader.c
DEPENDS ${CMAKE_SOURCE_DIR}/src/fragment_2.shd
COMMAND ${CMAKE_SOURCE_DIR}/compile_shader.sh ${CMAKE_SOURCE_DIR}/src/fragment_2.shd fragment_2_shader.c)
add_custom_command(OUTPUT vertex_3_shader.c
DEPENDS ${CMAKE_SOURCE_DIR}/src/vertex_3.shd
COMMAND ${CMAKE_SOURCE_DIR}/compile_shader.sh ${CMAKE_SOURCE_DIR}/src/vertex_3.shd vertex_3_shader.c)
add_custom_command(OUTPUT geometry_3_shader.c
DEPENDS ${CMAKE_SOURCE_DIR}/src/geometry_3.shd
COMMAND ${CMAKE_SOURCE_DIR}/compile_shader.sh ${CMAKE_SOURCE_DIR}/src/geometry_3.shd geometry_3_shader.c)
add_custom_command(OUTPUT fragment_3_shader.c
DEPENDS ${CMAKE_SOURCE_DIR}/src/fragment_3.shd
COMMAND ${CMAKE_SOURCE_DIR}/compile_shader.sh ${CMAKE_SOURCE_DIR}/src/fragment_3.shd fragment_3_shader.c)
add_custom_command(OUTPUT terrain_png.c
DEPENDS ${CMAKE_SOURCE_DIR}/res/terrain.png
COMMAND ${CMAKE_SOURCE_DIR}/export_file.sh ${CMAKE_SOURCE_DIR}/res/terrain.png terrain_png.c)
add_executable(${BIN_NAME}
vertex_shader.c
fragment_shader.c
vertex_2_shader.c
fragment_2_shader.c
vertex_3_shader.c
geometry_3_shader.c
fragment_3_shader.c
terrain_png.c
src/main.cc
src/my-shaders.cc
src/utils/shaders.cc
src/window.cc
src/camera.cc
src/primitives/cube.cc
src/world/world.cc
src/world/entity.cc
src/world/aabb.cc
src/rendering/renderer.cc
src/world/chunk.cc
src/world/block.cc
src/world/generator.cc
src/program.cc
src/rendering/block-renderer.cc
)
target_include_directories(${BIN_NAME} PRIVATE "include/")
target_compile_definitions(${BIN_NAME} PRIVATE OPENGL_VERSION_MAJOR=3 OPENGL_VERSION_MINOR=3)
target_compile_options(${BIN_NAME} PRIVATE -Wall -Wextra -Ofast -march=native)
# OpenMP
find_package(OpenMP)
if(OpenMP_CXX_FOUND)
target_link_libraries(${BIN_NAME} OpenMP::OpenMP_CXX)
endif()
# GLFW
set(GLFW_DIR "${LIB_DIR}/glfw")
set(GLFW_BUILD_EXAMPLES OFF CACHE INTERNAL "Build the GLFW example programs")
set(GLFW_BUILD_TESTS OFF CACHE INTERNAL "Build the GLFW test programs")
set(GLFW_BUILD_DOCS OFF CACHE INTERNAL "Build the GLFW documentation")
set(GLFW_INSTALL OFF CACHE INTERNAL "Generate installation target")
add_subdirectory("${GLFW_DIR}")
target_link_libraries(${BIN_NAME} "glfw" "${GLFW_LIBRARIES}")
target_include_directories(${BIN_NAME} PRIVATE "${GLFW_DIR}/include")
target_compile_definitions(${BIN_NAME} PRIVATE "GLFW_INCLUDE_NONE")
# glad
set(GLAD_DIR "${LIB_DIR}/glad")
add_library(glad "${GLAD_DIR}/src/glad.c")
target_include_directories(glad PUBLIC "${GLAD_DIR}/include")
target_link_libraries(${BIN_NAME} "glad" "${CMAKE_DL_LIBS}")
# glm
target_include_directories(${BIN_NAME} PRIVATE "${LIB_DIR}/glm/")
# assimp
#add_subdirectory("${LIB_DIR}/assimp" EXCLUDE_FROM_ALL)
#target_link_libraries(${BIN_NAME} assimp::assimp)
# stb
set(STB_DIR "${LIB_DIR}/stb")
add_library(stb INTERFACE)
target_include_directories(stb INTERFACE "${STB_DIR}")
target_link_libraries(${BIN_NAME} "stb")
# Perlin noise
set(PERLIN_DIR "${LIB_DIR}/perlin")
add_library(perlin INTERFACE)
target_include_directories(perlin INTERFACE "${PERLIN_DIR}")
target_link_libraries(${BIN_NAME} "perlin")