Merge pull request 'build: rework cmake static and shared library building' (#1) from refactor/dll-support into master
Reviewed-on: http://localhost:3001/illyum/IsoEngine/pulls/1
This commit is contained in:
commit
54e4b00f8c
124
CMakeLists.txt
124
CMakeLists.txt
@ -2,10 +2,10 @@ cmake_minimum_required(VERSION 3.24)
|
|||||||
|
|
||||||
project(IsoEngine LANGUAGES CXX)
|
project(IsoEngine LANGUAGES CXX)
|
||||||
|
|
||||||
# Options for shared/static libraries, testbeds, and sandbox
|
# Options for shared/static libraries, and client/server examples
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries (DLLs) instead of static libraries" OFF)
|
option(BUILD_SHARED_LIBS "Build engine library dependencies as shared (DLLs)" OFF)
|
||||||
option(BUILD_CLIENT "Build the client testbed executable" ON)
|
option(BUILD_CLIENT "Build the client example" ON)
|
||||||
option(BUILD_SANDBOX "Build sandbox client and server" ON)
|
option(BUILD_SERVER "Build the server example" ON)
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||||
message(STATUS "No build type specified, defaulting to Debug")
|
message(STATUS "No build type specified, defaulting to Debug")
|
||||||
@ -29,78 +29,78 @@ endif()
|
|||||||
set(FETCHCONTENT_QUIET OFF)
|
set(FETCHCONTENT_QUIET OFF)
|
||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
|
|
||||||
# ENet is header-only, provide include directory
|
# enet is header-only
|
||||||
set(ENET_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/thirdparty/enet")
|
set(ENET_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/thirdparty/enet")
|
||||||
|
|
||||||
# Fetch Raylib and other dependencies
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
raylib
|
raylib
|
||||||
URL https://github.com/raysan5/raylib/archive/refs/tags/5.0.zip
|
URL https://github.com/raysan5/raylib/archive/refs/tags/5.0.zip
|
||||||
)
|
)
|
||||||
|
if (BUILD_SHARED_LIBS)
|
||||||
|
set(RAYLIB_LIBTYPE SHARED)
|
||||||
|
endif()
|
||||||
FetchContent_MakeAvailable(raylib)
|
FetchContent_MakeAvailable(raylib)
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
imgui
|
imgui
|
||||||
GIT_REPOSITORY https://github.com/ocornut/imgui.git
|
GIT_REPOSITORY https://github.com/ocornut/imgui.git
|
||||||
GIT_TAG v1.91.1
|
GIT_TAG v1.91.1
|
||||||
GIT_SHALLOW TRUE
|
GIT_SHALLOW TRUE
|
||||||
)
|
)
|
||||||
FetchContent_MakeAvailable(imgui)
|
FetchContent_MakeAvailable(imgui)
|
||||||
|
|
||||||
add_library(ImGui ${imgui_SOURCE_DIR}/imgui.cpp
|
add_library(ImGui ${imgui_SOURCE_DIR}/imgui.cpp
|
||||||
${imgui_SOURCE_DIR}/imgui_demo.cpp
|
${imgui_SOURCE_DIR}/imgui_demo.cpp
|
||||||
${imgui_SOURCE_DIR}/imgui_draw.cpp
|
${imgui_SOURCE_DIR}/imgui_draw.cpp
|
||||||
${imgui_SOURCE_DIR}/imgui_tables.cpp
|
${imgui_SOURCE_DIR}/imgui_tables.cpp
|
||||||
${imgui_SOURCE_DIR}/imgui_widgets.cpp
|
${imgui_SOURCE_DIR}/imgui_widgets.cpp
|
||||||
)
|
)
|
||||||
target_include_directories(ImGui PUBLIC ${imgui_SOURCE_DIR})
|
target_include_directories(ImGui PUBLIC ${imgui_SOURCE_DIR})
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
rlimgui
|
rlimgui
|
||||||
GIT_REPOSITORY https://github.com/raylib-extras/rlImGui.git
|
GIT_REPOSITORY https://github.com/raylib-extras/rlImGui.git
|
||||||
GIT_TAG main
|
GIT_TAG main
|
||||||
GIT_SHALLOW TRUE
|
GIT_SHALLOW TRUE
|
||||||
)
|
)
|
||||||
FetchContent_MakeAvailable(rlimgui)
|
FetchContent_MakeAvailable(rlimgui)
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
box2d
|
box2d
|
||||||
GIT_REPOSITORY https://github.com/erincatto/box2d.git
|
GIT_REPOSITORY https://github.com/erincatto/box2d.git
|
||||||
GIT_TAG v3.0.0
|
GIT_TAG v3.0.0
|
||||||
)
|
)
|
||||||
FetchContent_MakeAvailable(box2d)
|
FetchContent_MakeAvailable(box2d)
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
entt
|
entt
|
||||||
GIT_REPOSITORY https://github.com/skypjack/entt.git
|
GIT_REPOSITORY https://github.com/skypjack/entt.git
|
||||||
GIT_TAG v3.13.2
|
GIT_TAG v3.13.2
|
||||||
)
|
)
|
||||||
FetchContent_MakeAvailable(entt)
|
FetchContent_MakeAvailable(entt)
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
physfs
|
physfs
|
||||||
GIT_REPOSITORY https://github.com/icculus/physfs.git
|
GIT_REPOSITORY https://github.com/icculus/physfs.git
|
||||||
GIT_TAG release-3.2.0
|
GIT_TAG release-3.2.0
|
||||||
)
|
)
|
||||||
FetchContent_MakeAvailable(physfs)
|
# PhysFS settings (default: static)
|
||||||
|
set(PHYSFS_BUILD_STATIC ON CACHE BOOL "Build PhysFS static library" FORCE)
|
||||||
# PhysFS settings
|
set(PHYSFS_BUILD_SHARED OFF CACHE BOOL "Do not build PhysFS shared library" FORCE)
|
||||||
if(BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
set(PHYSFS_BUILD_SHARED ON CACHE BOOL "Build PhysFS shared library" FORCE)
|
set(PHYSFS_BUILD_SHARED ON CACHE BOOL "Build PhysFS shared library" FORCE)
|
||||||
set(PHYSFS_BUILD_STATIC OFF CACHE BOOL "Do not build PhysFS static library" FORCE)
|
set(PHYSFS_BUILD_STATIC OFF CACHE BOOL "Do not build PhysFS static library" FORCE)
|
||||||
else()
|
|
||||||
set(PHYSFS_BUILD_STATIC ON CACHE BOOL "Build PhysFS static library" FORCE)
|
|
||||||
set(PHYSFS_BUILD_SHARED OFF CACHE BOOL "Do not build PhysFS shared library" FORCE)
|
|
||||||
endif()
|
endif()
|
||||||
set(PHYSFS_BUILD_TEST OFF CACHE BOOL "Disable PhysFS test program" FORCE)
|
set(PHYSFS_BUILD_TEST OFF CACHE BOOL "Disable PhysFS test program" FORCE)
|
||||||
|
FetchContent_MakeAvailable(physfs)
|
||||||
|
|
||||||
# Main Engine Library
|
# Main Engine Library
|
||||||
set(ENGINE_SOURCES
|
set(ENGINE_SOURCES
|
||||||
src/IsoEngine.cpp
|
src/IsoEngine.cpp
|
||||||
src/enet_client.cpp
|
src/enet_client.cpp
|
||||||
src/enet_server.cpp
|
src/enet_server.cpp
|
||||||
|
|
||||||
src/components/sprite_component.cpp
|
src/components/sprite_component.cpp
|
||||||
src/Logger.cpp
|
src/Logger.cpp
|
||||||
src/Logger.h
|
src/Logger.h
|
||||||
src/components/transform_component.h
|
src/components/transform_component.h
|
||||||
@ -114,15 +114,15 @@ set(ENGINE_SOURCES
|
|||||||
add_library(IsoEngine ${ENGINE_SOURCES})
|
add_library(IsoEngine ${ENGINE_SOURCES})
|
||||||
|
|
||||||
target_include_directories(IsoEngine PUBLIC
|
target_include_directories(IsoEngine PUBLIC
|
||||||
${CMAKE_CURRENT_LIST_DIR}/src
|
${CMAKE_CURRENT_LIST_DIR}/src
|
||||||
${CMAKE_CURRENT_LIST_DIR}/src/components
|
${CMAKE_CURRENT_LIST_DIR}/src/components
|
||||||
${raylib_SOURCE_DIR}
|
${raylib_SOURCE_DIR}
|
||||||
${imgui_SOURCE_DIR}
|
${imgui_SOURCE_DIR}
|
||||||
${rlimgui_SOURCE_DIR}
|
${rlimgui_SOURCE_DIR}
|
||||||
${box2d_SOURCE_DIR}/include
|
${box2d_SOURCE_DIR}/include
|
||||||
${physfs_SOURCE_DIR}/src
|
${physfs_SOURCE_DIR}/src
|
||||||
${entt_SOURCE_DIR}/src
|
${entt_SOURCE_DIR}/src
|
||||||
${ENET_INCLUDE_DIR}
|
${ENET_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(IsoEngine PRIVATE raylib box2d EnTT::EnTT)
|
target_link_libraries(IsoEngine PRIVATE raylib box2d EnTT::EnTT)
|
||||||
@ -141,7 +141,7 @@ target_include_directories(rlImGui PUBLIC ${rlimgui_SOURCE_DIR} ${imgui_SOURCE_D
|
|||||||
target_link_libraries(rlImGui PRIVATE raylib ImGui)
|
target_link_libraries(rlImGui PRIVATE raylib ImGui)
|
||||||
target_link_libraries(IsoEngine PRIVATE ImGui rlImGui)
|
target_link_libraries(IsoEngine PRIVATE ImGui rlImGui)
|
||||||
|
|
||||||
# Testbed and Sandbox executables (client/server)
|
# Example executables (client/server)
|
||||||
if(BUILD_CLIENT OR BUILD_SANDBOX)
|
if(BUILD_CLIENT OR BUILD_SANDBOX)
|
||||||
# Client executable
|
# Client executable
|
||||||
set(CLIENT_SOURCE "${CMAKE_CURRENT_LIST_DIR}/sandbox/client.cpp")
|
set(CLIENT_SOURCE "${CMAKE_CURRENT_LIST_DIR}/sandbox/client.cpp")
|
||||||
@ -192,17 +192,17 @@ elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
|
|||||||
# Strip symbols after building
|
# Strip symbols after building
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
add_custom_command(TARGET IsoEngine POST_BUILD
|
add_custom_command(TARGET IsoEngine POST_BUILD
|
||||||
COMMAND ${CMAKE_STRIP} --strip-unneeded $<TARGET_FILE:IsoEngine>
|
COMMAND ${CMAKE_STRIP} --strip-unneeded $<TARGET_FILE:IsoEngine>
|
||||||
COMMENT "Stripping unneeded symbols from the IsoEngine binary in Release build."
|
COMMENT "Stripping unneeded symbols from the IsoEngine binary in Release build."
|
||||||
)
|
)
|
||||||
if(BUILD_CLIENT OR BUILD_SANDBOX)
|
if(BUILD_CLIENT OR BUILD_SANDBOX)
|
||||||
add_custom_command(TARGET client POST_BUILD
|
add_custom_command(TARGET client POST_BUILD
|
||||||
COMMAND ${CMAKE_STRIP} --strip-unneeded $<TARGET_FILE:client>
|
COMMAND ${CMAKE_STRIP} --strip-unneeded $<TARGET_FILE:client>
|
||||||
COMMENT "Stripping unneeded symbols from the client binary in Release build."
|
COMMENT "Stripping unneeded symbols from the client binary in Release build."
|
||||||
)
|
)
|
||||||
add_custom_command(TARGET server POST_BUILD
|
add_custom_command(TARGET server POST_BUILD
|
||||||
COMMAND ${CMAKE_STRIP} --strip-unneeded $<TARGET_FILE:server>
|
COMMAND ${CMAKE_STRIP} --strip-unneeded $<TARGET_FILE:server>
|
||||||
COMMENT "Stripping unneeded symbols from the server binary in Release build."
|
COMMENT "Stripping unneeded symbols from the server binary in Release build."
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@ -214,17 +214,17 @@ elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
|
|||||||
# Strip symbols aggressively after building
|
# Strip symbols aggressively after building
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
add_custom_command(TARGET IsoEngine POST_BUILD
|
add_custom_command(TARGET IsoEngine POST_BUILD
|
||||||
COMMAND ${CMAKE_STRIP} --strip-all $<TARGET_FILE:IsoEngine>
|
COMMAND ${CMAKE_STRIP} --strip-all $<TARGET_FILE:IsoEngine>
|
||||||
COMMENT "Stripping all symbols from the IsoEngine binary in MinSizeRel build."
|
COMMENT "Stripping all symbols from the IsoEngine binary in MinSizeRel build."
|
||||||
)
|
)
|
||||||
if(BUILD_CLIENT OR BUILD_SANDBOX)
|
if(BUILD_CLIENT OR BUILD_SANDBOX)
|
||||||
add_custom_command(TARGET client POST_BUILD
|
add_custom_command(TARGET client POST_BUILD
|
||||||
COMMAND ${CMAKE_STRIP} --strip-all $<TARGET_FILE:client>
|
COMMAND ${CMAKE_STRIP} --strip-all $<TARGET_FILE:client>
|
||||||
COMMENT "Stripping all symbols from the client binary in MinSizeRel build."
|
COMMENT "Stripping all symbols from the client binary in MinSizeRel build."
|
||||||
)
|
)
|
||||||
add_custom_command(TARGET server POST_BUILD
|
add_custom_command(TARGET server POST_BUILD
|
||||||
COMMAND ${CMAKE_STRIP} --strip-all $<TARGET_FILE:server>
|
COMMAND ${CMAKE_STRIP} --strip-all $<TARGET_FILE:server>
|
||||||
COMMENT "Stripping all symbols from the server binary in MinSizeRel build."
|
COMMENT "Stripping all symbols from the server binary in MinSizeRel build."
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user