2017-06-25 15:28:25 +02:00
|
|
|
# CMAKE project for openrct2-ui (UI build of OpenRCT2)
|
2019-01-26 18:41:56 +01:00
|
|
|
cmake_minimum_required(VERSION 3.9)
|
2017-03-25 00:40:17 +01:00
|
|
|
if (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)
|
|
|
|
message(FATAL_ERROR "Building in-source is not supported! Create a build dir and remove ${CMAKE_SOURCE_DIR}/CMakeCache.txt")
|
2017-03-25 02:40:16 +01:00
|
|
|
endif ()
|
|
|
|
|
|
|
|
# Options
|
|
|
|
option(DISABLE_OPENGL "Disable OpenGL support.")
|
2017-03-25 00:40:17 +01:00
|
|
|
|
|
|
|
# Third party libraries
|
2018-04-13 00:07:18 +02:00
|
|
|
if (MSVC)
|
2019-02-05 16:12:58 +01:00
|
|
|
find_package(SDL2 REQUIRED)
|
2018-04-13 00:07:18 +02:00
|
|
|
find_library(SPEEX_LDFLAGS libspeexdsp)
|
|
|
|
else ()
|
2021-01-10 08:49:04 +01:00
|
|
|
PKG_CHECK_MODULES(SDL2 REQUIRED IMPORTED_TARGET sdl2)
|
|
|
|
PKG_CHECK_MODULES(SPEEX REQUIRED IMPORTED_TARGET speexdsp)
|
2018-04-13 00:07:18 +02:00
|
|
|
endif ()
|
|
|
|
|
2017-03-25 02:40:16 +01:00
|
|
|
if (NOT DISABLE_OPENGL)
|
|
|
|
# GL doesn't work nicely with macOS, while find_package doesn't work with multiarch on Ubuntu.
|
|
|
|
if (APPLE)
|
|
|
|
find_package(OpenGL REQUIRED)
|
|
|
|
elseif (NOT WIN32)
|
|
|
|
PKG_CHECK_MODULES(GL REQUIRED gl)
|
|
|
|
endif ()
|
|
|
|
endif ()
|
2017-03-25 00:40:17 +01:00
|
|
|
|
|
|
|
# Sources
|
2017-03-25 02:40:16 +01:00
|
|
|
file(GLOB_RECURSE OPENRCT2_UI_SOURCES
|
2018-06-04 11:10:52 +02:00
|
|
|
"${CMAKE_CURRENT_LIST_DIR}/*.cpp")
|
|
|
|
file(GLOB_RECURSE OPENRCT2_UI_HEADERS
|
2017-03-25 00:40:17 +01:00
|
|
|
"${CMAKE_CURRENT_LIST_DIR}/*.h"
|
|
|
|
"${CMAKE_CURRENT_LIST_DIR}/*.hpp")
|
|
|
|
|
2017-05-15 00:12:30 +02:00
|
|
|
if (APPLE)
|
|
|
|
file(GLOB_RECURSE OPENRCT2_UI_MM_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.mm")
|
|
|
|
set_source_files_properties(${OPENRCT2_UI_MM_SOURCES} PROPERTIES COMPILE_FLAGS "-x objective-c++ -fmodules")
|
|
|
|
endif ()
|
|
|
|
|
2017-03-25 00:40:17 +01:00
|
|
|
# Outputs
|
2021-01-08 19:23:51 +01:00
|
|
|
project(openrct2 CXX)
|
|
|
|
add_executable(${PROJECT_NAME} ${OPENRCT2_UI_SOURCES} ${OPENRCT2_UI_MM_SOURCES})
|
|
|
|
SET_CHECK_CXX_FLAGS(${PROJECT_NAME})
|
|
|
|
ipo_set_target_properties(${PROJECT_NAME})
|
2021-01-10 08:49:04 +01:00
|
|
|
if (NOT MSVC)
|
|
|
|
target_link_libraries(${PROJECT_NAME} "libopenrct2"
|
|
|
|
PkgConfig::SDL2
|
|
|
|
PkgConfig::SPEEX)
|
|
|
|
else ()
|
|
|
|
target_link_libraries(${PROJECT_NAME} "libopenrct2"
|
|
|
|
${SDL2_LDFLAGS}
|
|
|
|
${SPEEX_LDFLAGS})
|
|
|
|
endif ()
|
2021-01-08 19:23:51 +01:00
|
|
|
target_link_platform_libraries(${PROJECT_NAME})
|
2017-03-25 00:40:17 +01:00
|
|
|
|
2017-03-25 02:40:16 +01:00
|
|
|
if (NOT DISABLE_OPENGL)
|
|
|
|
if (WIN32)
|
2021-01-08 19:23:51 +01:00
|
|
|
target_link_libraries(${PROJECT_NAME} opengl32)
|
2017-03-25 02:40:16 +01:00
|
|
|
elseif (APPLE)
|
2021-01-08 19:23:51 +01:00
|
|
|
target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARY})
|
2017-03-25 02:40:16 +01:00
|
|
|
else ()
|
2021-01-08 19:23:51 +01:00
|
|
|
target_link_libraries(${PROJECT_NAME} ${GL_LIBRARIES})
|
2017-03-25 02:40:16 +01:00
|
|
|
endif ()
|
|
|
|
endif ()
|
|
|
|
|
2017-03-25 00:40:17 +01:00
|
|
|
# Includes
|
2021-01-08 19:23:51 +01:00
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_LIST_DIR}/.."
|
2017-05-23 16:37:03 +02:00
|
|
|
${SPEEX_INCLUDE_DIRS})
|
2021-01-08 19:23:51 +01:00
|
|
|
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE ${SDL2_INCLUDE_DIRS}
|
2020-02-23 16:33:01 +01:00
|
|
|
"${CMAKE_CURRENT_LIST_DIR}/../thirdparty")
|
2017-03-25 00:40:17 +01:00
|
|
|
|
|
|
|
# Compiler flags
|
2017-03-25 02:40:16 +01:00
|
|
|
if (WIN32)
|
|
|
|
# mingw complains about "%zu" not being a valid format specifier for printf, unless we
|
|
|
|
# tell it that it is
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__USE_MINGW_ANSI_STDIO=1")
|
2021-01-08 19:23:51 +01:00
|
|
|
target_link_libraries(${PROJECT_NAME} comdlg32)
|
2019-02-05 16:12:58 +01:00
|
|
|
if (MSVC)
|
2021-01-08 19:23:51 +01:00
|
|
|
target_link_libraries(${PROJECT_NAME} SDL2::SDL2-static)
|
|
|
|
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE SDL2::SDL2-static)
|
2019-02-05 16:12:58 +01:00
|
|
|
else ()
|
|
|
|
# mingw does not provide proper CMake information like other configurations
|
|
|
|
find_path(SDL2_INCLUDE_DIRS SDL2/SDL.h)
|
|
|
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
|
|
find_library(SDL2_LDFLAGS sdl2d)
|
|
|
|
else ()
|
|
|
|
find_library(SDL2_LDFLAGS sdl2)
|
|
|
|
endif ()
|
2020-03-05 19:35:23 +01:00
|
|
|
# Hardcode some of the libraries used by mingw builds
|
2021-01-08 19:23:51 +01:00
|
|
|
target_link_libraries(${PROJECT_NAME} imm32 winmm setupapi version)
|
2019-02-05 16:12:58 +01:00
|
|
|
endif ()
|
2017-03-25 02:40:16 +01:00
|
|
|
endif ()
|
2018-04-13 00:07:18 +02:00
|
|
|
if (MSVC)
|
|
|
|
# Add DPI-aware manifest
|
|
|
|
# HACK Add /MANIFEST:NO first to prevent cmake from adding its own manifest arguments
|
|
|
|
if (NOT $ENV{VCToolsInstallDir} STREQUAL "")
|
|
|
|
set(MANIFEST_DPI "$ENV{VCToolsInstallDir}\\Include\\Manifest\\PerMonitorHighDPIAware.manifest")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO /MANIFEST /manifest:embed /manifestinput:\"${MANIFEST_DPI}\"")
|
|
|
|
endif ()
|
|
|
|
endif ()
|
2017-05-30 23:34:13 +02:00
|
|
|
|
2017-03-25 02:40:16 +01:00
|
|
|
# Defines
|
|
|
|
if (DISABLE_OPENGL)
|
|
|
|
add_definitions(-DDISABLE_OPENGL)
|
|
|
|
else ()
|
|
|
|
# Makes OpenGL function get queried in run-time rather than linked-in
|
|
|
|
add_definitions(-DOPENGL_NO_LINK)
|
|
|
|
endif ()
|
2018-04-13 00:07:18 +02:00
|
|
|
if (MSVC)
|
|
|
|
add_definitions(-D__DISABLE_DLL_PROXY__)
|
|
|
|
endif ()
|
2018-06-04 11:10:52 +02:00
|
|
|
|
|
|
|
# Add headers check to verify all headers carry their dependencies.
|
|
|
|
# Only valid for Clang for now:
|
|
|
|
# - GCC 8 does not support -Wno-pragma-once-outside-header
|
|
|
|
# - Other compilers status unknown
|
|
|
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
2018-06-04 12:01:56 +02:00
|
|
|
set(OPENRCT2_HEADERS_CHECK ${OPENRCT2_UI_HEADERS})
|
|
|
|
# OpenGLAPIProc.h is not meant to be included directly.
|
|
|
|
list(REMOVE_ITEM OPENRCT2_HEADERS_CHECK "${CMAKE_CURRENT_LIST_DIR}/drawing/engines/opengl/OpenGLAPIProc.h")
|
2021-01-08 19:23:51 +01:00
|
|
|
add_library(${PROJECT_NAME}-headers-check OBJECT ${OPENRCT2_HEADERS_CHECK})
|
|
|
|
set_target_properties(${PROJECT_NAME}-headers-check PROPERTIES LINKER_LANGUAGE CXX)
|
2018-06-04 12:01:56 +02:00
|
|
|
set_source_files_properties(${OPENRCT2_HEADERS_CHECK} PROPERTIES LANGUAGE CXX)
|
2018-06-04 11:10:52 +02:00
|
|
|
add_definitions("-x c++ -Wno-pragma-once-outside-header -Wno-unused-const-variable")
|
2021-01-08 19:23:51 +01:00
|
|
|
get_target_property(OPENRCT2_INCLUDE_DIRS ${PROJECT_NAME} INCLUDE_DIRECTORIES)
|
|
|
|
set_target_properties(${PROJECT_NAME}-headers-check PROPERTIES INCLUDE_DIRECTORIES "${OPENRCT2_INCLUDE_DIRS}")
|
2018-06-04 11:10:52 +02:00
|
|
|
endif ()
|