CMAKE Setup
Check cmake for available rawrbox cmake options
using CPM
CPMAddPackage(
NAME
rawrbox
GITHUB_REPOSITORY
edunad/rawrbox
GIT_TAG
master
OPTIONS
"RAWRBOX_BUILD_SAMPLES OFF"
"RAWRBOX_BUILD_TESTING OFF"
"RAWRBOX_BUILD_RAWRBOX_RESOURCES ON"
"RAWRBOX_BUILD_RAWRBOX_GLTF ON"
"RAWRBOX_BUILD_RAWRBOX_UI ON"
)
fetchContent
include(FetchContent)
FetchContent_GetProperties(rawrbox)
if(NOT rawrbox_POPULATED)
set(RAWRBOX_BUILD_SAMPLES OFF)
set(RAWRBOX_BUILD_TESTING OFF)
# use UI, gltf and resources
set(RAWRBOX_BUILD_RAWRBOX_RESOURCES ON)
set(RAWRBOX_BUILD_RAWRBOX_GLTF ON)
set(RAWRBOX_BUILD_RAWRBOX_UI ON)
FetchContent_Declare(rawrbox
GIT_REPOSITORY https://github.com/edunad/rawrbox.git
GIT_TAG master
)
FetchContent_MakeAvailable(rawrbox)
endif()
EXAMPLE SETUP
cmake_minimum_required(VERSION 3.16.3 FATAL_ERROR)
# SETUP CPM -----
include("cmake/cpm.cmake")
# ---------------
# Versioning
project("Example" DESCRIPTION "My game" LANGUAGES C CXX)
# ---
# Fix cmake paths
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
list(PREPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
list(PREPEND CONAN_GENERATORS_FOLDER ${CMAKE_BINARY_DIR})
# ---
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSPDLOG_FMT_EXTERNAL -DNOMINMAX")
set(CMAKE_CXX_STANDARD 23) # 23 recommended, but support 20 and lower
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(BUILD_SHARED_LIBS OFF)
# Apple needs this flag to compile mixed objective/c++
if(APPLE AND NOT XCODE)
set(CMAKE_CXX_FLAGS "-ObjC++")
endif()
# Linux and Wayland support
if(NOT WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
else()
# Ignore warnings about missing pdb
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4099")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /ignore:4099")
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /ignore:4099")
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive-")
endif()
set(CMAKE_SKIP_RPATH TRUE)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
# ---------------------------------
# SETUP LIBS ---
CPMAddPackage(
NAME
rawrbox
GITHUB_REPOSITORY
edunad/rawrbox
GIT_TAG
master
OPTIONS
"RAWRBOX_BUILD_SAMPLES OFF"
"RAWRBOX_BUILD_TESTING OFF"
"RAWRBOX_BUILD_RAWRBOX_RESOURCES ON"
"RAWRBOX_BUILD_RAWRBOX_GLTF ON"
"RAWRBOX_BUILD_RAWRBOX_UI ON" # use UI, gltf and resources
)
# --------------
# Grab source files
file(GLOB_RECURSE MY_GAME_SOURCES "include/*.hpp" "src/*.cpp")
# Project setup
set(output_target game)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_HOME_DIRECTORY}/${OUTPUT_BIN}/${CMAKE_BUILD_TYPE})
add_executable(${output_target} ${MY_GAME_SOURCES})
copy_resources(TARGET ${output_target})
target_include_directories(${output_target} PRIVATE "include")
target_compile_features(${output_target} PRIVATE cxx_std_${CMAKE_CXX_STANDARD})
target_link_libraries(${output_target} PRIVATE RAWRBOX.RENDER RAWRBOX.GLTF RAWRBOX.UI)
target_compile_definitions(${output_target} PRIVATE NOMINMAX)
## WARNING ------
# RAWRBOX.PHYSICS requires MULTITHREADED_RUNTIME (JoltPhysics uses it ¯\_(ツ)_/¯)
## --------------
if(BUILD_MSVC_MULTITHREADED_RUNTIME)
message(STATUS "Setting ${target}'s MSVC_RUNTIME_LIBRARY as MultiThreaded")
if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore") AND NOT MINGW)
set_target_properties(${output_target} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
endif()
if(NOT WIN32)
set_target_properties(${output_target} PROPERTIES LINK_FLAGS -Wl,-rpath,'\$ORIGIN')
else()
add_compile_options("/EHsc")
endif()
# ------