Please note! These changes have not yet been tested on POSIX platforms (mac OR linux) so please do not expect them to work!
91 lines
3.2 KiB
CMake
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 () |