Skip to content

Commit

Permalink
media-libs/shaderc: new package
Browse files Browse the repository at this point in the history
A collection of tools, libraries and tests for shader compilation.
Includes, for example, a GLSL -> SPIR-V compiler as a shared library,
which is required for the upcoming Vulkan support in media-video/mpv.

Package-Manager: Portage-2.3.40, Repoman-2.3.9
  • Loading branch information
Coacher authored and gyakovlev committed Jun 20, 2018
1 parent 8ab0b9d commit c31d001
Show file tree
Hide file tree
Showing 5 changed files with 236 additions and 0 deletions.
1 change: 1 addition & 0 deletions media-libs/shaderc/Manifest
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DIST shaderc-7a23a01742b88329fb2260eda007172135ba25d4.tar.gz 186291 BLAKE2B e91f57ba5c9339fed17d409b82df284a7897ed8bcabb203a0b8aab439df1d460ff5efdaa49e9140801b1430e831bbdca6920181fd1ddd07d8d35eb17b519246b SHA512 558447bc29b0c7610fda0f6c2a6b66f3c8fc7f2f5e336ad190ae959caa8c7aa1e09d3c2efe0e197cb2cbe1fa97e0c68623ce423c658b29fcbd1f1e1ea4c85f18
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
Original upstream PR: https://github.com/google/shaderc/pull/463

From 21c8be385b3fab5edcb934a6d99f69fd389c4e67 Mon Sep 17 00:00:00 2001
From: Niklas Haas <[email protected]>
Date: Tue, 29 May 2018 07:34:00 +0200
Subject: [PATCH] Fix the link order of libglslang and libHLSL

libglslang depends on libHLSL, so the latter needs to be specified last.
This fixes an issue when trying to build shaderc against system-wide
versions of libglslang/libHLSL, rather than the in-tree versions from
third_party.

Additionally, libshaderc_util also depends on SPIRV-Tools
---
glslc/CMakeLists.txt | 2 +-
libshaderc_util/CMakeLists.txt | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/glslc/CMakeLists.txt b/glslc/CMakeLists.txt
index acf6fb0..0f5d888 100644
--- a/glslc/CMakeLists.txt
+++ b/glslc/CMakeLists.txt
@@ -18,7 +18,7 @@ add_library(glslc STATIC
shaderc_default_compile_options(glslc)
target_include_directories(glslc PUBLIC ${glslang_SOURCE_DIR})
target_link_libraries(glslc PRIVATE glslang OSDependent OGLCompiler
- HLSL glslang SPIRV ${CMAKE_THREAD_LIBS_INIT})
+ glslang SPIRV HLSL ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(glslc PRIVATE shaderc_util shaderc)

add_executable(glslc_exe src/main.cc)
diff --git a/libshaderc_util/CMakeLists.txt b/libshaderc_util/CMakeLists.txt
index 873540a..6d0c465 100644
--- a/libshaderc_util/CMakeLists.txt
+++ b/libshaderc_util/CMakeLists.txt
@@ -34,8 +34,8 @@ endif(SHADERC_ENABLE_INSTALL)

find_package(Threads)
target_link_libraries(shaderc_util PRIVATE
- glslang OSDependent OGLCompiler HLSL glslang SPIRV
- SPIRV-Tools-opt ${CMAKE_THREAD_LIBS_INIT})
+ glslang OSDependent OGLCompiler glslang HLSL SPIRV
+ SPIRV-Tools-opt SPIRV-Tools ${CMAKE_THREAD_LIBS_INIT})

shaderc_add_tests(
TEST_PREFIX shaderc_util
15 changes: 15 additions & 0 deletions media-libs/shaderc/metadata.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person">
<email>[email protected]</email>
<name>Coacher</name>
</maintainer>
<maintainer type="project">
<email>[email protected]</email>
<name>Proxy Maintainers</name>
</maintainer>
<upstream>
<remote-id type="github">google/shaderc</remote-id>
</upstream>
</pkgmetadata>
89 changes: 89 additions & 0 deletions media-libs/shaderc/shaderc-2017.2.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=6

EGIT_COMMIT="7a23a01742b88329fb2260eda007172135ba25d4"
MY_P="${PN}-${EGIT_COMMIT}"
PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} )

inherit cmake-multilib python-any-r1

DESCRIPTION="Collection of tools, libraries and tests for shader compilation"
HOMEPAGE="https://github.com/google/shaderc"
SRC_URI="https://github.com/google/shaderc/archive/${EGIT_COMMIT}.tar.gz -> ${MY_P}.tar.gz"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="doc test"

