summary refs log tree commit diff
path: root/CMakeLists.txt
blob: 663889fa8833c129d7c75d5c780fc4531e0870d9 (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
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
cmake_minimum_required(VERSION 3.23)
project(meowcraft)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

include(GNUInstallDirs)

# Enable assertions for RelWithDebInfo builds.
string(REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")

# FIXME: Nixpkgs LLVM currently has problems with LTO on Darwin.
# See related PR: https://github.com/NixOS/nixpkgs/pull/302481
# Enable LTO for release builds
# set_property(TARGET meowcraft PROPERTY
#         INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)

if (NOT UNIX)
    set(GLEW_USE_STATIC_LIBS ON)
endif (NOT UNIX)

find_package(glfw3 3.3 REQUIRED)
find_package(GLEW REQUIRED)
find_package(OpenGL REQUIRED)

# Vendored shared libraries for MinGW-w64
# for cross-compiling to Windows from macOS
if (WIN32)
    set_target_properties(glfw PROPERTIES
        IMPORTED_IMPLIB_RELEASE "${CMAKE_SOURCE_DIR}/vendor/mingw/libglfw3.a"
    )

    set_target_properties(GLEW::glew_s PROPERTIES
        IMPORTED_LOCATION_RELEASE "${CMAKE_SOURCE_DIR}/vendor/mingw/libglew32.a"
        INTERFACE_LINK_LIBRARIES "" # Tries importing OpenGL.framework on macOS otherwise
    )
endif (WIN32)

add_executable(meowcraft
    src/main.cpp
    src/Defines.hpp
    src/Game.cpp src/Game.hpp
    src/Render.cpp src/Render.hpp
    src/Common/Sizes.hpp
    src/GFX/Window.cpp src/GFX/Window.hpp
    src/GFX/Mesh.cpp src/GFX/Mesh.hpp
    src/Math/Vector.hpp
    src/Math/Common.hpp
    src/GFX/Shading/Shader.cpp src/GFX/Shading/Shader.hpp
    src/GFX/Shading/Program.cpp src/GFX/Shading/Program.hpp
    src/Math/Matrix.hpp
    src/Math/MVP.hpp
    src/GFX/Camera.cpp src/GFX/Camera.hpp
    src/Math/Rotation.hpp
    src/GFX/Shading/Uniform.cpp src/GFX/Shading/Uniform.hpp
    src/GFX/Texture.cpp src/GFX/Texture.hpp
    src/Assets.cpp src/Assets.hpp
    src/GFX/Image/RawImage.cpp src/GFX/Image/RawImage.hpp
    src/GFX/Image/PPMParser.cpp src/GFX/Image/PPMParser.hpp
    src/World/Chunk.cpp src/World/Chunk.hpp
    src/World/BlockType.hpp
    src/World/Generation/Generator.cpp src/World/Generation/Generator.hpp
    src/World/BlockSide.hpp
    src/World/World.cpp src/World/World.hpp
    src/World/ChunkIndex.hpp
    src/Util/ImageViewer.cpp src/Util/ImageViewer.hpp
    src/Math/Interpolation.cpp
    src/Math/Grid.cpp
    src/Math/Perlin.cpp
    src/Compute/Queue.hpp
    src/Math/Constants.hpp
    src/World/Generation/ChunkMeshing.cpp src/World/Generation/ChunkMeshing.hpp
    src/Math/Tensor.hpp
    src/World/Generation/Decoration.cpp src/World/Generation/Decoration.hpp
    src/Math/Random.cpp src/Math/Random.hpp
    src/World/Clouds.cpp src/World/Clouds.hpp
    src/GFX/Util/MeshBuilder.hpp
    src/GFX/Util/Primitives.cpp src/GFX/Util/Primitives.hpp
    src/Math/AABB.cpp src/Math/AABB.hpp
    src/Time.cpp src/Time.hpp
    src/World/Generation/Lighting.cpp src/World/Generation/Lighting.hpp
    src/World/Generation/ChunkNeighbors.hpp src/World/Generation/ChunkNeighbors.cpp
    src/World/ChunkRegistry.cpp src/World/ChunkRegistry.hpp
    src/World/Position.hpp
    src/World/ChunkDimensions.hpp
    src/Transform.cpp src/Transform.hpp
    src/Entities/Player.cpp src/Entities/Player.hpp
    src/Common/FlexArray.hpp
    src/Math/Ray.hpp
    src/Common/Lambda.hpp
    src/Math/Functions.hpp
    src/Common/Casts.hpp
    src/World/VoxelTraversal.hpp
    src/Common/Assert.hpp
    src/Common/Pure.hpp
    src/Common/Iteration.hpp
    src/GFX/Actions.hpp
    src/GFX/Resources.cpp src/GFX/Resources.hpp
    src/ThreadRole.hpp
    src/Input.cpp src/Input.hpp
)

if (WIN32)
    set(LINK_FLAGS "-static-libgcc -static-libstdc++ -static -mwindows")
endif (WIN32)

target_link_libraries(meowcraft PRIVATE glfw GLEW::GLEW OpenGL::GL ${LINK_FLAGS})

function(make_includable input_file output_file)
    file(READ ${input_file} content)
    set(delim "meowcraft_asset")
    set(content "R\"${delim}(${content})${delim}\"")
    file(WRITE ${output_file} "${content}")
endfunction(make_includable)

function(make_assets)
    foreach(file ${ARGN})
        make_includable(assets/${file} assets/generated/${file}.include)
    endforeach()
endfunction(make_assets)

make_assets(images/atlas.ppm
    shaders/terrain.frag.glsl shaders/terrain.vert.glsl
    shaders/clouds.frag.glsl shaders/clouds.vert.glsl
    shaders/image_viewer.frag.glsl shaders/image_viewer.vert.glsl
    shaders/block_outline.frag.glsl shaders/block_outline.vert.glsl
)

install(TARGETS meowcraft
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)