# Copyright 2026 Anoncheg1 # Distributed under the terms of the GNU General Public License v2 EAPI=8 inherit cmake virtualx COMMIT="58477f3eb9a2208dad9f3dae31b98a4b75fcff29" DESCRIPTION="A modern cross-platform graphics and game engine library" HOMEPAGE="https://github.com/Try/Tempest" SRC_URI="https://github.com/Try/Tempest/archive/${COMMIT}.tar.gz -> ${P}.tar.gz" S="${WORKDIR}/Tempest-${COMMIT}" KEYWORDS="~amd64 ~x86" LICENSE="MIT" SLOT="0" IUSE="audio test vulkan" # Was not tested: FEATURES=test USE=test emerge tempest RESTRICT="mirror bindist !test? ( test )" REQUIRED_USE="test? ( vulkan )" # audio? ( =media-libs/openal-1.25.2 ) DEPEND=" dev-libs/stb media-libs/libpng:0= media-libs/libsquish sys-libs/zlib:= x11-libs/libX11 x11-libs/libXcursor vulkan? ( >=media-libs/vulkan-loader-1.4.304.0[X] >=dev-util/vulkan-headers-1.4.304.0 ) " RDEPEND="${DEPEND}" BDEPEND=" dev-util/glslang virtual/pkgconfig test? ( dev-cpp/gtest x11-base/xorg-server[xvfb] ) " CMAKE_USE_DIR="${S}/Engine" src_prepare() { cmake_src_prepare # 1. Fix installation target directory paths for Gentoo lib/lib64 architecture sed -i \ -e 's/LIBRARY DESTINATION lib/LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/g' \ -e 's/ARCHIVE DESTINATION lib/ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/g' \ Engine/CMakeLists.txt || die "sed failed to fix installation paths" # 2. Strip macOS hardcoded toolpaths for glslangValidator sed -i 's|find_program(GLSLANGVALIDATOR glslangValidator "/opt/homebrew/bin")|find_program(GLSLANGVALIDATOR glslangValidator REQUIRED)|g' \ Engine/CMakeLists.txt || die "sed failed to fix glslangValidator path" # 3. Fix Vulkan linkage for Gentoo: remove hardcoded SDK paths and use standard find_package sed -i '/ENV{VULKAN_SDK}/d' Engine/CMakeLists.txt || die "sed failed to clear VULKAN_SDK paths" # Inject find_package(Vulkan REQUIRED) right before the Vulkan block sed -i '/^### Vulkan$/i find_package(Vulkan REQUIRED)' Engine/CMakeLists.txt || die "Failed to inject find_package(Vulkan)" # Replace bare 'vulkan' and 'vulkan-1' with the proper CMake imported target sed -i 's/target_link_libraries(${PROJECT_NAME} PRIVATE vulkan-1)/target_link_libraries(${PROJECT_NAME} PUBLIC Vulkan::Vulkan)/g' Engine/CMakeLists.txt || die sed -i 's/target_link_libraries(${PROJECT_NAME} PRIVATE vulkan)/target_link_libraries(${PROJECT_NAME} PUBLIC Vulkan::Vulkan)/g' Engine/CMakeLists.txt || die # 5. Strip broken legacy PRIVATE configuration blocks on third-party targets sed -i '/target_compile_options(zlibstatic PRIVATE/d' Engine/CMakeLists.txt || die sed -i '/target_include_directories(png_static/d' Engine/CMakeLists.txt || die sed -i '/target_link_libraries(png_static PRIVATE/d' Engine/CMakeLists.txt || die # sed -i '/target_compile_options(OpenAL PRIVATE/d' Engine/CMakeLists.txt || die # 6. Neutralize bundled thirdparty subdirectories : > Engine/thirdparty/zlib/CMakeLists.txt || die : > Engine/thirdparty/libpng/CMakeLists.txt || die : > Engine/thirdparty/squish/CMakeLists.txt || die # if use audio; then # : > Engine/thirdparty/openal-soft/CMakeLists.txt || die # fi # 7. Inject target mappings early using system dependencies cat << 'EOF' > "${T}/early_mappings.cmake" find_package(ZLIB REQUIRED) add_library(zlibstatic INTERFACE) target_link_libraries(zlibstatic INTERFACE ZLIB::ZLIB) find_package(PNG REQUIRED) add_library(png_static INTERFACE) target_link_libraries(png_static INTERFACE PNG::PNG) find_path(SQUISH_INCLUDE_DIR NAMES squish.h HINTS "${EPREFIX}/usr/include/squish" REQUIRED) find_library(SQUISH_LIBRARY NAMES squish HINTS "${EPREFIX}/usr/lib" "${EPREFIX}/usr/lib64" REQUIRED) add_library(squish-tempest INTERFACE) target_link_libraries(squish-tempest INTERFACE ${SQUISH_LIBRARY}) target_include_directories(squish-tempest INTERFACE ${SQUISH_INCLUDE_DIR}) EOF sed -i '/### zlib/i include("'${T}/early_mappings.cmake'")' Engine/CMakeLists.txt || die "Failed to inject early mappings" # 8. Fix internal header relative paths ebegin "Fixing include paths in headers" sed -i 's|#include *"../|#include "./|g' Engine/include/Tempest/* || die "Failed to fix header include paths" eend $? } src_configure() { local mycmakeargs=( -DTEMPEST_BUILD_SHARED=ON -DTEMPEST_BUILD_AUDIO=$(usex audio) -DTEMPEST_BUILD_VULKAN=$(usex vulkan) -DTEMPEST_BUILD_METAL=OFF -DTEMPEST_BUILD_DIRECTX12=OFF -DCMAKE_INCLUDE_PATH="${EPREFIX}/usr/include/stb" ) cmake_src_configure if use test; then local mycmakeargs=( -DTEMPEST_BUILD_AUDIO=$(usex audio) -DTEMPEST_BUILD_VULKAN=$(usex vulkan) -DCMAKE_CXX_STANDARD=20 -DCMAKE_INCLUDE_PATH="${EPREFIX}/usr/include/stb" ) BUILD_DIR="${WORKDIR}/${P}_build_tests" \ CMAKE_USE_DIR="${S}/Tests/tests" \ cmake_src_configure fi } src_compile() { cmake_src_compile if use test; then BUILD_DIR="${WORKDIR}/${P}_build_tests" \ cmake_src_compile fi } src_install() { cmake_src_install local temp_hdr="${T}/engine_headers" mkdir -p "${temp_hdr}" || die pushd Engine >/dev/null || die local dir for dir in *; do if [[ -d "${dir}" && "${dir}" != "include" ]]; then cp -r "${dir}" "${temp_hdr}/" || die fi done popd >/dev/null || die find "${temp_hdr}" -type f ! -name "*.h" -delete || die insinto /usr/include/Tempest doins -r "${temp_hdr}"/* } src_test() { BUILD_DIR="${WORKDIR}/${P}_build_tests" \ virtx cmake_src_test }