1 project(ldforge) |
1 project(ldforge) |
2 cmake_minimum_required(VERSION 2.8.12) |
2 cmake_minimum_required(VERSION 2.8.12) |
3 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake") |
3 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake") |
4 #include(cotire) |
|
5 set(OpenGL_GL_PREFERENCE GLVND) |
4 set(OpenGL_GL_PREFERENCE GLVND) |
6 find_package(Qt5Widgets REQUIRED) |
5 find_package(Qt6 COMPONENTS Core Widgets OpenGL UiPlugin OpenGLWidgets) |
7 if (Qt5Widgets_VERSION VERSION_LESS 5.5.0) |
6 if (Qt6_FOUND) |
8 message(FATAL_ERROR "Qt5 version 5.5 required") |
7 message(NOTICE "-- Using Qt6") |
|
8 find_package(Qt6 REQUIRED COMPONENTS Core5Compat) |
|
9 # Unfortunately "Qt::UiPlugin" doesn't seem to work so let's resolve |
|
10 # it here instead... |
|
11 add_library(QtUiPlugin ALIAS Qt6::UiPlugin) |
|
12 else() |
|
13 message(NOTICE "-- Qt6 not found, using Qt5 instead") |
|
14 find_package(Qt5 5.5 REQUIRED COMPONENTS Core Widgets OpenGL UiPlugin) |
|
15 add_library(QtUiPlugin ALIAS Qt5::UiPlugin) |
9 endif() |
16 endif() |
10 find_package(Qt5Core REQUIRED) |
17 find_package(OpenGL REQUIRED) |
11 find_package(Qt5OpenGL REQUIRED) |
|
12 find_package(Qt5Network REQUIRED) |
|
13 #find_package(Qt5LinguistTools REQUIRED) |
|
14 find_package(GLM REQUIRED) |
18 find_package(GLM REQUIRED) |
15 set(CMAKE_AUTOMOC ON) |
19 set(CMAKE_AUTOMOC ON) |
16 set(CMAKE_AUTOUIC ON) |
20 set(CMAKE_AUTOUIC ON) |
17 set(CMAKE_AUTORCC ON) |
21 set(CMAKE_AUTORCC ON) |
18 find_package(OpenGL REQUIRED) |
22 include_directories(${CMAKE_CURRENT_BINARY_DIR}) |
19 include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) |
|
20 include_directories(${GLM_INCLUDE_DIR}) |
23 include_directories(${GLM_INCLUDE_DIR}) |
21 add_definitions(-DQT_NO_KEYWORDS) |
24 add_definitions(-DQT_NO_KEYWORDS) |
22 source_group("LDForge" REGULAR_EXPRESSION "src/.+\\.(cpp|h|ui)") |
25 source_group("LDForge" REGULAR_EXPRESSION "src/.+\\.(cpp|h|ui)") |
23 add_subdirectory(widgets) |
26 add_subdirectory(widgets) |
24 |
27 |
118 set(CMAKE_CXX_EXTENSIONS OFF) |
121 set(CMAKE_CXX_EXTENSIONS OFF) |
119 include_directories("${PROJECT_BINARY_DIR}") |
122 include_directories("${PROJECT_BINARY_DIR}") |
120 include_directories("${PROJECT_BINARY_DIR}/src") |
123 include_directories("${PROJECT_BINARY_DIR}/src") |
121 include_directories("${PROJECT_SOURCE_DIR}") |
124 include_directories("${PROJECT_SOURCE_DIR}") |
122 include_directories("${PROJECT_SOURCE_DIR}/src") |
125 include_directories("${PROJECT_SOURCE_DIR}/src") |
123 |
|
124 # Translations |
|
125 #qt5_create_translation(QM_FILES ${LDFORGE_SOURCES} ${LDFORGE_HEADERS} ${LDFORGE_FORMS} ${LDFORGE_LOCALES}) |
|
126 #add_custom_target(translations ALL DEPENDS ${QM_FILES}) |
|
127 add_custom_target(resources ALL DEPENDS ${LDFORGE_RESOURCES}) |
126 add_custom_target(resources ALL DEPENDS ${LDFORGE_RESOURCES}) |
128 |
127 |
129 if (NOT MSVC) |
128 if (NOT MSVC) |
130 if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") |
129 if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") |
131 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG") |
130 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG") |
132 endif() |
131 endif() |
133 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Wunused") |
132 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Wunused") |
134 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-implicit-fallthrough") |
133 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-implicit-fallthrough") |
135 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-noexcept-type") |
134 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-noexcept-type") |
136 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat-nonliteral -Wnonnull -Wnonnull-compare -Wnull-dereference -Winfinite-recursion -Wunused-const-variable=1 -Wuninitialized -Wsuggest-attribute=noreturn -Wmissing-noreturn -Wsuggest-attribute=malloc") |
135 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat-nonliteral -Wnonnull -Wnull-dereference -Winfinite-recursion -Wuninitialized -Wmissing-noreturn") |
137 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wduplicated-branches -Wshadow") |
136 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow") |
138 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunsafe-loop-optimizations -Wundef -Wmissing-field-initializers") |
137 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wundef -Wmissing-field-initializers") |
139 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-qual -Wcast-align -Wcast-function-type -Wconversion") |
138 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-qual -Wcast-align -Wcast-function-type -Wconversion") |
140 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-declarations -Wdate-time") |
139 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-declarations -Wdate-time") |
141 endif() |
140 endif() |
142 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
141 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
143 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcovered-switch-default -Wextra-semi -Wgnu -Wmicrosoft") |
142 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcovered-switch-default -Wextra-semi -Wgnu -Wmicrosoft") |
144 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wsometimes-uninitialized -Wstring-concatenation -Wstring-conversion -Wsuggest-override") |
143 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wsometimes-uninitialized -Wstring-concatenation -Wstring-conversion -Wsuggest-override") |
145 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override -Wundefined-func-template -Wundefined-reinterpret-cast") |
144 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override -Wundefined-func-template -Wundefined-reinterpret-cast") |
146 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized-const-reference -Wunreachable-code -Wunreachable-code-break -Wunreachable-code-return") |
145 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized-const-reference -Wunreachable-code -Wunreachable-code-break -Wunreachable-code-return") |
147 endif() |
146 endif() |
148 qt5_add_resources(LDFORGE_QRC ${LDFORGE_RESOURCES}) |
147 qt_add_resources(LDFORGE_QRC ${LDFORGE_RESOURCES}) |
149 qt5_wrap_ui(LDFORGE_FORMS_HEADERS ${LDFORGE_FORMS}) |
148 qt_wrap_ui(LDFORGE_FORMS_HEADERS ${LDFORGE_FORMS}) |
150 |
|
151 # Move languages.qrc into the build directory to bake the .qm-files into LDForge |
|
152 # so that they don't have to be shipped separately |
|
153 # https://stackoverflow.com/a/34798124 |
|
154 # https://gist.github.com/giraldeau/546ba5512a74dfe9d8ea0862d66db412 |
|
155 set(LANGUAGES_QRC "languages.qrc") |
|
156 configure_file(${LANGUAGES_QRC} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) |
|
157 qt5_add_resources(LDFORGE_QM_RC_FILE ${CMAKE_CURRENT_BINARY_DIR}/${LANGUAGES_QRC}) |
|
158 set_source_files_properties(${LDFORGE_LOCALES} PROPERTIES HEADER_FILE_ONLY TRUE) |
|
159 |
149 |
160 add_executable(ldforge WIN32 |
150 add_executable(ldforge WIN32 |
161 ${LDFORGE_SOURCES} |
151 ${LDFORGE_SOURCES} |
162 ${LDFORGE_HEADERS} |
152 ${LDFORGE_HEADERS} |
163 ${LDFORGE_RESOURCES} |
153 ${LDFORGE_RESOURCES} |
164 ${LDFORGE_QRC} |
154 ${LDFORGE_QRC} |
165 #${LDFORGE_QM_RC_FILE} |
|
166 ${QM_FILES} |
|
167 ${LDFORGE_FORMS_HEADERS} |
155 ${LDFORGE_FORMS_HEADERS} |
168 ${LDFORGE_OTHER_FILES} |
156 ${LDFORGE_OTHER_FILES} |
169 ) |
157 ) |
170 |
158 |
171 set_source_files_properties(${LDFORGE_HEADERS} PROPERTIES HEADER_FILE_ONLY TRUE) |
159 set_source_files_properties(${LDFORGE_HEADERS} PROPERTIES HEADER_FILE_ONLY TRUE) |
172 set_source_files_properties(${LDFORGE_RESOURCES} PROPERTIES HEADER_FILE_ONLY TRUE) |
160 set_source_files_properties(${LDFORGE_RESOURCES} PROPERTIES HEADER_FILE_ONLY TRUE) |
173 set_source_files_properties(${LDFORGE_OTHER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE) |
161 set_source_files_properties(${LDFORGE_OTHER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE) |
174 set_target_properties(ldforge PROPERTIES AUTOMOC 1) |
162 set_target_properties(ldforge PROPERTIES AUTOMOC 1) |
175 target_link_libraries(ldforge Qt5::Widgets Qt5::Network Qt5::OpenGL ${OPENGL_LIBRARIES}) |
163 target_link_libraries(ldforge PRIVATE Qt::Core) |
176 target_link_libraries(ldforge ldforgewidgets) |
164 target_link_libraries(ldforge PRIVATE Qt::Widgets) |
|
165 target_link_libraries(ldforge PRIVATE Qt::OpenGL) |
|
166 target_link_libraries(ldforge PRIVATE ${OPENGL_LIBRARIES}) |
|
167 target_link_libraries(ldforge PRIVATE ${GLEW_LIBRARIES}) |
|
168 target_link_libraries(ldforge PRIVATE ldforgewidgets) |
177 add_dependencies(ldforge resources) |
169 add_dependencies(ldforge resources) |
178 #cotire(ldforge) |
170 if (Qt6_FOUND) |
|
171 target_link_libraries(ldforge PRIVATE Qt6::Core5Compat) |
|
172 target_link_libraries(ldforge PRIVATE Qt6::OpenGLWidgets) |
|
173 endif() |
179 |
174 |
180 add_custom_target(linelength ALL |
175 add_custom_target(linelength ALL |
181 COMMAND python3 |
176 COMMAND python3 |
182 "${CMAKE_SOURCE_DIR}/tools/linelength.py" |
177 "${CMAKE_SOURCE_DIR}/tools/linelength.py" |
183 ${LDFORGE_SOURCES} |
178 ${LDFORGE_SOURCES} |