-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
160 lines (145 loc) · 5.57 KB
/
CMakeLists.txt
File metadata and controls
160 lines (145 loc) · 5.57 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
152
153
154
155
156
157
158
159
160
cmake_minimum_required(VERSION 3.16)
# Recommended by cmake-js https://github.com/cmake-js/cmake-js
cmake_policy(SET CMP0091 NEW)
cmake_policy(SET CMP0042 NEW)
# Read version from vcpkg.json
include(version.cmake)
# Configuration
option(ODE_RENDERER_ENABLED "Build ODE with rendering capabilities" ON)
option(ODE_TEST_MODULES "Build tests and testing utilities (optional)" ON)
option(ODE_SKIA_GPU "Enable GPU acceleration for Skia library" ON)
option(ODE_REALTIME_TEXT "Enable SDF-based real-time text renderer" ON)
if(EMSCRIPTEN)
option(ODE_USE_WEBGL2 "Use WebGL version 2 (otherwise WebGL 1 is used)" OFF)
endif()
# Default to release if not multi-config
get_property(ODE_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(NOT ODE_MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE)
message(STATUS "CMAKE_BUILD_TYPE not set, defaulting to Release")
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
endif()
# Make sure that vcpkg toolchain file is set
if(NOT CMAKE_TOOLCHAIN_FILE AND NOT EMSCRIPTEN)
if(DEFINED ENV{VCPKG_ROOT})
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
else()
include(FetchContent)
FetchContent_Declare(vcpkg
GIT_REPOSITORY https://github.com/microsoft/vcpkg
GIT_TAG ${ODE_VCPKG_BUILTIN_BASELINE}
)
FetchContent_MakeAvailable(vcpkg)
set(CMAKE_TOOLCHAIN_FILE "${vcpkg_SOURCE_DIR}/scripts/buildsystems/vcpkg.cmake" CACHE FILEPATH "")
endif()
endif()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_OSX_DEPLOYMENT_TARGET 13.0)
# Set static vcpkg triplet for Windows
if(WIN32 AND NOT VCPKG_TARGET_TRIPLET)
if(${CMAKE_GENERATOR_PLATFORM} MATCHES "64$")
set(VCPKG_TARGET_TRIPLET "x64-windows-static")
elseif(${CMAKE_GENERATOR_PLATFORM} MATCHES "32$" OR ${CMAKE_GENERATOR_PLATFORM} STREQUAL "x86")
set(VCPKG_TARGET_TRIPLET "x86-windows-static")
else()
message(WARNING "Vcpkg triplet not explicitly specified and could not be deduced. Recommend using -DVCPKG_TARGET_TRIPLET=x86-windows-static or similar")
endif()
endif()
# Specify how to search for dependencies (Emscripten for wasm, vcpkg for everything else)
if(EXPLICIT_MODULE_PATH)
list(INSERT CMAKE_MODULE_PATH 0 "${EXPLICIT_MODULE_PATH}")
endif()
if(EMSCRIPTEN)
if(DEFINED ENV{ODE_PREBUILT_THIRDPARTY})
list(INSERT CMAKE_MODULE_PATH 0 $ENV{ODE_PREBUILT_THIRDPARTY})
else()
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/third-party/wasm-cmake")
endif()
else()
set(VCPKG_MANIFEST_NO_DEFAULT_FEATURES ON)
if(NOT OVERRIDE_SKIA_LIBRARY)
if(NOT OVERRIDE_OPENGL_LIBRARY)
list(APPEND VCPKG_MANIFEST_FEATURES "skia")
else()
list(APPEND VCPKG_MANIFEST_FEATURES "skia-no-gl")
endif()
endif()
list(APPEND VCPKG_MANIFEST_FEATURES "zip")
list(APPEND VCPKG_MANIFEST_FEATURES "freetype")
list(APPEND VCPKG_MANIFEST_FEATURES "harfbuzz")
list(APPEND VCPKG_MANIFEST_FEATURES "icu")
if(ODE_RENDERER_ENABLED)
list(APPEND VCPKG_MANIFEST_FEATURES "image-formats")
if(NOT OVERRIDE_GLFW_LIBRARY)
list(APPEND VCPKG_MANIFEST_FEATURES "glfw")
endif()
if(NOT OVERRIDE_GLEW_LIBRARY)
list(APPEND VCPKG_MANIFEST_FEATURES "glew")
endif()
if(ODE_REALTIME_TEXT)
list(APPEND VCPKG_MANIFEST_FEATURES "msdf-atlas")
endif()
endif()
list(APPEND VCPKG_MANIFEST_FEATURES "node-api")
endif()
if(ODE_TEST_MODULES)
list(APPEND VCPKG_MANIFEST_FEATURES "gtest")
endif()
project(open-design-engine VERSION ${ODE_VERSION} LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
if(NOT MSVC)
add_compile_options(-Wno-empty-body)
endif()
# Third-party packages
find_package(Freetype REQUIRED)
find_package(harfbuzz REQUIRED)
find_package(ICU REQUIRED)
find_package(ZLIB REQUIRED)
find_package(skia REQUIRED)
if(ODE_RENDERER_ENABLED)
if(NOT OVERRIDE_OPENGL_LIBRARY)
find_package(OpenGL REQUIRED)
endif()
if(NOT EMSCRIPTEN)
find_package(glfw3 REQUIRED)
find_package(GLEW REQUIRED)
endif()
endif()
# Global configuration
add_compile_definitions(GLEW_NO_GLU)
# Set TEXT_RENDERER_TEST_MODULES option for the open-design-text-renderer subproject
if(NOT DEFINED TEXT_RENDERER_TEST_MODULES)
if(ODE_TEST_MODULES)
set(TEXT_RENDERER_TEST_MODULES ON CACHE INTERNAL "Build Text Renderer tests and testing utilities" FORCE)
else()
set(TEXT_RENDERER_TEST_MODULES OFF CACHE INTERNAL "Build Text Renderer tests and testing utilities" FORCE)
endif()
endif()
# Modules
add_subdirectory(liboctopus)
add_subdirectory(open-design-text-renderer)
add_subdirectory(ode-essentials)
add_subdirectory(ode-rasterizer)
add_subdirectory(ode-logic)
if(ODE_RENDERER_ENABLED)
if(NOT EMSCRIPTEN)
add_subdirectory(ode-media)
endif()
add_subdirectory(ode-graphics)
add_subdirectory(ode-renderer)
#add_subdirectory(ode-interactive)
add_subdirectory(ode-napi)
endif()
if(ODE_TEST_MODULES)
add_subdirectory(ode-diagnostics)
add_subdirectory(tests/renderer-output-tests)
add_subdirectory(tools/animation-prototype)
add_subdirectory(tools/render-graph-inspector)
add_subdirectory(tools/design-editor)
endif()
# Select which project will be initially selected as "Startup Project" in Visual Studio
if(ODE_RENDERER_ENABLED)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ode-renderer-cli)
else()
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ode-logic-cli)
endif()