cmake_minimum_required(VERSION 3.16.0) project( ScreenPlay VERSION 0.15.0 DESCRIPTION "Modern, Cross Plattform, Live Wallpaper, Widgets and AppDrawer!" HOMEPAGE_URL "https://screen-play.app/" LANGUAGES CXX) # This sets cmake to compile all dlls into the main directory set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) option(SCREENPLAY_IFW_ROOT "" STRING ) option(SCREENPLAY_STEAM "For FOSS distribution so we do not bundle proprietary code." ON) option(SCREENPLAY_TESTS "Enables UI tests." OFF) option(SCREENPLAY_CREATE_INSTALLER "Indicates whether an installer via the Qt Installer Framework is created." OFF) # Add our *.cmake diretory to the CMAKE_MODULE_PATH, so that our includes are found set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH}) file(MAKE_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}) set(CMAKE_CXX_STANDARD 20) if(WIN32) set(VCPKG_ARCH "x64-windows") elseif(UNIX AND NOT APPLE) set(VCPKG_ARCH "x64-linux") elseif(APPLE) set(VCPKG_ARCH "x64-osx") endif() if(${SCREENPLAY_TESTS}) enable_testing() endif() set(VCPKG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../ScreenPlay-vcpkg") set(VCPKG_INSTALLED_PATH "${VCPKG_PATH}/installed/${VCPKG_ARCH}") find_package(Git REQUIRED) if(WIN32) set(date_command "CMD") set(date_arg "/c date /t") elseif(APPLE) set(date_command "date") set(date_arg "") elseif(UNIX) set(date_command "date") set(date_arg "") endif() execute_process( COMMAND ${date_command} ${date_arg} WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process( COMMAND "${GIT_EXECUTABLE}" describe --always WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE) add_compile_definitions(COMPILE_INFO="Build Date: ${BUILD_DATE}. Git Hash: ${GIT_COMMIT_HASH}. ") add_compile_definitions(SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}") add_compile_definitions(SCREENPLAY_STEAM="${SCREENPLAY_STEAM}") if(UNIX AND NOT APPLE) # Fixes QWebEngine linker errors on Ubuntu 20.04 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold") endif() add_subdirectory(ScreenPlay) add_subdirectory(ScreenPlaySDK) add_subdirectory(ScreenPlayShader) add_subdirectory(ScreenPlayWallpaper) add_subdirectory(ScreenPlayWidget) add_subdirectory(ScreenPlayUtil) add_subdirectory(CMake) add_subdirectory(Tools) if(${SCREENPLAY_STEAM}) add_subdirectory(ScreenPlayWorkshop) else() # Only add target SteamSDKQtEnums add_subdirectory(ScreenPlayWorkshop/SteamSDK) endif() if(WIN32) add_subdirectory(ScreenPlaySysInfo) endif() message(STATUS "[DEFINE] SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}") message(STATUS "[DEFINE] BUILD_DATE = ${BUILD_DATE}") message(STATUS "[DEFINE] BUILD_TYPE = ${CMAKE_BUILD_TYPE}") message(STATUS "[DEFINE] GIT_COMMIT_HASH = ${GIT_COMMIT_HASH}") message(STATUS "[OPTION] SCREENPLAY_CREATE_INSTALLER = ${SCREENPLAY_CREATE_INSTALLER}") message(STATUS "[OPTION] SCREENPLAY_STEAM = ${SCREENPLAY_STEAM}") message(STATUS "[OPTION] SCREENPLAY_TESTS = ${SCREENPLAY_TESTS}") message(STATUS "[PROJECT] CMAKE_TOOLCHAIN_FILE = ${CMAKE_TOOLCHAIN_FILE}") message(STATUS "[PROJECT] VCPKG_PATH = ${VCPKG_PATH}") message(STATUS "[PROJECT] VCPKG_TARGET_TRIPLET = ${VCPKG_TARGET_TRIPLET}") message(STATUS "[PROJECT] CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}") if(${SCREENPLAY_CREATE_INSTALLER}) message(STATUS "[INSTALLER] CPACK_GENERATOR = ${CPACK_GENERATOR}") if(${SCREENPLAY_IFW_ROOT} STREQUAL "") # Hardcoded Qt paths that are used by the QtMaintanance tool for now... if(WIN32) set(SCREENPLAY_IFW_ROOT "C:/Qt/Tools/QtInstallerFramework/4.2") elseif(UNIX AND NOT APPLE) set(SCREENPLAY_IFW_ROOT "$ENV{HOME}/Qt/Tools/QtInstallerFramework/4.2") endif() message(STATUS "[CPACK_IFW_ROOT] Not set. Using hardcoded value: ${SCREENPLAY_IFW_ROOT}") message(STATUS "WARNING: MAKE SURE YOU HAVE THIS EXACT VERSION INSTALLED VIA THE QTMAINTANANCE TOOL!") else() message(STATUS "[CPACK_IFW_ROOT] = ${SCREENPLAY_IFW_ROOT}") endif() message(STATUS "[IFW INSTALLER ENABLED]: Configuring. This can take some time...") set(CPACK_IFW_ROOT ${SCREENPLAY_IFW_ROOT}) set(CPACK_PACKAGE_NAME "${PROJECT_NAME}") set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-Installer") set(CPACK_PACKAGE_VENDOR "Elias Steurer") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}") set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}") # Ensures that contents written to the CPack configuration files is escaped properly. set(CPACK_VERBATIM_VARIABLES TRUE) set(CPACK_GENERATOR "IFW") set(CPACK_IFW_PACKAGE_START_MENU_DIRECTORY "") # empty => default is install to top-level (?) set(CPACK_IFW_TARGET_DIRECTORY "@HomeDir@/Apps/${CMAKE_PROJECT_NAME}") set(CPACK_IFW_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/ScreenPlay/assets/icons/app.ico") set(CPACK_IFW_PACKAGE_WINDOW_ICON "${CMAKE_CURRENT_SOURCE_DIR}/ScreenPlay/assets/icons/app.ico") set(CPACK_IFW_PACKAGE_CONTROL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/Tools/Installer/installscript.qs") set(CPACK_COMPONENTS_GROUPING IGNORE) set(CPACK_IFW_PACKAGE_GROUP ScreenPlay) set(CPACK_IFW_VERBOSE ON) include(CPack) include(CPackIFW) # Install all files from /bin install( DIRECTORY "${CMAKE_BINARY_DIR}/bin/" COMPONENT ScreenPlay DESTINATION "/") cpack_add_component( ScreenPlay DISPLAY_NAME "ScreenPlay" DESCRIPTION "This installs ScreenPlay.") cpack_ifw_configure_component( ScreenPlayApp FORCED_INSTALLATION NAME "ScreenPlay" VERSION ${PROJECT_VERSION} # Version of component DESCRIPTION "Welcome to the K3000 installer." # Gets ignored and I do not know why SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/Tools/Installer/installscript.qs" CHECKABLE FALSE) endif()