blob: cc6edc785b59161da553f19c9657aaf14301f546 (
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
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
#
# Irrlicht 3D engine
#
cmake_minimum_required(VERSION 3.16)
project(Irrlicht LANGUAGES C CXX)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# Irrlicht directories
# -------------------------------------------------------------------------------------------------
set(IRR_SRC_DIR "source/Irrlicht")
set(IRR_INC_DIR "include")
set(IRR_TOOL_DIR "tools")
# Options
# -------------------------------------------------------------------------------------------------
set(DXSDK "")
if(DEFINED ENV{DXSDK_DIR})
set(DXSDK "$ENV{DXSDK_DIR}")
endif()
set(IRR_UNICODE_PATH 0 CACHE BOOL "Whether to enable unicode path support on windows")
set(IRR_FAST_MATH 0 CACHE BOOL "Whether to enable fast maths (at the expense of precision)")
set(IRR_SHARED_LIB 1 CACHE BOOL "Whether to generate shared libraries instead of static libraries")
set(IRR_DIRECTX_SDK ${DXSDK} CACHE PATH "Path to the DirectX SDK (for DirectX 9, this folder should contain /Include, /Lib)")
set(IRR_BUILD_TOOLS 0 CACHE BOOL "Whether to generate the tools")
# Some helper functions
# -------------------------------------------------------------------------------------------------
function(glob_c_cpp_sources result folder)
file(GLOB res
"${folder}/*.c"
"${folder}/*.cpp"
"${folder}/*.h"
"${folder}/*.hpp"
"${folder}/*.rc")
set(${result} ${res} PARENT_SCOPE)
endfunction()
# Source files
# -------------------------------------------------------------------------------------------------
glob_c_cpp_sources(IRR_SRC_FILES ${IRR_SRC_DIR})
glob_c_cpp_sources(IRR_SRC_FILES_INTERFACE ${IRR_INC_DIR})
glob_c_cpp_sources(IRR_SRC_FILES_AESGLADMAN ${IRR_SRC_DIR}/aesGladman)
glob_c_cpp_sources(IRR_SRC_FILES_LZMA ${IRR_SRC_DIR}/lzma)
glob_c_cpp_sources(IRR_TOOL_FILES_FILE_TO_HEADER ${IRR_TOOL_DIR}/FileToHeader/)
glob_c_cpp_sources(IRR_TOOL_FILES_GUI_EDITOR ${IRR_TOOL_DIR}/GUIEditor/)
glob_c_cpp_sources(IRR_TOOL_FILES_FONT_TOOL ${IRR_TOOL_DIR}/IrrFontTool/newFontTool/)
glob_c_cpp_sources(IRR_TOOL_FILES_MESH_CONVERTER ${IRR_TOOL_DIR}/MeshConverter/)
if(APPLE)
file(GLOB IRR_SRC_FILES_OSX
"${IRR_SRC_DIR}/MacOSX/*.mm"
"${IRR_SRC_DIR}/MacOSX/*.h")
set(IRR_SRC_FILES ${IRR_SRC_FILES} ${IRR_SRC_FILES_OSX})
endif()
# Group files
# -------------------------------------------------------------------------------------------------
source_group(Irrlicht\\engine FILES ${IRR_SRC_FILES})
source_group(Irrlicht\\interface FILES ${IRR_SRC_FILES_INTERFACE})
source_group(Irrlicht\\libs\\aesGladman FILES ${IRR_SRC_FILES_AESGLADMAN})
source_group(Irrlicht\\libs\\lzma FILES ${IRR_SRC_FILES_LZMA})
# Library files
# -------------------------------------------------------------------------------------------------
find_package(ZLIB REQUIRED)
find_package(PNG REQUIRED)
find_package(JPEG REQUIRED)
find_package(BZip2 REQUIRED)
#find_package(LIBLZMA REQUIRED) # LIBLZMA does not export _LzmaDecode
# Irrlicht target
# -------------------------------------------------------------------------------------------------
set(IRR_ALL_SRC_FILES
${IRR_SRC_FILES}
${IRR_SRC_FILES_INTERFACE}
${IRR_SRC_FILES_AESGLADMAN}
${IRR_SRC_FILES_LZMA}
)
if(${IRR_SHARED_LIB})
add_library(Irrlicht SHARED ${IRR_ALL_SRC_FILES})
else()
add_library(Irrlicht STATIC ${IRR_ALL_SRC_FILES})
endif()
if(APPLE)
target_include_directories(Irrlicht PRIVATE ${IRR_SRC_DIR}/MacOSX)
target_compile_definitions(Irrlicht PRIVATE SYSTEM=MacOSX)
target_link_libraries(Irrlicht ${OSX_LIBRARIES})
target_compile_options(Irrlicht PRIVATE "-ObjC++")
set(ADDITIONAL_LIRARIES
"-framework OpenGL"
"-framework IOKit"
"-framework Carbon"
"-framework AppKit"
"-framework Cocoa")
endif()
target_link_libraries(Irrlicht PRIVATE
${PNG_LIBRARY}
${JPEG_LIBRARY}
${ZLIB_LIBRARY}
${BZIP2_LIBRARY}
${ADDITIONAL_LIRARIES}
)
if(IRR_BUILD_TOOLS)
add_executable(FileToHeader ${IRR_TOOL_FILES_FILE_TO_HEADER})
add_executable(GUIEditor ${IRR_TOOL_FILES_GUI_EDITOR})
target_link_libraries(GUIEditor Irrlicht)
add_executable(FontTool ${IRR_TOOL_FILES_FONT_TOOL})
target_link_libraries(FontTool Irrlicht)
add_executable(MeshConverter ${IRR_TOOL_FILES_MESH_CONVERTER})
target_link_libraries(MeshConverter Irrlicht)
endif()
# Target properties (for compilation & export)
# -------------------------------------------------------------------------------------------------
target_include_directories(Irrlicht
PRIVATE ${IRR_SRC_DIR}
PRIVATE ${IRR_SRC_DIR}/aesGladman
PRIVATE ${BZIP2_INCLUDE_DIR}
PRIVATE ${JPEG_INCLUDE_DIR}
PRIVATE ${LIBPNG_INCLUDE_DIR}
PRIVATE ${IRR_SRC_DIR}/lzma
PRIVATE ${ZLIB_INCLUDE_DIR}
)
# I dont realy understand why this is necesary or what it is doing,
# but it is necesarry to build and export a package.
# See: https://cmake.org/cmake/help/v3.8/command/target_include_directories.html
target_include_directories(Irrlicht PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include/irrlicht> # <prefix>/include/irrlicht
)
if(NOT ${IRR_DIRECTX_SDK} STREQUAL "")
target_include_directories(Irrlicht PRIVATE ${IRR_DIRECTX_SDK}/Include)
if(${CMAKE_SIZEOF_VOID_P} EQUAL 4)
set(DX_LIBS ${IRR_DIRECTX_SDK}/Lib/x86)
else()
set(DX_LIBS ${IRR_DIRECTX_SDK}/Lib/x64)
endif()
target_link_libraries(Irrlicht
PRIVATE ${DX_LIBS}/d3dx9.lib
PRIVATE ${DX_LIBS}/dinput8.lib
PRIVATE ${DX_LIBS}/dxguid.lib)
else()
target_compile_definitions(Irrlicht PRIVATE NO_IRR_COMPILE_WITH_DIRECT3D_9_)
endif()
if(NOT ${IRR_SHARED_LIB})
target_compile_definitions(Irrlicht PUBLIC _IRR_STATIC_LIB_)
endif()
# Disable Irrlicht building already provided dependencies
target_compile_definitions(Irrlicht
PRIVATE NO_IRR_USE_NON_SYSTEM_ZLIB_
PRIVATE NO_IRR_USE_NON_SYSTEM_LIB_PNG_
PRIVATE NO_IRR_USE_NON_SYSTEM_BZLIB_
PRIVATE NO_IRR_USE_NON_SYSTEM_JPEG_LIB_
)
# Per platform config
# -------------------------------------------------------------------------------------------------
# Export symbols
target_compile_definitions(Irrlicht PRIVATE IRRLICHT_EXPORTS)
if(WIN32)
# Import the symbols of bzip2
target_compile_definitions(Irrlicht PRIVATE BZ_IMPORT)
# Disable the ton of warnings from standard library
target_compile_definitions(Irrlicht PRIVATE _CRT_SECURE_NO_WARNINGS)
# Multi processor compilation
target_compile_options(Irrlicht PRIVATE /MP)
# Unicode
if(${IRR_UNICODE_PATH})
target_compile_definitions(Irrlicht PRIVATE UNICODE _UNICODE)
target_compile_definitions(Irrlicht PUBLIC _IRR_WCHAR_FILESYSTEM)
endif()
# Fast math options
if(${IRR_FAST_MATH})
target_compile_options(Irrlicht PRIVATE /fp:fast)
message("Fast Math Enabled")
# SSE2 is automatically activated on x64
if(${CMAKE_SIZEOF_VOID_P} EQUAL 4)
target_compile_options(Irrlicht PRIVATE /arch:SSE2)
endif()
endif()
elseif(UNIX)
# Standard mode
target_compile_options(Irrlicht
PRIVATE -Wall
PRIVATE -pipe
PRIVATE -fno-exceptions
PRIVATE -fno-strict-aliasing)
# Disable RTTI on C++ files only (no sense for C files)
set_source_files_properties(${IRR_SRC_FILES} ${IRR_SRC_FILES_AESGLADMAN}
PROPERTIES COMPILE_FLAGS -fno-rtti)
# Debug macro
target_compile_options(Irrlicht PRIVATE $<$<CONFIG:Debug>:-D_DEBUG>)
# X11 and OpenGL
if(NOT APPLE)
target_link_libraries(Irrlicht
PRIVATE X11
PRIVATE GL
PRIVATE Xxf86vm)
endif()
endif()
# Installation
# -------------------------------------------------------------------------------------------------
install(
TARGETS Irrlicht
EXPORT Irrlicht
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(FILES ${IRR_SRC_FILES_INTERFACE} DESTINATION "include/irrlicht" CONFIGURATIONS Release)
if(IRR_BUILD_TOOLS)
install(
TARGETS FileToHeader GUIEditor FontTool MeshConverter
RUNTIME DESTINATION tools/irrlicht/
CONFIGURATIONS Release
)
endif()
install(EXPORT Irrlicht FILE irrlicht-targets.cmake DESTINATION share/irrlicht)
|