CMakeLists.txt

Wed, 25 May 2022 20:36:34 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Wed, 25 May 2022 20:36:34 +0300
changeset 199
6988973515d2
parent 196
6bcb284679d4
child 200
ca23936b455b
permissions
-rw-r--r--

Fix pick() picking from weird places on the screen with high DPI scaling

glReadPixels reads data from the frame buffer, which contains data after
high DPI scaling, so any reads to that need to take this scaling into account

project(ldforge)
cmake_minimum_required(VERSION 2.8.12)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake")
#include(cotire)
set(OpenGL_GL_PREFERENCE GLVND)
find_package(Qt5Widgets REQUIRED)
if (Qt5Widgets_VERSION VERSION_LESS 5.5.0)
	message(FATAL_ERROR "Qt5 version 5.5 required")
endif()
find_package(Qt5Core REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(Qt5Network REQUIRED)
#find_package(Qt5LinguistTools REQUIRED)
find_package(GLM REQUIRED)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
find_package(OpenGL REQUIRED)
include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
include_directories(${GLM_INCLUDE_DIR})
add_definitions(-DQT_NO_KEYWORDS)
source_group("LDForge" REGULAR_EXPRESSION "src/.+\\.(cpp|h|ui)")

set (LDFORGE_SOURCES
	src/colors.cpp
	src/document.cpp
	src/documentmanager.cpp
	src/edithistory.cpp
	src/geometry.cpp
	src/header.cpp
	src/ldrawalgorithm.cpp
	src/libraries.cpp
	src/invert.cpp
	src/main.cpp
	src/mainwindow.cpp
	src/model.cpp
	src/modeleditor.cpp
	src/parser.cpp
	src/polygoncache.cpp
	src/uiutilities.cpp
	src/version.cpp
	src/vertexmap.cpp
	src/gl/axesprogram.cpp
	src/gl/basicshaderprogram.cpp
	src/gl/compiler.cpp
	src/gl/gridprogram.cpp
	src/gl/partrenderer.cpp
	src/gl/vertexprogram.cpp
	src/linetypes/circularprimitive.cpp
	src/linetypes/compoundobject.cpp
	src/linetypes/conditionaledge.cpp
	src/linetypes/edge.cpp
	src/linetypes/errorline.cpp
	src/linetypes/metacommand.cpp
	src/linetypes/object.cpp
	src/linetypes/quadrilateral.cpp
	src/linetypes/subfilereference.cpp
	src/linetypes/triangle.cpp
	src/settingseditor/keyboardshortcutseditor.cpp
	src/settingseditor/librarieseditor.cpp
	src/settingseditor/settingseditor.cpp
	src/types/boundingbox.cpp
	src/ui/canvas.cpp
	src/ui/multiplyfactordialog.cpp
	src/ui/objecteditor.cpp
	src/widgets/colorbutton.cpp
	src/widgets/colorindexinput.cpp
	src/widgets/colorselectdialog.cpp
	src/widgets/doublespinbox.cpp
	src/widgets/matrixeditor.cpp
	src/widgets/vec3editor.cpp
)
set (LDFORGE_HEADERS
	src/basics.h
	src/colors.h
	src/document.h
	src/documentmanager.h
	src/edithistory.h
	src/functional.h
	src/geometry.h
	src/header.h
	src/invert.h
	src/ldrawalgorithm.h
	src/libraries.h
	src/main.h
	src/mainwindow.h
	src/model.h
	src/modeleditor.h
	src/parser.h
	src/polygoncache.h
	src/ring.h
	src/uiutilities.h
	src/utility.h
	src/version.h
	src/vertexmap.h
	src/gl/axesprogram.h
	src/gl/basicshaderprogram.h
	src/gl/common.h
	src/gl/compiler.h
	src/gl/gridprogram.h
	src/gl/partrenderer.h
	src/gl/vertexprogram.h
	src/linetypes/circularprimitive.h
	src/linetypes/compoundobject.h
	src/linetypes/conditionaledge.h
	src/linetypes/edge.h
	src/linetypes/errorline.h
	src/linetypes/metacommand.h
	src/linetypes/object.h
	src/linetypes/polygonobject.h
	src/linetypes/propertygenerics.h
	src/linetypes/quadrilateral.h
	src/linetypes/subfilereference.h
	src/linetypes/triangle.h
	src/settingseditor/keyboardshortcutseditor.h
	src/settingseditor/librarieseditor.h
	src/settingseditor/settingseditor.h
	src/types/boundingbox.h
	src/ui/canvas.h
	src/ui/multiplyfactordialog.h
	src/ui/objecteditor.h
	src/widgets/colorbutton.h
	src/widgets/colorindexinput.h
	src/widgets/colorselectdialog.h
	src/widgets/doublespinbox.h
	src/widgets/matrixeditor.h
	src/widgets/vec3editor.h
)
set (LDFORGE_FORMS
	src/document.ui
	src/mainwindow.ui
	src/settingseditor/librarieseditor.ui
	src/settingseditor/settingseditor.ui
	src/ui/multiplyfactordialog.ui
	src/ui/objecteditor.ui
	src/widgets/colorselectdialog.ui
	src/widgets/colorindexinput.ui
	src/widgets/matrixeditor.ui
	src/widgets/vec3editor.ui
)

set(LDFORGE_LOCALES
	locale/fi.ts
	locale/sv.ts
)

set (LDFORGE_OTHER_FILES
	src/configurationoptions.txt
)

set(LDFORGE_RESOURCES ldforge.qrc)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
include_directories("${PROJECT_BINARY_DIR}")
include_directories("${PROJECT_BINARY_DIR}/src")
include_directories("${PROJECT_SOURCE_DIR}/src")

# Translations
#qt5_create_translation(QM_FILES ${LDFORGE_SOURCES} ${LDFORGE_HEADERS} ${LDFORGE_FORMS} ${LDFORGE_LOCALES})
#add_custom_target(translations ALL DEPENDS ${QM_FILES})
add_custom_target(resources ALL DEPENDS ${LDFORGE_RESOURCES})

if (NOT MSVC)
	if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG")
	endif()
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-implicit-fallthrough")
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-noexcept-type")
endif()
qt5_add_resources(LDFORGE_QRC ${LDFORGE_RESOURCES})
qt5_wrap_ui(LDFORGE_FORMS_HEADERS ${LDFORGE_FORMS})

# Move languages.qrc into the build directory to bake the .qm-files into LDForge
# so that they don't have to be shipped separately
# https://stackoverflow.com/a/34798124
# https://gist.github.com/giraldeau/546ba5512a74dfe9d8ea0862d66db412
set(LANGUAGES_QRC "languages.qrc")
configure_file(${LANGUAGES_QRC} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
qt5_add_resources(LDFORGE_QM_RC_FILE ${CMAKE_CURRENT_BINARY_DIR}/${LANGUAGES_QRC})
set_source_files_properties(${LDFORGE_LOCALES} PROPERTIES HEADER_FILE_ONLY TRUE)

add_executable(ldforge WIN32
	${LDFORGE_SOURCES}
	${LDFORGE_HEADERS}
	${LDFORGE_RESOURCES}
	${LDFORGE_QRC}
	#${LDFORGE_QM_RC_FILE}
	${QM_FILES}
	${LDFORGE_FORMS_HEADERS}
	${LDFORGE_OTHER_FILES}
	${CMAKE_BINARY_DIR}/configuration.cpp
)

set_source_files_properties(${LDFORGE_HEADERS} PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties(${LDFORGE_RESOURCES} PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties(${LDFORGE_OTHER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE)
set_target_properties(ldforge PROPERTIES AUTOMOC 1)
target_link_libraries(ldforge Qt5::Widgets Qt5::Network Qt5::OpenGL ${OPENGL_LIBRARIES})
add_dependencies(ldforge resources)
#cotire(ldforge)

add_custom_target (config_collection ALL
	COMMAND python3
	    "${CMAKE_SOURCE_DIR}/tools/configcollector.py"
		--header ${CMAKE_BINARY_DIR}/configuration.h
		--source ${CMAKE_BINARY_DIR}/configuration.cpp
		--sourcedir ${CMAKE_SOURCE_DIR}/src
		${CMAKE_SOURCE_DIR}/src/configurationoptions.txt
	WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
add_dependencies(ldforge config_collection)
set_source_files_properties (${CMAKE_BINARY_DIR}/configuration.cpp PROPERTIES GENERATED TRUE)
set_property(SOURCE configuration.cpp PROPERTY SKIP_AUTOGEN ON)


add_custom_target(linelength ALL
	COMMAND python3
		"${CMAKE_SOURCE_DIR}/tools/linelength.py"
		${LDFORGE_SOURCES}
		${LDFORGE_HEADERS}
	WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
add_dependencies(ldforge linelength)

# Collect the current hg revision into hginfo.h
add_custom_target(revision_check ALL
	COMMAND python3 "${CMAKE_SOURCE_DIR}/tools/updaterevision.py" --cwd "$(CMAKE_SOURCE_DIR)" hginfo.h
	WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
add_dependencies(ldforge revision_check)

install(TARGETS ldforge RUNTIME DESTINATION bin)

mercurial