forked from xaos-project/XaoS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
186 lines (159 loc) · 5.43 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
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
# This cmake configuration file is based on the work by Werner Volken <[email protected]>
# To create a native build of XaoS on Linux:
#
# * download a recent Qt SDK (at least Qt 6.2.4 is recommended),
#
# * install CMake (at least CMake 3.14 is suggested),
#
# * type:
#
# mkdir build; cd build \
# CMAKE_PREFIX_PATH=<PATH_TO_QT_SDK>/Qt/6.6.1/gcc_64/lib/cmake/Qt6LinguistTools \
# cmake -DCMAKE_INSTALL_PREFIX=<INSTALLATION_PATH> .. && \
# make -j<N_PROCS>
#
# where
# - PATH_TO_QT_SDK is the path of your Qt SDK installation (typically $HOME/Qt),
# - INSTALLATION_PATH is the planned installation folder of the executable and the supplementary files
# (say, $HOME/install/xaos, or, if you have root privileges, /usr),
# - N_PROCS is the number of processors you want to use for the compilation (if you have 8 cores,
# you may want to use 6).
#
# You do not have to set CMAKE_PREFIX_PATH if you have the following packages installed
# (under Ubuntu Linux 22.04):
#
# - qt6-base-dev
# - qt6-tools-dev
# - qt6-tools-dev-tools
# - qt6-l10n-tools
# - linguist-qt6
#
# Also, you do not have to set INSTALLATION_PATH if you do not want to install XaoS system-wide,
# or you want to use the default setting (/usr/local).
#
# * If the compilation succeeds, you can directly type:
#
# ./XaoS
#
# * To install XaoS in your INSTALLATION_PATH, type:
#
# make install
#
# or, if you want to install it system-wide:
#
# sudo make install
#
# * To run XaoS from your installation path, type:
#
# cd <INSTALLATION_PATH>; ./XaoS
#
# * To try the deep zoom feature out (it results in slower animations), add
#
# -DDEEPZOOM=ON
#
# on the cmake command line.
#
# * Alternatively, it is possible to build XaoS with the OpenGL driver. For this, you may need
# additional libraries:
#
# - freeglut3-dev
#
# Add
#
# -DOPENGL=ON
#
# on the cmake command line to enable the driver.
###########################################################################
# because of CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS
cmake_minimum_required(VERSION 3.14.0)
# WARNING: by setting gcc-13.2 and g++-13.2 it is possible to use quadmath support on Mac:
# set(CMAKE_C_COMPILER gcc-13.2)
# set(CMAKE_CXX_COMPILER g++-13.2)
project(XaoS)
option(DEEPZOOM "Use 128-bit float for deep zoom" OFF)
option(OPENGL "Use OpenGL" OFF)
if(DEEPZOOM)
add_definitions(-DUSE_FLOAT128) # may be unsupported on Mac, unless gcc/g++ is used
else(DEEPZOOM)
add_definitions(-DUSE_LONG_DOUBLE)
endif(DEEPZOOM)
if(OPENGL)
add_definitions(-DUSE_OPENGL)
endif(OPENGL)
# general definitions
add_definitions(-DUSE_SFFE -DSFFE_CMPLX_GSL)
# resolve symbolic links
set(CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS TRUE)
# by default, build a release (a non-debug executable)
if(NOT CMAKE_BUILD_TYPE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY VALUE Release)
endif(NOT CMAKE_BUILD_TYPE)
# set the project directory
get_filename_component(PROJECT_DIR ${CMAKE_SOURCE_DIR} PATH)
# set-up some QT stuff, they are required for the proper compilation of the GUI
# and automated embedding of the translations in the binary executable
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
# look for Qt6
find_package(QT NAMES Qt6 COMPONENTS Widgets PrintSupport REQUIRED)
find_package(Qt6 COMPONENTS Widgets PrintSupport REQUIRED)
if(OPENGL)
find_package(QT NAMES Qt6 COMPONENTS OpenGL OpenGLWidgets REQUIRED)
find_package(Qt6 COMPONENTS OpenGL OpenGLWidgets REQUIRED)
find_package(GLUT REQUIRED)
find_package(OpenGL REQUIRED)
endif(OPENGL)
# OS specific stuff
# on macOS the QT libraries are usually not installed into the system library folders
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# list(APPEND CMAKE_INSTALL_RPATH ${Qt6_DIR}/../..)
endif()
# set c++ flags
set(CMAKE_CXX_STANDARD 17)
# the include and link paths
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/src/engine
${CMAKE_CURRENT_SOURCE_DIR}/src/util
${CMAKE_CURRENT_SOURCE_DIR}/src/sffe
${CMAKE_CURRENT_SOURCE_DIR}/src/include
${CMAKE_CURRENT_SOURCE_DIR}/src/ui
${CMAKE_CURRENT_SOURCE_DIR}/src/ui-hlp
)
# set the Application icon, the first line is the property added to Info.plist
set(MACOSX_BUNDLE_ICON_FILE XaoS.icns)
set(XaoS_ICON ${CMAKE_CURRENT_SOURCE_DIR}/src/ui/XaoS.icns)
set_source_files_properties(${XaoS_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
# Multilingual support: *.ts -> *.qm
find_package(Qt6LinguistTools)
file(GLOB TRANSLATION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/i18n/*.ts)
# qt_add_translation
set_source_files_properties(${TRANSLATION_FILES}
PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/i18n")
qt6_add_translation(QM_FILES ${TRANSLATION_FILES})
# grab all sources for executable
file(GLOB CXX_FILES src/ui/*.cpp src/ui-hlp/*.cpp src/util/*.cpp src/engine/*.cpp src/sffe/*.cpp)
file(GLOB C_FILES src/sffe/*.c)
add_executable(XaoS MACOSX_BUNDLE
${CXX_FILES}
${C_FILES}
${QM_FILES}
${XaoS_ICON}
src/ui/XaoS.qrc
XaoS.qrc
)
# link libraries
target_link_libraries(XaoS Qt6::Widgets Qt6::PrintSupport)
if(DEEPZOOM)
target_link_libraries(XaoS quadmath)
endif(DEEPZOOM)
if(OPENGL)
target_link_libraries(XaoS Qt6::OpenGL Qt6::OpenGLWidgets)
endif(OPENGL)
# install bundle
install(TARGETS XaoS DESTINATION bin)
# install catalogs and tutorial
install(DIRECTORY catalogs tutorial DESTINATION .)
# install example files
file(GLOB EXAMPLE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/examples/*/*.xpf)
install(FILES ${EXAMPLE_FILES} DESTINATION examples)