IsoEngine/CMakeLists.txt
illyum 91cf0d25d5 feat(platform): add platform specific popups
Please note! These changes have not yet been tested on POSIX platforms
(mac OR linux) so please do not expect them to work!
2024-09-20 10:44:12 -06:00

91 lines
3.2 KiB
CMake

CMAKE_MINIMUM_REQUIRED(VERSION 3.18)
PROJECT(ICEngine LANGUAGES CXX C VERSION 1.0.0)
# Read version for logger
FILE(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" VERSION_TEXT)
STRING(STRIP "${VERSION_TEXT}" VERSION_TEXT)
STRING(REGEX MATCH "([A-Z]+)-([0-9]+)\\.([0-9]+)\\.([0-9]+)" _ ${VERSION_TEXT})
SET(PROJECT_VERSION ${CMAKE_MATCH_1}-${CMAKE_MATCH_2}.${CMAKE_MATCH_3}.${CMAKE_MATCH_4})
OPTION(BUILD_ENGINE_AS_SHARED_LIBRARY "Build engine as a shared library" OFF)
OPTION(BUILD_DEPS_AS_SHARED_LIBRARIES "Builds engine's dependencies as shared libraries" OFF)
OPTION(BUILD_EXAMPLES "Builds examples to showcase engine" ON)
IF (CMAKE_GENERATOR MATCHES "Visual Studio|Xcode")
SET(CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel" CACHE STRING "" FORCE)
ELSE ()
IF (NOT CMAKE_BUILD_TYPE)
MESSAGE(" | ICEngine | No build type specified, defaulting to Debug")
SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build: Debug, Release, MinSizeRel" FORCE)
ENDIF ()
ENDIF ()
SET(ARCHITECTURE "x64")
SET(CMAKE_CXX_STANDARD 20)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_XCODE_GENERATE_SCHEME ON)
SET(CMAKE_EXPORT_COMPILE_COMMANDS ON)
SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
MESSAGE(STATUS "Building for x64 architecture")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${ARCH_DIR}/bin)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${ARCH_DIR}/lib)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${ARCH_DIR}/lib)
IF (MSVC)
IF (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
ADD_COMPILE_OPTIONS(/W4 /WX)
ENDIF ()
ELSE ()
IF (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
ADD_COMPILE_OPTIONS(-Wall -Wextra -Werror -Wpedantic)
ENDIF ()
ENDIF ()
INCLUDE_DIRECTORIES(engine/)
SET(EngineSources
engine/src/core/ICEApplication.cpp
)
IF (WIN32)
LIST(APPEND EngineSources
engine/src/platform/windows/WindowsPopup.cpp
)
ELSEIF (UNIX)
LIST(APPEND EngineSources
engine/src/platform/posix/PosixPopup.cpp
)
ENDIF()
SET(PrecompiledHeader "pch.h")
IF (BUILD_ENGINE_AS_SHARED_LIBRARY)
ADD_LIBRARY(ICEngine SHARED ${EngineSources})
SET_TARGET_PROPERTIES(ICEngine PROPERTIES
OUTPUT_NAME "ICEngine"
WINDOWS_EXPORT_ALL_SYMBOLS ON
)
ELSE ()
ADD_LIBRARY(ICEngine STATIC ${EngineSources})
SET_TARGET_PROPERTIES(ICEngine PROPERTIES OUTPUT_NAME "ICEngine")
ENDIF ()
TARGET_COMPILE_DEFINITIONS(ICEngine PUBLIC PROJECT_VERSION="${PROJECT_VERSION}")
TARGET_INCLUDE_DIRECTORIES(ICEngine PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
IF (BUILD_EXAMPLES)
INCLUDE_DIRECTORIES(examples/server)
INCLUDE_DIRECTORIES(examples/client)
ADD_EXECUTABLE(server_example examples/server/server.cpp)
TARGET_LINK_LIBRARIES(server_example PRIVATE ICEngine)
ADD_EXECUTABLE(client_example examples/client/client.cpp)
TARGET_LINK_LIBRARIES(client_example PRIVATE ICEngine)
SET_TARGET_PROPERTIES(server_example PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
SET_TARGET_PROPERTIES(client_example PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
ENDIF ()