Files
ogre-base/CMakeLists.txt
2025-08-30 10:47:25 +03:00

304 lines
10 KiB
CMake

cmake_minimum_required(VERSION 3.10)
project(ogre-base)
include(ExternalProject)
include(ProcessorCount)
set(CUSTOM_OPTS -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_SOURCE_DIR}/ogre-sdk -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_SOURCE_DIR}/ogre-sdk -DBUILD_SHARED_LIBS=ON)
set(CUSTOM_OPTS_STATIC -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_SOURCE_DIR}/ogre-sdk-static -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_SOURCE_DIR}/ogre-sdk-static -DBUILD_SHARED_LIBS=OFF)
ProcessorCount(numCores)
find_program (MAKE_EXECUTABLE make DOC make REQUIRED)
find_package (PkgConfig)
pkg_check_modules(GFX_LIBS REQUIRED wayland-client wayland-protocols x11)
ExternalProject_Add(zlib-nominizip
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zlib
CMAKE_ARGS -DZLIB_BUILD_STATIC=ON -DZLIB_BUILD_SHARED=OFF -DZLIB_BUILD_MINIZIP=OFF -DMINIZIP_BUILD_SHARED=OFF -DMINIZIP_BUILD_STATIC=OFF -DMINIZIP_ENABLE_BZIP2=OFF ${CUSTOM_OPTS} -DBUILD_SHARED_LIBS=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
)
ExternalProject_Add(zlib
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zlib
CMAKE_ARGS -DZLIB_BUILD_STATIC=ON -DZLIB_BUILD_SHARED=OFF -DZLIB_BUILD_MINIZIP=ON -DMINIZIP_BUILD_SHARED=OFF -DMINIZIP_BUILD_STATIC=OFF -DMINIZIP_ENABLE_BZIP2=OFF ${CUSTOM_OPTS} -DBUILD_SHARED_LIBS=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
DEPENDS zlib-nominizip
)
ExternalProject_Add(zlib-static-nominizip
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zlib
CMAKE_ARGS -DZLIB_BUILD_STATIC=ON -DZLIB_BUILD_SHARED=OFF -DZLIB_BUILD_MINIZIP=OFF -DMINIZIP_BUILD_SHARED=OFF -DMINIZIP_BUILD_STATIC=ON -DMINIZIP_ENABLE_BZIP2=OFF ${CUSTOM_OPTS_STATIC}
-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
)
ExternalProject_Add(zlib-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zlib
CMAKE_ARGS -DZLIB_BUILD_STATIC=ON -DZLIB_BUILD_SHARED=OFF -DZLIB_BUILD_MINIZIP=ON -DMINIZIP_BUILD_SHARED=OFF -DMINIZIP_BUILD_STATIC=ON -DMINIZIP_ENABLE_BZIP2=OFF ${CUSTOM_OPTS_STATIC}
-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
DEPENDS zlib-static-nominizip
)
ExternalProject_Add(jpeg-turbo
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libjpeg-turbo
CMAKE_ARGS -DENABLE_SHARED=FALSE -DENABLE_STATIC=TRUE
-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
${CUSTOM_OPTS}
)
ExternalProject_Add(jpeg-turbo-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libjpeg-turbo
CMAKE_ARGS -DENABLE_SHARED=FALSE -DENABLE_STATIC=TRUE
-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
${CUSTOM_OPTS_STATIC}
)
ExternalProject_Add(libpng
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libpng
CMAKE_ARGS -DPNG_SHARED=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
${CUSTOM_OPTS}
DEPENDS zlib
)
ExternalProject_Add(libpng-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libpng
CMAKE_ARGS -DPNG_SHARED=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE
${CUSTOM_OPTS_STATIC}
DEPENDS zlib-static
)
ExternalProject_Add(pugixml
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/pugixml
CMAKE_ARGS ${CUSTOM_OPTS}
)
ExternalProject_Add(pugixml-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/pugixml
CMAKE_ARGS ${CUSTOM_OPTS_STATIC}
)
set(FFMPEG_CONFIG_OPTS
--disable-shared --enable-static --disable-programs --disable-gcrypt --disable-gpl --disable-nonfree
--disable-libopus --disable-libpulse --disable-alsa
)
ExternalProject_Add(ffmpeg
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg
CONFIGURE_COMMAND env PKG_CONFIG_PATH=${CMAKE_CURRENT_SOURCE_DIR}/ogre-sdk/lib/pkgconfig
"<SOURCE_DIR>/configure" --prefix=${CMAKE_CURRENT_SOURCE_DIR}/ogre-sdk ${FFMPEG_CONFIG_OPTS}
BUILD_COMMAND "${MAKE_EXECUTABLE}" -j${numCores} all
INSTALL_COMMAND "${MAKE_EXECUTABLE}" -j${numCores} all
DEPENDS libpng jpeg-turbo
)
ExternalProject_Add(ffmpeg-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg
CONFIGURE_COMMAND env PKG_CONFIG_PATH=${CMAKE_CURRENT_SOURCE_DIR}/ogre-sdk-static/lib/pkgconfig
"<SOURCE_DIR>/configure" --prefix=${CMAKE_CURRENT_SOURCE_DIR}/ogre-sdk-static ${FFMPEG_CONFIG_OPTS}
BUILD_COMMAND "${MAKE_EXECUTABLE}" -j${numCores} all
INSTALL_COMMAND "${MAKE_EXECUTABLE}" -j${numCores} all
DEPENDS libpng-static jpeg-turbo-static
)
ExternalProject_Add(assimp
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/assimp
CMAKE_ARGS -DASSIMP_BUILD_ZLIB=ON -DBUILD_SHARED_LIBS=OFF ${CUSTOM_OPTS}
DEPENDS zlib jpeg-turbo pugixml
)
ExternalProject_Add(assimp-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/assimp
CMAKE_ARGS -DASSIMP_BUILD_ZLIB=ON -DBUILD_SHARED_LIBS=OFF ${CUSTOM_OPTS_STATIC}
DEPENDS zlib-static jpeg-turbo-static pugixml-static
)
set(SDL_COMMON_OPTIONS
-DSDL_SHARED=OFF -DSDL_STATIC=ON -DSDL_STATIC_PIC=ON -DSDL_X11=ON
-DSDL_X11_SHARED=OFF -DSDL_X11_XCURSOR=ON -DSDL_X11_XDBE=ON
-DSDL_X11_XINPUT=ON -DSDL_X11_XRANDR=ON -DSDL_X11_XSCRNSAVER=ON -DSDL_X11_XSHAPE=ON -DSDL_WAYLAND=OFF
-DSDL_WAYLAND_SHARED=OFF -DSDL_WAYLAND_LIBDECOR=OFF -DSDL_WAYLAND_LIBDECOR_SHARED=OFF -DSDL_KMSDRM=OFF -DSDL_KMSDRM_SHARED=OFF -DSDL_OPENGL=ON
-DSDL_OPENGLES=ON -DSDL_VULKAN=ON -DSDL_ALSA=OFF -DSDL_ALSA_SHARED=OFF -DSDL_PIPEWIRE=ON -DSDL_PIPEWIRE_SHARED=OFF
-DSDL_PULSEAUDIO=OFF -DSDL_PULSEAUDIO_SHARED=OFF -DSDL_RPATH=OFF -DSDL_HIDAPI=ON -DSDL_HIDAPI_JOYSTICK=ON
)
ExternalProject_Add(SDL
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SDL
CMAKE_ARGS
${SDL_COMMON_OPTIONS}
${CUSTOM_OPTS}
DEPENDS libpng jpeg-turbo
)
ExternalProject_Add(SDL-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SDL
CMAKE_ARGS
${SDL_COMMON_OPTIONS}
${CUSTOM_OPTS_STATIC}
DEPENDS libpng-static jpeg-turbo-static
)
ExternalProject_Add(SPIRV-Headers
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SPIRV-Headers
CMAKE_ARGS ${CUSTOM_OPTS}
)
ExternalProject_Add(SPIRV-Tools
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SPIRV-Tools
CMAKE_ARGS ${CUSTOM_OPTS} -DBUILD_SHARED_LIBS=OFF -DSPIRV_TOOLS_BUILD_STATIC=ON -DSPIRV_WERROR=OFF
-DSPIRV_TOOLS_LIBRARY_TYPE=STATIC
-DSPIRV-Headers_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/ogre-sdk
DEPENDS SPIRV-Headers
)
ExternalProject_Add(SPIRV-Headers-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SPIRV-Headers
CMAKE_ARGS ${CUSTOM_OPTS_STATIC}
)
ExternalProject_Add(SPIRV-Tools-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SPIRV-Tools
CMAKE_ARGS ${CUSTOM_OPTS} -DBUILD_SHARED_LIBS=OFF -DSPIRV_TOOLS_BUILD_STATIC=ON -DSPIRV_WERROR=OFF
-DSPIRV_TOOLS_LIBRARY_TYPE=STATIC
-DSPIRV-Headers_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/ogre-sdk-static
DEPENDS SPIRV-Headers-static
)
ExternalProject_Add(glslang
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/glslang
CMAKE_ARGS ${CUSTOM_OPTS} -DBUILD_SHARED_LIBS=OFF -DENABLE_HLSL=TRUE -DENABLE_SPIRV=TRUE
DEPENDS SPIRV-Tools
)
ExternalProject_Add(glslang-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/glslang
CMAKE_ARGS ${CUSTOM_OPTS_STATIC} -DBUILD_SHARED_LIBS=OFF -DENABLE_HLSL=TRUE -DENABLE_SPIRV=TRUE
DEPENDS SPIRV-Tools-static
)
#ExternalProject_Add(SPIRV-Tools
# SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SPIRV-Tools
# CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF -DSPIRV_TOOLS_BUILD_STATIC=ON -DSPIRV_TOOLS_LIBRARY_TYPE=STATIC ${CUSTOM_OPTS}
#)
set(OGRE_COMMON_OPTIONS
-DOGRE_BUILD_RENDERSYSTEM_D3D9=FALSE
-DOGRE_BUILD_RENDERSYSTEM_D3D11=FALSE
-DOGRE_BUILD_RENDERSYSTEM_GL3PLUS=TRUE
-DOGRE_BUILD_RENDERSYSTEM_GL=TRUE
-DOGRE_BUILD_RENDERSYSTEM_GLES2=TRUE
-DOGRE_BUILD_RENDERSYSTEM_METAL=FALSE
-DOGRE_BUILD_RENDERSYSTEM_VULKAN=FALSE
-DOGRE_BUILD_PLUGIN_GLSLANG=TRUE
-DOGRE_BUILD_COMPONENT_OVERLAY=TRUE
-DOGRE_BUILD_PLUGIN_DOT_SCENE=TRUE
-DOGRE_GLSUPPORT_USE_EGL:BOOL=FALSE
-DOGRE_INSTALL_DEPENDENCIES:BOOL=TRUE
# -DASSIMP_BUILD_ASSIMP_TOOLS=OFF
# -DOGRE_CONFIG_THREADS=3
# -DOGRE_CONFIG_THREAD_PROVIDER="std"
)
ExternalProject_Add(ogre
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogre
CMAKE_ARGS
${OGRE_COMMON_OPTIONS}
-DASSIMP_BUILD_ASSIMP_TOOLS=ON
-DOGRE_STATIC=FALSE
${CUSTOM_OPTS}
DEPENDS ffmpeg jpeg-turbo libpng SDL assimp glslang
)
ExternalProject_Add(ogre-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogre
CMAKE_ARGS
${OGRE_COMMON_OPTIONS}
-DASSIMP_BUILD_ASSIMP_TOOLS=ON
-DOGRE_STATIC=TRUE
${CUSTOM_OPTS_STATIC}
DEPENDS ffmpeg-static jpeg-turbo-static libpng-static SDL-static assimp-static glslang-static
)
ExternalProject_Add(ogre-procedural
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogre-procedural
CMAKE_ARGS -DOgreProcedural_BUILD_DOCS:BOOL=FALSE
-DOgreProcedural_STATIC=FALSE -DOgreProcedural_BUILD_SAMPLES=TRUE
${CUSTOM_OPTS} -DCMAKE_BUILD_TYPE=Debug
DEPENDS ogre
)
ExternalProject_Add(ogre-procedural-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogre-procedural
CMAKE_ARGS -DOgreProcedural_BUILD_DOCS:BOOL=FALSE
-DOgreProcedural_STATIC=TRUE -DOgreProcedural_BUILD_SAMPLES=TRUE
${CUSTOM_OPTS_STATIC} -DCMAKE_BUILD_TYPE=Release
DEPENDS ogre-static
)
ExternalProject_Add(ogre-pagedgeometry
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogre-pagedgeometry
CMAKE_ARGS
${CUSTOM_OPTS}
DEPENDS ogre
)
ExternalProject_Add(ogre-pagedgeometry-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogre-pagedgeometry
CMAKE_ARGS
${CUSTOM_OPTS_STATIC}
DEPENDS ogre-static
)
ExternalProject_Add(ogrewater
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogrewater
CMAKE_ARGS
${CUSTOM_OPTS}
INSTALL_COMMAND ""
DEPENDS SDL zlib ogre
)
ExternalProject_Add(ogrewater-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogrewater
CMAKE_ARGS
${CUSTOM_OPTS_STATIC}
INSTALL_COMMAND ""
DEPENDS SDL-static zlib-static ogre-static
)
ExternalProject_Add(miniaudio
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/miniaudio
CMAKE_ARGS -DMINIAUDIO_BUILD_EXAMPLES=ON -DMINIAUDIO_BUILD_TESTS=ON MINIAUDIO_FORCE_C89=ON -DSDL2_LIBRARY=SDL2_LIBRARY-NOTFOUND
${CUSTOM_OPTS} -DBUILD_SHARED_LIBS=OFF
)
ExternalProject_Add(miniaudio-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/miniaudio
CMAKE_ARGS -DMINIAUDIO_BUILD_EXAMPLES=ON -DMINIAUDIO_BUILD_TESTS=ON MINIAUDIO_FORCE_C89=ON -DSDL2_LIBRARY=SDL2_LIBRARY-NOTFOUND
${CUSTOM_OPTS_STATIC} -DBUILD_SHARED_LIBS=OFF
)
ExternalProject_Add(flecs
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/flecs
CMAKE_ARGS -DFLECS_STATIC=ON -DFLECS_SHARED=OFF -DFLECS_PIC=ON -DFLECS_TESTS=OFF
${CUSTOM_OPTS}
)
ExternalProject_Add(flecs-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/flecs
CMAKE_ARGS -DFLECS_STATIC=ON -DFLECS_SHARED=OFF -DFLECS_PIC=ON -DFLECS_TESTS=OFF
${CUSTOM_OPTS_STATIC}
)
ExternalProject_Add(world2
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogre-projects/world2
CMAKE_ARGS ${CUSTOM_OPTS}
DEPENDS ogre ogre-procedural ogre-pagedgeometry flecs SDL miniaudio
)
ExternalProject_Add(world2-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogre-projects/world2
CMAKE_ARGS ${CUSTOM_OPTS_STATIC}
DEPENDS ogre-static ogre-procedural-static ogre-pagedgeometry-static flecs-static SDL-static miniaudio-static
)