-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
161 lines (139 loc) · 5.44 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
cmake_minimum_required(VERSION 3.5)
project(QBrainwaveOSC VERSION 0.1 LANGUAGES CXX C)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
include_directories(
${PROJECT_SOURCE_DIR}/thirdparty/include
${PROJECT_SOURCE_DIR}/src
${PROJECT_SOURCE_DIR}/src/QBrainwaveInterface
${PROJECT_SOURCE_DIR}/src/QBrainwaveInterface/DataParsers
${PROJECT_SOURCE_DIR}/src/QBrainwaveInterface/WaveAnalyser
${PROJECT_SOURCE_DIR}/src/OSCSender
${PROJECT_SOURCE_DIR}/src/GUI
${PROJECT_SOURCE_DIR}/src/GUI/SettingsWidget
${PROJECT_SOURCE_DIR}/src/GUI/SettingsWidget/DeviceSettings
${PROJECT_SOURCE_DIR}/src/GUI/MonitorWidget
${PROJECT_SOURCE_DIR}/src/GUI/GraphsWidget
)
option(FORCE_QT5 "Force qt5 install" OFF)
option(FORCE_QT6 "Force qt6 install" OFF)
option(USE_FFTW "Use FFTW" ON)
if(USE_FFTW)
message("Using fftw3")
add_compile_definitions(USE_FFTW)
find_package(FFTW REQUIRED)
else()
message("Using kissfft")
add_compile_definitions(USE_KISSFFT)
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/kissfft)
endif()
if(FORCE_QT5)
set(QT_VERSION_MAJOR 5)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets Bluetooth SerialPort Charts Network)
elseif(FORCE_QT6)
set(QT_VERSION_MAJOR 6)
find_package(Qt6 REQUIRED COMPONENTS Core Widgets Bluetooth SerialPort Charts Network)
else()
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Widgets Bluetooth SerialPort Charts Network)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Widgets Bluetooth SerialPort Charts Network)
endif()
if (${QT_VERSION_MAJOR} EQUAL 5)
add_compile_definitions(QT5)
elseif (${QT_VERSION_MAJOR} EQUAL 6)
add_compile_definitions(QT6)
endif()
if(WIN32)
add_compile_definitions(_USE_MATH_DEFINES)
endif()
add_subdirectory(src)
# set icon
if(APPLE)
set(APP_ICON_MACOSX "${CMAKE_CURRENT_SOURCE_DIR}/desktop/AppIcon.icns")
set_source_files_properties(${APP_ICON_MACOSX} PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources")
set(RESOURCES ${RESOURCES} ${APP_ICON_MACOSX})
elseif(WIN32)
enable_language("RC")
set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/desktop/AppIcon.rc")
set(RESOURCES ${RESOURCES} ${APP_ICON_RESOURCE_WINDOWS})
endif()
set(PROJECT_SOURCES
${RESOURCES}
${PROJECT_SOURCES}
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(${PROJECT_NAME}
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
if(ANDROID)
add_library(${PROJECT_NAME} SHARED
${PROJECT_SOURCES}
)
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else()
add_executable(${PROJECT_NAME}
${PROJECT_SOURCES}
)
endif()
endif()
IF(WIN32)
set_property(TARGET ${PROJECT_NAME} PROPERTY WIN32_EXECUTABLE true)
ELSEIF(APPLE)
set_property(TARGET ${PROJECT_NAME} PROPERTY MACOSX_BUNDLE true)
set_target_properties(${PROJECT_NAME} PROPERTIES
BUNDLE True
MACOSX_BUNDLE_GUI_IDENTIFIER org.donarturo11.${PROJECT_NAME}.com
MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}
MACOSX_BUNDLE_BUNDLE_VERSION "0.1"
MACOSX_BUNDLE_SHORT_VERSION_STRING "0.1"
MACOSX_BUNDLE_ICON_FILE AppIcon.icns
INSTALL_RPATH @executable_path/../Frameworks
)
ENDIF()
if(USE_FFTW)
target_link_libraries(${PROJECT_NAME} PRIVATE fftw3)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Bluetooth)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::SerialPort)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Charts)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Network)
if(WIN32)
message("Installing for Windows")
include(GNUInstallDirs)
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_NAME}/lib/archive)
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_NAME}/lib)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_NAME})
install(FILES desktop/AppIcon.ico DESTINATION ${PROJECT_NAME})
elseif(UNIX AND (NOT APPLE))
message("Installing for UNIX")
include(GNUInstallDirs)
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib)
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin)
install(FILES desktop/AppIcon.png RENAME ${PROJECT_NAME}.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/128/apps)
install(FILES desktop/${PROJECT_NAME}.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
elseif(APPLE)
message("Installing for macOS")
install(FILES desktop/AppIcon.icns DESTINATION ${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app/Contents/Resources)
endif()
install(TARGETS ${PROJECT_NAME}
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
include(CPackConfig)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(${PROJECT_NAME})
endif()