commit:     7da3d02dd4d346906f0bdf7cd0df04f542706bb8
Author:     Sebastian Parborg <darkdefende <AT> gmail <DOT> com>
AuthorDate: Tue Apr 27 23:42:58 2021 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Jun 10 00:19:16 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7da3d02d

media-libs/osl: bump to 1.12.0.2

Signed-off-by: Sebastian Parborg <darkdefende <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 media-libs/osl/Manifest                         |   1 +
 media-libs/osl/files/osl-1.12.0.2-llvm-11.patch |  29 +++
 media-libs/osl/files/osl-1.12.0.2-llvm-12.patch | 240 ++++++++++++++++++++++++
 media-libs/osl/osl-1.12.0.2.ebuild              |  88 +++++++++
 4 files changed, 358 insertions(+)

diff --git a/media-libs/osl/Manifest b/media-libs/osl/Manifest
index db1eb09c70c..d880f7d1d0f 100644
--- a/media-libs/osl/Manifest
+++ b/media-libs/osl/Manifest
@@ -1,2 +1,3 @@
 DIST osl-1.10.13.tar.gz 13551733 BLAKE2B 
63b687ec46bd5334a7d0c00cfa5bf5243003e16adf2637fba648a75f98c10103c7c4b5fa1d091ab43b0929f85523b0fa79589eca56686490ee61c48069593767
 SHA512 
bc39fcf80878160807e35c52654a2993a7d33b3ab2fbf567ec50d0b23636a19064830afab5734f1e39276c77e843bbfe1d6b10a64fd4ebe69b17c8faa5378201
 DIST osl-1.11.9.0.tar.gz 14137334 BLAKE2B 
db68cb77d6af56e711b897371a4fe9386bf1a62625f9fa04012e9ec22346933fe3b0112301a8ad17ac6dd9c01c2a8e00c6d6e557d947870fd39bb3dec1443fd8
 SHA512 
f93bce0b29ff2da022372d81f2709c7db68e011c07c346b679c4b5ce05425f7eda8904779d7ea460817639e6be78a8c77272d71a3ffa8b068cfaab7572eb2e65
+DIST osl-1.12.0.2.tar.gz 16205315 BLAKE2B 
543d120e981f093c121b4abb4c36d7d8c127555c8986df931a3040136e3ae3d84d602d73395604cd492f8d192e408f585cd6579fe6283c974778f0b99092985d
 SHA512 
cdcd1fb348f6f2f1f889ed1895bac545e10b73e700959bc09b1df2a40cd86e69ba43a1dfaf26dedaec9c23aa17b74428d4bccc9cf7f4d27ae2fc5152adb6c010

diff --git a/media-libs/osl/files/osl-1.12.0.2-llvm-11.patch 
b/media-libs/osl/files/osl-1.12.0.2-llvm-11.patch
new file mode 100644
index 00000000000..a47bcd4e47d
--- /dev/null
+++ b/media-libs/osl/files/osl-1.12.0.2-llvm-11.patch
@@ -0,0 +1,29 @@
+From 84c26c0baab8f071270d0fef23175c24d738c73c Mon Sep 17 00:00:00 2001
+From: Brecht Van Lommel <[email protected]>
+Date: Mon, 19 Apr 2021 13:49:22 +0200
+Subject: [PATCH] Fix crash generating closure functions calls with LLVM 11
+
+Generating code for prepare_closure and gen_closure was crashing.
+The code now matches the implementation of the removed LLVM function.
+
+Signed-off-by: Brecht Van Lommel <[email protected]>
+---
+ src/liboslexec/llvm_util.cpp | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/liboslexec/llvm_util.cpp b/src/liboslexec/llvm_util.cpp
+index 445f64000..3d468de27 100644
+--- a/src/liboslexec/llvm_util.cpp
++++ b/src/liboslexec/llvm_util.cpp
+@@ -3430,8 +3430,9 @@ LLVM_Util::call_function (llvm::Value *func, 
cspan<llvm::Value *> args)
+ #endif
+     //llvm_gen_debug_printf (std::string("start ") + std::string(name));
+ #if OSL_LLVM_VERSION >= 110
+-    OSL_DASSERT(llvm::isa<llvm::Function>(func));
+-    llvm::Value *r = builder().CreateCall(llvm::cast<llvm::Function>(func), 
llvm::ArrayRef<llvm::Value *>(args.data(), args.size()));
++    llvm::Value* r = builder().CreateCall(
++        
llvm::cast<llvm::FunctionType>(func->getType()->getPointerElementType()), func,
++        llvm::ArrayRef<llvm::Value*>(args.data(), args.size()));
+ #else
+     llvm::Value *r = builder().CreateCall (func, llvm::ArrayRef<llvm::Value 
*>(args.data(), args.size()));
+ #endif

