From f0702442d9f9cfa7cd4995308eda39d2bb088d8e Mon Sep 17 00:00:00 2001 From: Sergey Lapin Date: Sat, 30 Aug 2025 10:47:25 +0300 Subject: [PATCH] Build optimization --- .gitmodules | 4 ++ CMakeLists.txt | 133 +++++++++++++++++++++++++++++++++++++++---------- SPIRV-Headers | 2 +- SPIRV-Tools | 2 +- build-ogre.sh | 2 + glslang | 2 +- miniaudio | 1 + 7 files changed, 116 insertions(+), 30 deletions(-) create mode 160000 miniaudio diff --git a/.gitmodules b/.gitmodules index 36a0153..b151fb0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -134,3 +134,7 @@ path = flecs url = https://github.com/SanderMertens/flecs branch = master +[submodule "miniaudio"] + path = miniaudio + url = https://github.com/mackron/miniaudio + branch = dev diff --git a/CMakeLists.txt b/CMakeLists.txt index b18d13e..7393a2c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,28 +10,38 @@ 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) +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=OFF -DZLIB_BUILD_SHARED=ON -DZLIB_BUILD_MINIZIP=ON -DMINIZIP_BUILD_SHARED=ON -DMINIZIP_BUILD_STATIC=OFF -DMINIZIP_ENABLE_BZIP2=OFF ${CUSTOM_OPTS} + 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=TRUE -DENABLE_STATIC=FALSE + CMAKE_ARGS -DENABLE_SHARED=FALSE -DENABLE_STATIC=TRUE -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE ${CUSTOM_OPTS} ) @@ -45,7 +55,9 @@ ExternalProject_Add(jpeg-turbo-static ExternalProject_Add(libpng SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libpng - CMAKE_ARGS -DPNG_SHARED=ON ${CUSTOM_OPTS} + CMAKE_ARGS -DPNG_SHARED=OFF + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE + ${CUSTOM_OPTS} DEPENDS zlib ) @@ -67,12 +79,14 @@ ExternalProject_Add(pugixml-static CMAKE_ARGS ${CUSTOM_OPTS_STATIC} ) -set(FFMPEG_EXTRA_LIBS "'${GFX_LIBS_LDFLAGS}'") +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 --enable-shared --disable-static --disable-programs -# --extra-libs=${FFMPEG_EXTRA_LIBS} + "/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 @@ -81,8 +95,7 @@ ExternalProject_Add(ffmpeg 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 --disable-shared --enable-static --disable-programs -# --extra-libs=${FFMPEG_EXTRA_LIBS} + "/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 @@ -100,26 +113,27 @@ ExternalProject_Add(assimp-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 -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 + CMAKE_ARGS + ${SDL_COMMON_OPTIONS} ${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 + CMAKE_ARGS + ${SDL_COMMON_OPTIONS} ${CUSTOM_OPTS_STATIC} DEPENDS libpng-static jpeg-turbo-static ) @@ -129,27 +143,80 @@ ExternalProject_Add(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 -DOGRE_GLSUPPORT_USE_EGL:BOOL=FALSE -DOGRE_BUILD_RENDERSYSTEM_VULKAN:BOOL=TRUE -DOGRE_INSTALL_DEPENDENCIES:BOOL=TRUE + CMAKE_ARGS + ${OGRE_COMMON_OPTIONS} -DASSIMP_BUILD_ASSIMP_TOOLS=ON -DOGRE_STATIC=FALSE ${CUSTOM_OPTS} - DEPENDS ffmpeg jpeg-turbo libpng SDL assimp + DEPENDS ffmpeg jpeg-turbo libpng SDL assimp glslang ) 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 + 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 + DEPENDS ffmpeg-static jpeg-turbo-static libpng-static SDL-static assimp-static glslang-static ) ExternalProject_Add(ogre-procedural @@ -198,6 +265,18 @@ ExternalProject_Add(ogrewater-static 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 @@ -213,12 +292,12 @@ ExternalProject_Add(flecs-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 + 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 + DEPENDS ogre-static ogre-procedural-static ogre-pagedgeometry-static flecs-static SDL-static miniaudio-static ) diff --git a/SPIRV-Headers b/SPIRV-Headers index c8ad050..b2a156e 160000 --- a/SPIRV-Headers +++ b/SPIRV-Headers @@ -1 +1 @@ -Subproject commit c8ad050fcb29e42a2f57d9f59e97488f465c436d +Subproject commit b2a156e1c0434bc8c99aaebba1c7be98be7ac580 diff --git a/SPIRV-Tools b/SPIRV-Tools index 54fc952..b1877de 160000 --- a/SPIRV-Tools +++ b/SPIRV-Tools @@ -1 +1 @@ -Subproject commit 54fc95232ced45f39348c091f6f95545588e350a +Subproject commit b1877de5cd776117050bd42f08d04b52bce16099 diff --git a/build-ogre.sh b/build-ogre.sh index 51d8f79..9e4a7f6 100755 --- a/build-ogre.sh +++ b/build-ogre.sh @@ -283,6 +283,8 @@ build_cmake_stuff clean debug release static ogre-pagedgeometry "" #build_cmake_stuff clean debug release OgreCrowd "-DBUILD_DEMO=OFF" build_cmake_stuff debug release noinstall clean ogrewater "" build_cmake_stuff debug release noinstall clean static ogrewater "" +build_cmake_stuff debug release flecs "-DFLECS_STATIC=ON -DFLECS_SHARED=OFF -DFLECS_PIC=ON -DFLECS_TESTS=OFF" +build_cmake_stuff debug release static flecs "-DFLECS_STATIC=ON -DFLECS_SHARED=OFF -DFLECS_PIC=ON -DFLECS_TESTS=OFF" build_cmake_stuff debug noinstall clean ogre-projects/world2 "" build_cmake_stuff debug noinstall clean static ogre-projects/world2 "-DOGRE_DYNAMIC=OFF" exit 0 diff --git a/glslang b/glslang index 2e24222..c34bb3b 160000 --- a/glslang +++ b/glslang @@ -1 +1 @@ -Subproject commit 2e24222cd9d19e737f8c790a2f485d5ba0d62166 +Subproject commit c34bb3b6c55f6ab084124ad964be95a699700d34 diff --git a/miniaudio b/miniaudio new file mode 160000 index 0000000..70eb06d --- /dev/null +++ b/miniaudio @@ -0,0 +1 @@ +Subproject commit 70eb06d3bdce1ca09e65de33d620f9311a890ee2