RDEPEND="
dev-util/glslang[${MULTILIB_USEDEP}]
dev-util/spirv-tools[${MULTILIB_USEDEP}]
"
DEPEND="${RDEPEND}
${PYTHON_DEPS}
dev-util/spirv-headers
doc? ( dev-ruby/asciidoctor )
test? (
dev-cpp/gtest
$(python_gen_any_dep 'dev-python/nose[${PYTHON_USEDEP}]')
)
"

# https://github.com/google/shaderc/issues/470
RESTRICT=test

PATCHES=( "${FILESDIR}/${P}-fix-glslang-link-order.patch" )

S="${WORKDIR}/${MY_P}"

python_check_deps() {
if use test; then
has_version --host-root "dev-python/nose[${PYTHON_USEDEP}]"
fi
}

src_prepare() {
cmake_comment_add_subdirectory examples

# Unbundle glslang, spirv-headers, spirv-tools
cmake_comment_add_subdirectory third_party
sed -i \
-e "s|\$<TARGET_FILE:spirv-dis>|${EPREFIX}/usr/bin/spirv-dis|" \
glslc/test/CMakeLists.txt || die

# Disable git versioning
sed -i -e '/build-version/d' glslc/CMakeLists.txt || die

# Manually create build-version.inc as we disabled git versioning
cat <<- EOF > glslc/src/build-version.inc || die
"${P}\n"
"$(best_version dev-util/spirv-tools)\n"
"$(best_version dev-util/glslang)\n"
EOF

cmake-utils_src_prepare
}

multilib_src_configure() {
local mycmakeargs=(
-DSHADERC_SKIP_TESTS="$(usex !test)"
)
cmake-utils_src_configure
}

multilib_src_compile() {
if multilib_is_native_abi && use doc; then
cmake-utils_src_make glslc_doc_README
fi
cmake-utils_src_compile
}

multilib_src_install() {
if multilib_is_native_abi; then
use doc && local HTML_DOCS=( "${BUILD_DIR}/glslc/README.html" )
fi
cmake-utils_src_install
}
85 changes: 85 additions & 0 deletions media-libs/shaderc/shaderc-9999.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=6

PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} )

inherit cmake-multilib python-any-r1 git-r3

DESCRIPTION="Collection of tools, libraries and tests for shader compilation"
HOMEPAGE="https://github.com/google/shaderc"
EGIT_REPO_URI="https://github.com/google/shaderc.git"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS=""
IUSE="doc test"

RDEPEND="
~dev-util/glslang-9999[${MULTILIB_USEDEP}]
~dev-util/spirv-tools-9999[${MULTILIB_USEDEP}]
"
DEPEND="${RDEPEND}
${PYTHON_DEPS}
~dev-util/spirv-headers-9999
doc? ( dev-ruby/asciidoctor )
test? (
dev-cpp/gtest
$(python_gen_any_dep 'dev-python/nose[${PYTHON_USEDEP}]')
)
"

# https://github.com/google/shaderc/issues/470
RESTRICT=test

PATCHES=( "${FILESDIR}/${PN}-2017.2-fix-glslang-link-order.patch" )

python_check_deps() {
if use test; then
has_version --host-root "dev-python/nose[${PYTHON_USEDEP}]"
fi
}

src_prepare() {
cmake_comment_add_subdirectory examples

# Unbundle glslang, spirv-headers, spirv-tools
cmake_comment_add_subdirectory third_party
sed -i \
-e "s|\$<TARGET_FILE:spirv-dis>|${EPREFIX}/usr/bin/spirv-dis|" \
glslc/test/CMakeLists.txt || die

# Disable git versioning
sed -i -e '/build-version/d' glslc/CMakeLists.txt || die

# Manually create build-version.inc as we disabled git versioning
cat <<- EOF > glslc/src/build-version.inc || die
"${P}\n"
"$(best_version dev-util/spirv-tools)\n"
"$(best_version dev-util/glslang)\n"
EOF

cmake-utils_src_prepare
}

multilib_src_configure() {
local mycmakeargs=(
-DSHADERC_SKIP_TESTS="$(usex !test)"
)
cmake-utils_src_configure
}

multilib_src_compile() {
if multilib_is_native_abi && use doc; then
cmake-utils_src_make glslc_doc_README
fi
cmake-utils_src_compile
}

multilib_src_install() {
if multilib_is_native_abi; then
use doc && local HTML_DOCS=( "${BUILD_DIR}/glslc/README.html" )
fi
cmake-utils_src_install
}

0 comments on commit c31d001

Please sign in to comment.