diff --git a/media-libs/osl/files/osl-1.12.0.2-llvm-12.patch 
b/media-libs/osl/files/osl-1.12.0.2-llvm-12.patch
new file mode 100644
index 00000000000..dcf9ac863f7
--- /dev/null
+++ b/media-libs/osl/files/osl-1.12.0.2-llvm-12.patch
@@ -0,0 +1,240 @@
+commit f76ea6220a5f0d59f5f43d3d6d526f1fd09b90f7
+Author: Euan Haahr <[email protected]>
+Date:   Fri Feb 5 22:51:14 2021 +0000
+
+    Various fixes for LLVM 12 compatibility (1351)
+    
+    Removed use of options.PrintMachineCode since this has been removed as
+    of llvm 12. Converted uses of DebugLoc::get to DILocation::get since
+    it has been deprecated and removed as of llvm 12.
+    
+    PrintMachine code will only be used if llvm is lower than version 12.
+    TODO: Needs to be re-added in the new way for LLVM12. (LG just doesn't
+    have time to figure this out right now.)
+    
+    Pass adjustment as various things have been deprecated or changed
+    names. (LG)
+    
+    Signed-off-by: Euan Haahr <[email protected]>
+    Signed-off-by: Larry Gritz <[email protected]>
+
+diff --git a/src/liboslexec/llvm_passes.h b/src/liboslexec/llvm_passes.h
+index 4ec3489c..7c14fc76 100644
+--- a/src/liboslexec/llvm_passes.h
++++ b/src/liboslexec/llvm_passes.h
+@@ -73,9 +73,14 @@ public:
+         // 16 bit and 32 bit native mask representation to be passed as a
+         // livein.
+         m_native_mask_type = llvm::FixedVectorType::get(llvm_type_int32, 
WidthT);
++#  if OSL_LLVM_VERSION >= 112
++        m_wide_zero_initializer = llvm::ConstantDataVector::getSplat(WidthT,
++                llvm::ConstantInt::get(M.getContext(), llvm::APInt(32,0)));
++#  else
+         m_wide_zero_initializer = llvm::ConstantVector::getSplat(
+                                     llvm::ElementCount(WidthT, false),
+                                     llvm::ConstantInt::get (M.getContext(), 
llvm::APInt(32,0)));
++#  endif
+ #else
+         m_llvm_mask_type = llvm::VectorType::get(llvm_type_bool, WidthT);
+         m_native_mask_type = llvm::VectorType::get(llvm_type_int32, WidthT);
+@@ -341,9 +346,8 @@ public:
+         // of the mask promotion will always be correct here.  Should 16 bit
+         // support be needed, this pass could be extended.
+         m_native_mask_type = llvm::FixedVectorType::get(llvm_type_int32, 
WidthT);
+-        m_wide_zero_initializer = llvm::ConstantVector::getSplat(
+-                                    llvm::ElementCount(WidthT, false),
+-                                    llvm::ConstantInt::get (M.getContext(), 
llvm::APInt(32,0)));
++        m_wide_zero_initializer = llvm::ConstantDataVector::getSplat(WidthT,
++                llvm::ConstantInt::get(M.getContext(), llvm::APInt(32,0)));
+ #else
+         m_llvm_mask_type = llvm::VectorType::get(llvm_type_bool, WidthT);
+         m_native_mask_type = llvm::VectorType::get(llvm_type_int32, WidthT);
+diff --git a/src/liboslexec/llvm_util.cpp b/src/liboslexec/llvm_util.cpp
+index fed8c5ec..b2a02f61 100644
+--- a/src/liboslexec/llvm_util.cpp
++++ b/src/liboslexec/llvm_util.cpp
+@@ -20,6 +20,7 @@
+ #include "llvm_passes.h"
+ 
+ #include <llvm/InitializePasses.h>
++#include <llvm/Pass.h>
+ #include <llvm/IR/Constant.h>
+ #include <llvm/IR/Constants.h>
+ #include <llvm/IR/DebugInfo.h>
+@@ -59,6 +60,7 @@
+ #include <llvm/Analysis/BasicAliasAnalysis.h>
+ #include <llvm/Analysis/TypeBasedAliasAnalysis.h>
+ #include <llvm/Analysis/TargetTransformInfo.h>
++#include <llvm/IR/Function.h>
+ #include <llvm/IR/Verifier.h>
+ #include <llvm/Target/TargetMachine.h>
+ #include <llvm/Target/TargetOptions.h>
+@@ -74,10 +76,9 @@
+ #include <llvm/Transforms/Scalar/GVN.h>
+ #include <llvm/Transforms/Utils.h>
+ 
+-
+-#include <llvm/Pass.h>
+-#include <llvm/IR/Function.h>
+-#include <llvm/Support/raw_ostream.h>
++#if OSL_LLVM_VERSION >= 120
++#include <llvm/CodeGen/Passes.h>
++#endif
+ 
+ // additional includes for PTX generation
+ #include <llvm/Transforms/Utils/SymbolRewriter.h>
+@@ -129,6 +130,11 @@ static bool setup_done = false;
+ static std::unique_ptr<std::vector<std::shared_ptr<LLVMMemoryManager> >> 
jitmm_hold;
+ static int jit_mem_hold_users = 0;
+ 
++
++#if OSL_LLVM_VERSION >= 120
++llvm::raw_os_ostream raw_cout(std::cout);
++#endif
++
+ }; // end anon namespace
+ 
+ 
+@@ -701,7 +707,8 @@ LLVM_Util::debug_pop_function()
+     // that has been finalized, point it back to the compilation unit
+     OSL_ASSERT(m_builder);
+     OSL_ASSERT(m_builder->getCurrentDebugLocation().get() != nullptr);
+-    
m_builder->SetCurrentDebugLocation(llvm::DebugLoc::get(static_cast<unsigned 
int>(1),
++    
m_builder->SetCurrentDebugLocation(llvm::DILocation::get(getCurrentDebugScope()->getContext(),
++                static_cast<unsigned int>(1),
+                 static_cast<unsigned int>(0), /* column?  we don't know it, 
may be worth tracking through osl->oso*/
+                 getCurrentDebugScope()));
+ 
+@@ -776,7 +783,8 @@ LLVM_Util::debug_set_location(ustring sourcefile, int 
sourceline)
+     }
+     if (newDebugLocation) {
+         llvm::DebugLoc debug_location =
+-                llvm::DebugLoc::get(static_cast<unsigned int>(sourceline),
++                llvm::DILocation::get(sp->getContext(),
++                        static_cast<unsigned int>(sourceline),
+                         static_cast<unsigned int>(0), /* column?  we don't 
know it, may be worth tracking through osl->oso*/
+                         sp,
+                         inlineSite);
+@@ -958,7 +966,8 @@ LLVM_Util::new_builder (llvm::BasicBlock *block)
+     m_builder = new IRBuilder (block);
+     if (this->debug_is_enabled()) {
+         OSL_ASSERT(getCurrentDebugScope());
+-        
m_builder->SetCurrentDebugLocation(llvm::DebugLoc::get(static_cast<unsigned 
int>(1),
++        
m_builder->SetCurrentDebugLocation(llvm::DILocation::get(getCurrentDebugScope()->getContext(),
++                static_cast<unsigned int>(1),
+                 static_cast<unsigned int>(0), /* column?  we don't know it, 
may be worth tracking through osl->oso*/
+                 getCurrentDebugScope()));
+     }
+@@ -1386,7 +1395,13 @@ LLVM_Util::make_jit_execengine (std::string *err,
+     options.RelaxELFRelocations = false;
+     //options.DebuggerTuning = llvm::DebuggerKind::GDB;
+ 
++    // TODO: Find equivalent function for PrintMachineCode post LLVM 12
++#if OSL_LLVM_VERSION < 120
++    // This option disappeared from the TargetOptions struct in LLVM 12.
++    // It is instead accomplished with a MachineFunctionPrinterPass.
+     options.PrintMachineCode = dumpasm();
++#endif
++
+     engine_builder.setTargetOptions(options);
+ 
+     detect_cpu_features(requestedISA, !jit_fma());
+@@ -1715,14 +1730,14 @@ LLVM_Util::setup_optimization_passes (int optlevel, 
bool target_host)
+ 
+         mpm.add(llvm::createReassociatePass());
+         mpm.add(llvm::createConstantPropagationPass());
+-        mpm.add(llvm::createDeadInstEliminationPass());
++        mpm.add(llvm::createDeadCodeEliminationPass());
+         mpm.add(llvm::createCFGSimplificationPass());
+ 
+         mpm.add(llvm::createPromoteMemoryToRegisterPass());
+         mpm.add(llvm::createAggressiveDCEPass());
+ 
+         mpm.add(llvm::createInstructionCombiningPass());
+-        mpm.add(llvm::createDeadInstEliminationPass());
++        mpm.add(llvm::createDeadCodeEliminationPass());
+ 
+         mpm.add(llvm::createJumpThreadingPass());
+         mpm.add(llvm::createSROAPass());
+@@ -1746,8 +1761,10 @@ LLVM_Util::setup_optimization_passes (int optlevel, 
bool target_host)
+ 
+         // Eliminate and remove as much as possible up front
+         mpm.add(llvm::createReassociatePass());
++#if OSL_LLVM_VERSION < 120
+         mpm.add(llvm::createConstantPropagationPass());
+-        mpm.add(llvm::createDeadInstEliminationPass());
++#endif
++        mpm.add(llvm::createDeadCodeEliminationPass());
+         mpm.add(llvm::createCFGSimplificationPass());
+ 
+         mpm.add(llvm::createPromoteMemoryToRegisterPass());
+@@ -1784,7 +1801,7 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool 
target_host)
+         mpm.add(llvm::createInstructionCombiningPass());
+ 
+         mpm.add(llvm::createPromoteMemoryToRegisterPass());
+-        mpm.add(llvm::createDeadInstEliminationPass());
++        mpm.add(llvm::createDeadCodeEliminationPass());
+ 
+         mpm.add(llvm::createGlobalDCEPass());
+         mpm.add(llvm::createConstantMergePass());
+@@ -1803,8 +1820,10 @@ LLVM_Util::setup_optimization_passes (int optlevel, 
bool target_host)
+         mpm.add(llvm::createLowerExpectIntrinsicPass());
+ 
+         mpm.add(llvm::createReassociatePass());
++#if OSL_LLVM_VERSION < 120
+         mpm.add(llvm::createConstantPropagationPass());
+-        mpm.add(llvm::createDeadInstEliminationPass());
++#endif
++        mpm.add(llvm::createDeadCodeEliminationPass());
+         mpm.add(llvm::createCFGSimplificationPass());
+ 
+         mpm.add(llvm::createPromoteMemoryToRegisterPass());
+@@ -1814,7 +1833,7 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool 
target_host)
+         // optimizations, should attempt to reduce the number of times it is
+         // executed, if at all
+         mpm.add(llvm::createInstructionCombiningPass());
+-        mpm.add(llvm::createDeadInstEliminationPass());
++        mpm.add(llvm::createDeadCodeEliminationPass());
+ 
+         mpm.add(llvm::createSROAPass());
+         mpm.add(llvm::createInstructionCombiningPass());
+@@ -1822,7 +1841,16 @@ LLVM_Util::setup_optimization_passes (int optlevel, 
bool target_host)
+         mpm.add(llvm::createPromoteMemoryToRegisterPass());
+         mpm.add(llvm::createGlobalOptimizerPass());
+         mpm.add(llvm::createReassociatePass());
++#if OSL_LLVM_VERSION < 120
+         mpm.add(llvm::createIPConstantPropagationPass());
++#else
++        // createIPConstantPropagationPass disappeared with LLVM 12.
++        // Comments in their PR indicate that IPSCCP is better, but I don't
++        // know if that means such a pass should be *right here*. I leave it
++        // to others who use opt==13 to continue to curate this particular
++        // list of passes.
++        mpm.add(llvm::createIPSCCPPass());
++#endif
+ 
+         mpm.add(llvm::createDeadArgEliminationPass());
+         mpm.add(llvm::createInstructionCombiningPass());
+@@ -1831,8 +1859,10 @@ LLVM_Util::setup_optimization_passes (int optlevel, 
bool target_host)
+         mpm.add(llvm::createPostOrderFunctionAttrsLegacyPass());
+         mpm.add(llvm::createReversePostOrderFunctionAttrsPass());
+         mpm.add(llvm::createFunctionInliningPass());
++#if OSL_LLVM_VERSION < 120
+         mpm.add(llvm::createConstantPropagationPass());
+-        mpm.add(llvm::createDeadInstEliminationPass());
++#endif
++        mpm.add(llvm::createDeadCodeEliminationPass());
+         mpm.add(llvm::createCFGSimplificationPass());
+ 
+         mpm.add(llvm::createArgumentPromotionPass());
+@@ -1845,8 +1875,9 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool 
target_host)
+         mpm.add(llvm::createTailCallEliminationPass());
+ 
+         mpm.add(llvm::createFunctionInliningPass());
++#if OSL_LLVM_VERSION < 120
+         mpm.add(llvm::createConstantPropagationPass());
+-
++#endif
+ 
+         mpm.add(llvm::createIPSCCPPass());
+         mpm.add(llvm::createDeadArgEliminationPass());

diff --git a/media-libs/osl/osl-1.12.0.2.ebuild 
b/media-libs/osl/osl-1.12.0.2.ebuild
new file mode 100644
index 00000000000..a312fa3bc86
--- /dev/null
+++ b/media-libs/osl/osl-1.12.0.2.ebuild
@@ -0,0 +1,88 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+inherit cmake llvm toolchain-funcs
+
+# check this on updates
+LLVM_MAX_SLOT=12
+
+DESCRIPTION="Advanced shading language for production GI renderers"
+HOMEPAGE="http://opensource.imageworks.com/?p=osl";
+SRC_URI="https://github.com/imageworks/OpenShadingLanguage/archive/Release-${PV}-dev.tar.gz
 -> ${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+X86_CPU_FEATURES=(
+       sse2:sse2 sse3:sse3 ssse3:ssse3 sse4_1:sse4.1 sse4_2:sse4.2
+       avx:avx avx2:avx2 avx512f:avx512f f16c:f16c
+)
+CPU_FEATURES=( ${X86_CPU_FEATURES[@]/#/cpu_flags_x86_} )
+
+IUSE="doc partio qt5 test ${CPU_FEATURES[@]%:*}"
+
+RDEPEND="
+       dev-libs/boost:=
+       dev-libs/pugixml
+       media-libs/openexr:=
+       media-libs/openimageio:=
+       <=sys-devel/clang-13:=
+       sys-libs/zlib:=
+       dev-python/pybind11
+       partio? ( media-libs/partio )
+       qt5? (
+               dev-qt/qtcore:5
+               dev-qt/qtgui:5
+               dev-qt/qtwidgets:5
+       )
+"
+
+DEPEND="${RDEPEND}"
+BDEPEND="
+       sys-devel/bison
+       sys-devel/flex
+       virtual/pkgconfig
+"
+
+PATCHES=(
+       ${FILESDIR}/${P}-llvm-11.patch
+       ${FILESDIR}/${P}-llvm-12.patch
+)
+
+# Restricting tests as Make file handles them differently
+RESTRICT="test"
+
+S="${WORKDIR}/OpenShadingLanguage-Release-${PV}-dev"
+
+llvm_check_deps() {
+       has_version -r "sys-devel/clang:${LLVM_SLOT}"
+}
+
+src_configure() {
+       local cpufeature
+       local mysimd=()
+       for cpufeature in "${CPU_FEATURES[@]}"; do
+               use "${cpufeature%:*}" && mysimd+=("${cpufeature#*:}")
+       done
+
+       # If no CPU SIMDs were used, completely disable them
+       [[ -z ${mysimd} ]] && mysimd=("0")
+
+       local gcc=$(tc-getCC)
+       # LLVM needs CPP11. Do not disable.
+       local mycmakeargs=(
+               -DCMAKE_CXX_STANDARD=14
+               -DCMAKE_INSTALL_DOCDIR="share/doc/${PF}"
+               -DINSTALL_DOCS=$(usex doc)
+               -DLLVM_STATIC=OFF
+               -DOSL_BUILD_TESTS=$(usex test)
+               -DSTOP_ON_WARNING=OFF
+               -DUSE_PARTIO=$(usex partio)
+               -DUSE_QT=$(usex qt5)
+               -DUSE_SIMD="$(IFS=","; echo "${mysimd[*]}")"
+       )
+
+       cmake_src_configure
+}

Reply via email to