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 "/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 "/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 )