-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
151 lines (130 loc) · 5.8 KB
/
Copy pathCMakeLists.txt
File metadata and controls
151 lines (130 loc) · 5.8 KB
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
cmake_minimum_required(VERSION 3.6)
project(vorpal_engine)
# static windows linking
if (WIN32)
set(CMAKE_CXX_FLAGS, -static -g3 -gdwarf-4 )
endif()
# bullet2 demos break on windows builds, not needed for project
set(BUILD_BULLET2_DEMOS, OFF)
set(BUILD_UNIT_TESTS, OFF)
set(BUILD_OPENGL3_DEMOS, OFF)
set(BUILD_CPU_DEMOS, OFF)
set(ASSIMP_BUILD_TESTS, OFF)
set(ASSIMP_BUILD_DLL_EXPORT, ON)
file(GLOB SRC_FILES src/*.cpp src/Engine/*.cpp src/Engine/*.c src/Platform/*.cpp src/external/imgui/*.cpp)
# Track every file under assets/ so any change triggers a zip rebuild
file(GLOB_RECURSE ASSET_SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/assets/*")
# At build time: purge stale copy, recopy from source, repack zip
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/assets.zip"
COMMAND ${CMAKE_COMMAND} -E rm -rf "${CMAKE_CURRENT_BINARY_DIR}/assets"
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_CURRENT_SOURCE_DIR}/assets"
"${CMAKE_CURRENT_BINARY_DIR}/assets"
COMMAND zip -0 -r "${CMAKE_CURRENT_BINARY_DIR}/assets.zip" assets
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
DEPENDS ${ASSET_SOURCE_FILES}
COMMENT "Repacking assets.zip"
VERBATIM
)
add_custom_target(assets_zip ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/assets.zip")
# Apply global compiler flags to all targets
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
# For GCC/Clang, set optimization flags globally
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -flto -march=native")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -flto -march=native")
elseif(MSVC)
# For MSVC, set optimization flags globally
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2 /GL")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /O2 /GL")
endif()
add_executable(vorpal_engine
${SRC_FILES}
# volk
external/volk/volk.c
# imgui
external/imgui/imgui.cpp
external/imgui/imgui_draw.cpp
external/imgui/imgui_demo.cpp
external/imgui/imgui_tables.cpp
external/imgui/imgui_widgets.cpp
external/imgui/backends/imgui_impl_vulkan.cpp
)
# libraries
add_subdirectory(external/Vulkan-Headers)
add_subdirectory(external/glfw)
add_subdirectory(external/glm)
add_subdirectory(external/bullet3)
add_subdirectory(external/tinygltf)
add_subdirectory(external/miniz)
add_subdirectory(external/lua)
add_subdirectory(external/SharpVoxTTS)
set(PA_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(PA_BUILD_TESTS OFF CACHE BOOL "" FORCE)
add_subdirectory(external/portaudio)
target_include_directories (vorpal_engine PUBLIC
external/Vulkan-Headers/include
external/glfw/include
external/glm/
external/volk/
external/imgui
external/bullet3/src/
external/tinygltf/
external/miniz
external/lua
external/sol2/include
external/portaudio/include
external/SharpVoxTTS/include
external/SharpVoxTTS/platform/lib
external/
${CMAKE_CURRENT_BINARY_DIR}/external/miniz
)
#target_compile_definitions(vorpal_engine PUBLIC IMGUI_IMPL_VULKAN_USE_VOLK=1 VK_USE_PLATFORM_WAYLAND_KHR=1)
target_compile_definitions(vorpal_engine PUBLIC IMGUI_IMPL_VULKAN_USE_VOLK=1)
set(TINYGLTF_HEADER_ONLY ON CACHE INTERNAL "" FORCE)
set(TINYGLTF_INSTALL OFF CACHE INTERNAL "" FORCE)
#find_package(Bullet REQUIRED)
#target_link_libraries(vorpal_engine glfw glm assimp ${BULLET_LIBRARIES} wayland-client xkbcommon xdg-shell)
target_link_libraries(vorpal_engine glm Bullet3Common Bullet3Collision BulletDynamics Bullet3Dynamics BulletCollision Bullet3Geometry LinearMath glfw miniz tinygltf lua portaudio sharpvox)
target_include_directories(vorpal_engine PRIVATE include)
target_compile_options(vorpal_engine PRIVATE -ffat-lto-objects -flto -O3 -ffast-math)
# windows, copy dlls to target
if (WIN32)
target_link_options(vorpal_engine PRIVATE -static -g3 -gdwarf-4 )
endif()
target_compile_features(vorpal_engine PRIVATE cxx_std_17)
# ---- Steamworks SDK (optional) ------------------------------------------------
# Place the SDK at external/steamworks_sdk/ (the folder that contains public/ and
# redistributable_bin/). If the SDK is absent the build still succeeds and Steam
# features are silently disabled at runtime.
set(STEAMWORKS_SDK_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/steamworks_sdk"
CACHE PATH "Path to the Steamworks SDK root")
if(EXISTS "${STEAMWORKS_SDK_PATH}/public/steam/steam_api.h")
message(STATUS "Steamworks SDK found — Steam features enabled (AppID 480)")
target_compile_definitions(vorpal_engine PRIVATE VORPAL_STEAM_ENABLED=1)
target_include_directories(vorpal_engine PRIVATE "${STEAMWORKS_SDK_PATH}/public")
if(WIN32)
target_link_libraries(vorpal_engine
"${STEAMWORKS_SDK_PATH}/redistributable_bin/win64/steam_api64.lib")
add_custom_command(TARGET vorpal_engine POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${STEAMWORKS_SDK_PATH}/redistributable_bin/win64/steam_api64.dll"
"$<TARGET_FILE_DIR:vorpal_engine>")
else()
target_link_libraries(vorpal_engine
"${STEAMWORKS_SDK_PATH}/redistributable_bin/linux64/libsteam_api.so")
add_custom_command(TARGET vorpal_engine POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${STEAMWORKS_SDK_PATH}/redistributable_bin/linux64/libsteam_api.so"
"$<TARGET_FILE_DIR:vorpal_engine>")
endif()
# Copy steam_appid.txt next to the executable so Steam recognises AppID 480.
add_custom_command(TARGET vorpal_engine POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_CURRENT_SOURCE_DIR}/steam_appid.txt"
"$<TARGET_FILE_DIR:vorpal_engine>")
else()
message(STATUS "Steamworks SDK not found at ${STEAMWORKS_SDK_PATH} — Steam disabled")
endif()
# -------------------------------------------------------------------------------
add_dependencies(vorpal_engine assets_zip)