|
|
- cmake_minimum_required(VERSION 3.7)
-
- option(VERSION_STRING "Project version string" "0.0.0")
-
- project(antkeeper VERSION ${VERSION_STRING} LANGUAGES CXX)
-
- # Set compiler flags
- if(CMAKE_COMPILER_IS_GNUCC)
- set(CMAKE_CXX_FLAGS "-Wall -Wextra")
- set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -g")
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O3")
- elseif(MSVC)
- set(CMAKE_CXX_FLAGS "/W3 /MP /MD")
- set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS}")
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} /Ox")
- endif()
-
- # Find dependency packages
- find_package(vmq REQUIRED CONFIG)
- find_package(dr_wav REQUIRED CONFIG)
- find_package(stb REQUIRED CONFIG)
- find_package(glad REQUIRED CONFIG)
- find_package(EnTT REQUIRED CONFIG)
- find_package(OpenGL REQUIRED)
- find_package(SDL2 REQUIRED COMPONENTS SDL2::SDL2-static SDL2::SDL2main CONFIG)
- find_package(OpenAL REQUIRED CONFIG)
-
-
- # Determine dependencies
- set(STATIC_LIBS
- vmq
- dr_wav
- stb
- glad
- EnTT
- SDL2::SDL2main)
- set(SHARED_LIBS
- ${OPENGL_gl_LIBRARY}
- SDL2::SDL2
- OpenAL::OpenAL)
-
- # Generate configuration header file
- configure_file(${PROJECT_SOURCE_DIR}/src/configuration.hpp.in
- ${PROJECT_BINARY_DIR}/src/configuration.hpp)
-
- # Collect source files
- file(GLOB_RECURSE SOURCE_FILES
- ${PROJECT_SOURCE_DIR}/src/*.cpp)
-
- if(MSVC)
- # Generate Windows icon resource file
- set(ICON_FILE "${PROJECT_SOURCE_DIR}/../antkeeper-data/src/icons/antkeeper.ico")
- configure_file(${PROJECT_SOURCE_DIR}/src/platform/windows/icon.rc.in
- ${PROJECT_BINARY_DIR}/src/platform/windows/icon.rc)
-
- # Add executable icon
- list(APPEND SOURCE_FILES "${PROJECT_BINARY_DIR}/src/platform/windows/icon.rc")
-
- # Make DPI-aware on Windows
- list(APPEND SOURCE_FILES "${PROJECT_SOURCE_DIR}/src/platform/windows/dpi-aware.manifest")
- endif()
-
- # Add executable target
- set(EXECUTABLE_TARGET ${PROJECT_NAME}-executable)
- add_executable(${EXECUTABLE_TARGET} ${SOURCE_FILES})
- set_target_properties(${EXECUTABLE_TARGET} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
-
- # Add compile definitions
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- target_compile_definitions(${EXECUTABLE_TARGET} PRIVATE DEBUG)
- else()
- target_compile_definitions(${EXECUTABLE_TARGET} PRIVATE NDEBUG)
- endif()
-
- # Set C++17 standard
- set_target_properties(${EXECUTABLE_TARGET} PROPERTIES
- CXX_STANDARD 17
- CXX_EXTENSIONS OFF)
- if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
- set_target_properties(${EXECUTABLE_TARGET} PROPERTIES COMPILE_FLAGS "-std=c++17")
- elseif(MSVC)
- set_target_properties(${EXECUTABLE_TARGET} PROPERTIES COMPILE_FLAGS "/std:c++17")
- endif()
-
- # Set link flags to show console window on debug builds and hide it on release builds
- if(MSVC)
- set_target_properties(${EXECUTABLE_TARGET} PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
- set_target_properties(${EXECUTABLE_TARGET} PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS /ENTRY:\"mainCRTStartup\"")
- endif(MSVC)
-
- # Set include directories
- target_include_directories(${EXECUTABLE_TARGET}
- PUBLIC
- ${PROJECT_SOURCE_DIR}/src
- ${PROJECT_BINARY_DIR}/src)
-
- # Link to dependencies
- target_link_libraries(${EXECUTABLE_TARGET} ${STATIC_LIBS} ${SHARED_LIBS})
-
- # Install executable
- if(PACKAGE_PLATFORM MATCHES "linux")
- install(TARGETS ${EXECUTABLE_TARGET} DESTINATION bin)
- elseif(PACKAGE_PLATFORM MATCHES "win")
- # Install executable
- install(TARGETS ${EXECUTABLE_TARGET} DESTINATION .)
-
- # Install SDL2 DLLs
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- get_target_property(SDL2_DLL SDL2::SDL2 IMPORTED_LOCATION_DEBUG)
- else()
- get_target_property(SDL2_DLL SDL2::SDL2 IMPORTED_LOCATION_RELEASE)
- endif()
- install(FILES ${SDL2_DLL} DESTINATION .)
-
- # Install OpenAL DLL
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- get_target_property(OPENAL_DLL OpenAL::OpenAL IMPORTED_LOCATION_DEBUG)
- else()
- get_target_property(OPENAL_DLL OpenAL::OpenAL IMPORTED_LOCATION_RELEASE)
- endif()
- install(FILES ${OPENAL_DLL} DESTINATION .)
- endif()
-
|