################################################################################ # General ################################################################################ cmake_minimum_required(VERSION 3.15 FATAL_ERROR) set(pvs2_BUILD_TYPES Release Debug) get_property(multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(multi_config) set(CMAKE_CONFIGURATION_TYPES "${pvs2_BUILD_TYPES}" CACHE STRING "list of supported configuration types" FORCE) else() set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type of the project.") set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${pvs2_BUILD_TYPES}") if(NOT CMAKE_BUILD_TYPE IN_LIST pvs2_BUILD_TYPES) message(FATAL_ERROR "Invalid build type '${CMAKE_BUILD_TYPE}'. Possible values:\n ${pvs2_BUILD_TYPES}") endif() endif() PROJECT(pvs2) SET(EXTRA_C_FLAGS "" CACHE STRING "Additional options to pass to C compiler") SET(EXTRA_CXX_FLAGS "" CACHE STRING "Additional options to pass to C++ compiler") # set compiler optimizations for debug and release SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -Wall -Wunused -Wunreachable-code -pedantic") SET(CMAKE_C_FLAGS_RELEASE "-O2") SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall -Wextra -Wpedantic -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment -Wconversion -Wdisabled-optimization -Wfloat-equal -Wformat -Wformat=2 -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimport -Winit-self -Winline -Winvalid-pch -Wlong-long -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wsign-compare -Wstack-protector -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Wswitch-enum -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings") SET(CMAKE_CXX_FLAGS_RELEASE "-O2") # -Wshadow spams too much :/ SET(CMAKE_CXX_STANDARD 11) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 ${EXTRA_C_FLAGS}") SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-multichar -Wno-error=deprecated-declarations ${EXTRA_CXX_FLAGS}" ) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) # local cmake modules SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) # this command finds libraries and sets all required variables FIND_PACKAGE(Qt5 COMPONENTS Widgets Network X11Extras LinguistTools Svg REQUIRED) FIND_PACKAGE(X11 REQUIRED) FIND_PACKAGE(VNC REQUIRED) SET(CMAKE_INCLUDE_CURRENT_DIR ON) # some includes #INCLUDE_DIRECTORIES( # ${CMAKE_CURRENT_SOURCE_DIR} # ${CMAKE_CURRENT_BINARY_DIR} # ${X11_INCLUDE_DIR} #) IF(X11_Xscreensaver_FOUND) ADD_DEFINITIONS(-DX11_Xscreensaver_FOUND) ENDIF() IF(X11_dpms_FOUND) ADD_DEFINITIONS(-DX11_dpms_FOUND) ENDIF() #IF(NOT X11_XTest_FOUND) # MESSAGE(FATAL_ERROR "Could not find X11 extension XTest or its developer files.") #ENDIF() #IF(NOT X11_Xinput_FOUND) # MESSAGE(FATAL_ERROR "Could not find X11 extension Xinput or its developer files.") #ENDIF() # TODO: Detect this somehow #SET(SYSDEP_SUFFIX _X11) ################################################################################ # Variables ################################################################################ # pvsmgr FILE(GLOB PVSMGR_SRCS src/server/*.cpp src/server/*/*.cpp src/server/util/platform/*.cpp src/shared/*.cpp ) # pvsclient FILE(GLOB PVSCLIENT_SRCS src/client/*.cpp src/client/*/*.cpp src/client/util/platform/*.cpp src/shared/*.cpp ) ################################################################################ # Qt ################################################################################ # .ui files FILE(GLOB_RECURSE PVSMGR_UIS src/server/*.ui ) FILE(GLOB_RECURSE PVSCLIENT_UIS src/client/*.ui ) # .qrc files # Copy these to build dir since the paths inside are relative, and this is where the translations end up configure_file(res/pvsmgr_ts.qrc ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) configure_file(res/pvsclient_ts.qrc ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) FILE(GLOB PVSMGR_RC_SRCS res/pvsmgr.qrc ${CMAKE_CURRENT_BINARY_DIR}/pvsmgr_ts.qrc ) FILE(GLOB PVSCLIENT_RC_SRCS res/pvsclient.qrc ${CMAKE_CURRENT_BINARY_DIR}/pvsclient_ts.qrc ) # i18n FILE(GLOB PVSMGR_TSS i18n/server/*.ts ) FILE(GLOB PVSCLIENT_TSS i18n/client/*.ts ) if(PVSMGR_TSS) QT5_CREATE_TRANSLATION(PVSMGR_QMS ${PVSMGR_UIS} ${PVSMGR_SRCS} ${PVSMGR_TSS} OPTIONS -noobsolete) endif(PVSMGR_TSS) if(PVSCLIENT_TSS) QT5_CREATE_TRANSLATION(PVSCLIENT_QMS ${PVSCLIENT_UIS} ${PVSCLIENT_SRCS} ${PVSCLIENT_TSS} OPTIONS -noobsolete) endif(PVSCLIENT_TSS) # this will run rcc on .qrc files QT5_ADD_RESOURCES(PVSMGR_RCS ${PVSMGR_RC_SRCS}) QT5_ADD_RESOURCES(PVSCLIENT_RCS ${PVSCLIENT_RC_SRCS}) ################################################################################ # Build ################################################################################ ADD_EXECUTABLE(pvsmgr ${PVSMGR_SRCS} ${PVSMGR_RCS} ${PVSMGR_RC_SRCS} ${PVSMGR_QMS} ) ADD_EXECUTABLE(pvsclient ${PVSCLIENT_SRCS} ${PVSCLIENT_RCS} ${PVSCLIENT_RC_SRCS} ${PVSCLIENT_QMS} ) # link TARGET_LINK_LIBRARIES(pvsmgr Qt5::Network Qt5::Widgets Qt5::Svg Qt5::X11Extras ${X11_LIBRARIES} ${X11_Xscreensaver_LIB} ) TARGET_LINK_LIBRARIES(pvsclient Qt5::Network Qt5::Widgets ${VNC_LIBRARIES} ${X11_LIBRARIES} ) SET_PROPERTY(TARGET pvsmgr PROPERTY COMPILE_DEFINITIONS MAINWINDOW_USE_NORMALGUI) # install INSTALL(TARGETS pvsmgr pvsclient RUNTIME DESTINATION bin)