shaderc: add recipe

This commit is contained in:
Gerasim Troeglazov
2024-09-13 09:53:56 +10:00
parent cf621e17a3
commit 02bb01f06c
2 changed files with 265 additions and 0 deletions

View File

@@ -0,0 +1,163 @@
From 03055348b744b66c3cd76f8e2ab925aa91481e38 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Fri, 13 Sep 2024 08:39:05 +1000
Subject: Add patches for submodules
diff --git a/third_party/abseil_cpp.patch b/third_party/abseil_cpp.patch
new file mode 100644
index 0000000..cf94bc8
--- /dev/null
+++ b/third_party/abseil_cpp.patch
@@ -0,0 +1,26 @@
+diff --git a/absl/base/internal/sysinfo.cc b/absl/base/internal/sysinfo.cc
+index 79eaba3e..970cfdb8 100644
+--- a/absl/base/internal/sysinfo.cc
++++ b/absl/base/internal/sysinfo.cc
+@@ -42,6 +42,10 @@
+ #include <lwp.h>
+ #endif
+
++#ifdef __HAIKU__
++#include <OS.h>
++#endif
++
+ #if defined(__myriad2__)
+ #include <rtems.h>
+ #endif
+@@ -452,6 +456,10 @@ pid_t GetTID() { return getthrid(); }
+
+ pid_t GetTID() { return static_cast<pid_t>(_lwp_self()); }
+
++#elif defined(__HAIKU__)
++
++pid_t GetTID() { return static_cast<pid_t>(find_thread(NULL)); }
++
+ #elif defined(__native_client__)
+
+ pid_t GetTID() {
diff --git a/third_party/glslang.patch b/third_party/glslang.patch
new file mode 100644
index 0000000..a14d4f7
--- /dev/null
+++ b/third_party/glslang.patch
@@ -0,0 +1,75 @@
+diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
+index 66808812..8c0263d0 100644
+--- a/SPIRV/CMakeLists.txt
++++ b/SPIRV/CMakeLists.txt
+@@ -82,7 +82,7 @@ add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS})
+ add_library(glslang::SPIRV ALIAS SPIRV)
+ set_target_properties(SPIRV PROPERTIES
+ FOLDER glslang
+- POSITION_INDEPENDENT_CODE ON
++ POSITION_INDEPENDENT_CODE OFF
+ VERSION "${GLSLANG_VERSION}"
+ SOVERSION "${GLSLANG_VERSION_MAJOR}")
+ target_include_directories(SPIRV PUBLIC
+@@ -96,7 +96,7 @@ if (ENABLE_SPVREMAPPER)
+ add_library(glslang::SPVRemapper ALIAS SPVRemapper)
+ set_target_properties(SPVRemapper PROPERTIES
+ FOLDER glslang
+- POSITION_INDEPENDENT_CODE ON
++ POSITION_INDEPENDENT_CODE OFF
+ VERSION "${GLSLANG_VERSION}"
+ SOVERSION "${GLSLANG_VERSION_MAJOR}")
+ endif()
+diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
+index 8d4b1e9c..1001c5de 100644
+--- a/glslang/CMakeLists.txt
++++ b/glslang/CMakeLists.txt
+@@ -50,7 +50,7 @@ endif()
+ add_library(GenericCodeGen STATIC
+ GenericCodeGen/CodeGen.cpp
+ GenericCodeGen/Link.cpp)
+-set_property(TARGET GenericCodeGen PROPERTY POSITION_INDEPENDENT_CODE ON)
++set_property(TARGET GenericCodeGen PROPERTY POSITION_INDEPENDENT_CODE OFF)
+ set_property(TARGET GenericCodeGen PROPERTY FOLDER glslang)
+
+ ################################################################################
+@@ -131,7 +131,7 @@ if(ENABLE_HLSL)
+ endif()
+
+ add_library(MachineIndependent STATIC ${MACHINEINDEPENDENT_SOURCES} ${MACHINEINDEPENDENT_HEADERS})
+-set_property(TARGET MachineIndependent PROPERTY POSITION_INDEPENDENT_CODE ON)
++set_property(TARGET MachineIndependent PROPERTY POSITION_INDEPENDENT_CODE OFF)
+ set_property(TARGET MachineIndependent PROPERTY FOLDER glslang)
+
+ if (NOT MSVC)
+@@ -172,7 +172,7 @@ add_library(glslang ${LIB_TYPE} ${GLSLANG_SOURCES} ${GLSLANG_HEADERS})
+ add_library(glslang::glslang ALIAS glslang)
+ set_target_properties(glslang PROPERTIES
+ FOLDER glslang
+- POSITION_INDEPENDENT_CODE ON
++ POSITION_INDEPENDENT_CODE OFF
+ VERSION "${GLSLANG_VERSION}"
+ SOVERSION "${GLSLANG_VERSION_MAJOR}")
+ target_link_libraries(glslang PRIVATE OSDependent MachineIndependent)
+@@ -207,7 +207,7 @@ set_target_properties(glslang-default-resource-limits PROPERTIES
+ VERSION "${GLSLANG_VERSION}"
+ SOVERSION "${GLSLANG_VERSION_MAJOR}"
+ FOLDER glslang
+- POSITION_INDEPENDENT_CODE ON)
++ POSITION_INDEPENDENT_CODE OFF)
+
+ target_include_directories(glslang-default-resource-limits PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
+diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt
+index 0c549756..48f6f73d 100644
+--- a/glslang/OSDependent/Unix/CMakeLists.txt
++++ b/glslang/OSDependent/Unix/CMakeLists.txt
+@@ -33,7 +33,7 @@
+
+ add_library(OSDependent STATIC ossource.cpp ../osinclude.h)
+ set_property(TARGET OSDependent PROPERTY FOLDER glslang)
+-set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE ON)
++set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE OFF)
+
+ # Link pthread
+ set(THREADS_PREFER_PTHREAD_FLAG ON)
diff --git a/third_party/spirv-tools.patch b/third_party/spirv-tools.patch
new file mode 100644
index 0000000..d04759e
--- /dev/null
+++ b/third_party/spirv-tools.patch
@@ -0,0 +1,35 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 0ba173f1..46b7f5a6 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -33,7 +33,7 @@ set(SPIRV_TOOLS "SPIRV-Tools")
+
+ include(GNUInstallDirs)
+
+-set(CMAKE_POSITION_INDEPENDENT_CODE ON)
++set(CMAKE_POSITION_INDEPENDENT_CODE OFF)
+
+ # Require at least C++17
+ if(NOT CMAKE_CXX_STANDARD)
+@@ -74,6 +74,8 @@ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
+ add_definitions(-DSPIRV_OPENBSD)
+ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia")
+ add_definitions(-DSPIRV_FUCHSIA)
++elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Haiku")
++ add_definitions(-DSPIRV_HAIKU)
+ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "GNU")
+ add_definitions(-DSPIRV_GNU)
+ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "QNX")
+diff --git a/source/print.cpp b/source/print.cpp
+index f36812ef..faddfe50 100644
+--- a/source/print.cpp
++++ b/source/print.cpp
+@@ -17,7 +17,7 @@
+ #if defined(SPIRV_ANDROID) || defined(SPIRV_LINUX) || defined(SPIRV_MAC) || \
+ defined(SPIRV_IOS) || defined(SPIRV_TVOS) || defined(SPIRV_FREEBSD) || \
+ defined(SPIRV_OPENBSD) || defined(SPIRV_EMSCRIPTEN) || \
+- defined(SPIRV_FUCHSIA) || defined(SPIRV_GNU) || defined(SPIRV_QNX)
++ defined(SPIRV_FUCHSIA) || defined(SPIRV_GNU) || defined(SPIRV_QNX) || defined(SPIRV_HAIKU)
+ namespace spvtools {
+
+ clr::reset::operator const char*() { return "\x1b[0m"; }
--
2.45.2

View File

@@ -0,0 +1,102 @@
SUMMARY="A collection of tools, libraries, and tests for Vulkan shader compilation"
DESCRIPTION="At the moment it includes:
* glslc, a command line compiler for GLSL/HLSL to SPIR-V, and
* libshaderc, a library API for accessing glslc functionality.
Note: The fact that that libshaderc is not named libshaderc_glslc is a quirk of history, and a known \
inconsistency. Changing it would require a significant amount of renaming and breaking of downstream \
projects, so it is being left as is.
glslc wraps around core functionality in glslang and SPIRV-Tools. glslc and its library aims to to provide:
* a command line compiler with GCC- and Clang-like usage, for better integration with build systems
* an API where functionality can be added without breaking existing clients
* an API supporting standard concurrency patterns across multiple operating systems
* increased functionality such as file include support."
HOMEPAGE="https://github.com/google/shaderc"
COPYRIGHT="Google"
LICENSE="Apache v2"
REVISION="1"
SOURCE_URI="https://github.com/google/shaderc/archive/refs/tags/v${portVersion}.tar.gz"
CHECKSUM_SHA256="c25e24d47c911b808266684d9c75ee09a390a5c537c17465eb15ea6905e702c3"
SOURCE_DIR="shaderc-$portVersion"
PATCHES="shaderc-$portVersion.patchset"
ARCHITECTURES="all !x86_gcc2"
SECONDARY_ARCHITECTURES="x86"
commandBinDir=$binDir
commandSuffix=$secondaryArchSuffix
if [ "$targetArchitecture" = x86_gcc2 ]; then
commandSuffix=
commandBinDir=$prefix/bin
fi
PROVIDES="
shaderc$secondaryArchSuffix = $portVersion
cmd:glslc$commandSuffix = $portVersion
lib:libshaderc_shared$secondaryArchSuffix = 1 compat >= 1
"
REQUIRES="
haiku$secondaryArchSuffix
"
PROVIDES_devel="
shaderc${secondaryArchSuffix}_devel = $portVersion
devel:libshaderc_shared$secondaryArchSuffix = 1 compat >= 1
"
REQUIRES_devel="
shaderc$secondaryArchSuffix == $portVersion base
"
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
"
BUILD_PREREQUIRES="
cmd:cmake
cmd:gcc$secondaryArchSuffix
cmd:git
cmd:ninja
cmd:patch
cmd:pkg_config$secondaryArchSuffix
cmd:python3
"
BUILD()
{
utils/git-sync-deps
patch -d third_party/abseil_cpp -f --merge -p1 < third_party/abseil_cpp.patch
patch -d third_party/glslang -f --merge -p1 < third_party/glslang.patch
patch -d third_party/spirv-tools -f --merge -p1 < third_party/spirv-tools.patch
cmake -Bbuild -S. -GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$prefix \
-DCMAKE_INSTALL_BINDIR=$commandBinDir \
-DCMAKE_INSTALL_LIBDIR=$libDir \
-DCMAKE_INSTALL_INCLUDEDIR=$includeDir
ninja -C build $jobArgs
}
INSTALL()
{
ninja -C build install
rm -rf $prefix/include
rm -rf $libDir/*.a
rm -rf $libDir/cmake
rm -rf $libDir/libSPIRV-Tools-shared.so
rm -rf $binDir/spirv* $prefix/bin/glslang*
rm -rf $includeDir/{spirv-tools,re2,gtest,gmock,glslang}
rm -rf $libDir/pkgconfig/re2.pc
rm -rf $libDir/pkgconfig/gtest*.pc
rm -rf $libDir/pkgconfig/gmock*.pc
rm -rf $libDir/pkgconfig/SPIRV*.pc
prepareInstalledDevelLib libshaderc_shared
fixPkgconfig
packageEntries devel \
$developDir
}