Build system using cmake

This commit is contained in:
2025-08-28 02:48:29 +03:00
parent 7f6c5a994b
commit 8727bcb128

224
CMakeLists.txt Normal file
View File

@@ -0,0 +1,224 @@
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 libdrm)
ExternalProject_Add(zlib
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/zlib
CMAKE_ARGS -DZLIB_BUILD_STATIC=OFF -DZLIB_BUILD_SHARED=ON -DZLIB_BUILD_MINIZIP=ON -DMINIZIP_BUILD_SHARED=ON -DMINIZIP_BUILD_STATIC=OFF -DMINIZIP_ENABLE_BZIP2=OFF ${CUSTOM_OPTS}
)
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}
)
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}
DEPENDS zlib-static-nominizip
)
ExternalProject_Add(jpeg-turbo
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libjpeg-turbo
CMAKE_ARGS -DENABLE_SHARED=TRUE -DENABLE_STATIC=FALSE
-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=ON ${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_EXTRA_LIBS "'${GFX_LIBS_LDFLAGS}'")
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 --enable-shared --disable-static --disable-programs
# --extra-libs=${FFMPEG_EXTRA_LIBS}
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 --disable-shared --enable-static --disable-programs
# --extra-libs=${FFMPEG_EXTRA_LIBS}
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
)
ExternalProject_Add(SDL
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SDL
CMAKE_ARGS -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=ON
-DSDL_WAYLAND_SHARED=OFF -DSDL_WAYLAND_LIBDECOR=ON -DSDL_WAYLAND_LIBDECOR_SHARED=OFF -DSDL_KMSDRM=ON -DSDL_KMSDRM_SHARED=OFF -DSDL_OPENGL=ON
-DSDL_OPENGLES=ON -DSDL_VULKAN=ON-DSDL_ALSA=ON -DSDL_ALSA_SHARED=OFF -DSDL_PIPEWIRE=ON -DSDL_PIPEWIRE_SHARED=OFF
-DSDL_PULSEAUDIO=ON -DSDL_PULSEAUDIO_SHARED=OFF -DSDL_RPATH=OFF -DSDL_HIDAPI=ON -DSDL_HIDAPI_JOYSTICK=ON
${CUSTOM_OPTS}
DEPENDS libpng jpeg-turbo
)
ExternalProject_Add(SDL-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SDL
CMAKE_ARGS -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=ON
-DSDL_WAYLAND_SHARED=OFF -DSDL_WAYLAND_LIBDECOR=ON -DSDL_WAYLAND_LIBDECOR_SHARED=OFF -DSDL_KMSDRM=ON -DSDL_KMSDRM_SHARED=OFF -DSDL_OPENGL=ON
-DSDL_OPENGLES=ON -DSDL_VULKAN=ON-DSDL_ALSA=ON -DSDL_ALSA_SHARED=OFF -DSDL_PIPEWIRE=ON -DSDL_PIPEWIRE_SHARED=OFF
-DSDL_PULSEAUDIO=ON -DSDL_PULSEAUDIO_SHARED=OFF -DSDL_RPATH=OFF -DSDL_HIDAPI=ON -DSDL_HIDAPI_JOYSTICK=ON
${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 -DBUILD_SHARED_LIBS=OFF -DSPIRV_TOOLS_BUILD_STATIC=ON -DSPIRV_TOOLS_LIBRARY_TYPE=STATIC ${CUSTOM_OPTS}
#)
ExternalProject_Add(ogre
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogre
CMAKE_ARGS -DOGRE_GLSUPPORT_USE_EGL:BOOL=FALSE -DOGRE_BUILD_RENDERSYSTEM_VULKAN:BOOL=TRUE -DOGRE_INSTALL_DEPENDENCIES:BOOL=TRUE
-DASSIMP_BUILD_ASSIMP_TOOLS=ON
-DOGRE_STATIC=FALSE
${CUSTOM_OPTS}
DEPENDS ffmpeg jpeg-turbo libpng SDL assimp
)
ExternalProject_Add(ogre-static
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ogre
CMAKE_ARGS -DOGRE_GLSUPPORT_USE_EGL:BOOL=FALSE -DOGRE_BUILD_RENDERSYSTEM_VULKAN:BOOL=TRUE -DOGRE_INSTALL_DEPENDENCIES:BOOL=TRUE
-DASSIMP_BUILD_ASSIMP_TOOLS=ON
-DOGRE_STATIC=TRUE
${CUSTOM_OPTS_STATIC}
DEPENDS ffmpeg-static jpeg-turbo-static libpng-static SDL-static assimp-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(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
)
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
)