diff options
12 files changed, 244 insertions, 55 deletions
diff --git a/graphics/openshadinglanguage/Makefile b/graphics/openshadinglanguage/Makefile index 9f22b81497f7..3860727649fe 100644 --- a/graphics/openshadinglanguage/Makefile +++ b/graphics/openshadinglanguage/Makefile @@ -3,7 +3,7 @@ PORTNAME= openshadinglanguage PORTVERSION= 1.3.3 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= graphics devel MAINTAINER= FreeBSD@Shaneware.biz @@ -11,12 +11,12 @@ COMMENT= Advanced shading language for production GI renderers LICENSE= BSD -BUILD_DEPENDS= llvm>=3.1:${PORTSDIR}/devel/llvm \ - flex>=2.5.37:${PORTSDIR}/textproc/flex -LIB_DEPENDS= boost_thread:${PORTSDIR}/devel/boost-libs \ - IlmImf:${PORTSDIR}/graphics/OpenEXR \ - OpenImageIO:${PORTSDIR}/graphics/openimageio -RUN_DEPENDS= llvm>=3.1:${PORTSDIR}/devel/llvm +BUILD_DEPENDS= llvm-config33:${PORTSDIR}/devel/llvm33 \ + clang33>=3.3_3:${PORTSDIR}/lang/clang33 +LIB_DEPENDS= libboost_thread.so:${PORTSDIR}/devel/boost-libs \ + libIlmImf.so:${PORTSDIR}/graphics/OpenEXR \ + libOpenImageIO.so:${PORTSDIR}/graphics/openimageio +RUN_DEPENDS= llvm-config33:${PORTSDIR}/devel/llvm33 USE_GITHUB= yes GH_ACCOUNT= imageworks @@ -26,27 +26,30 @@ GH_COMMIT= 18671dc WRKSRC= ${WRKDIR}/imageworks-OpenShadingLanguage-${GH_COMMIT}/src -CMAKE_ARGS= -DFLEX_EXECUTABLE:STRING=${LOCALBASE}/bin/flex \ - -DUSE_TBB:BOOL=OFF -CXXFLAGS+= -I${LOCALBASE}/include/flex +CMAKE_ARGS= -DLLVM_CONFIG:STRING="${LOCALBASE}/bin/llvm-config33" USE_LDCONFIG= yes USES= bison cmake:outsource -NO_STAGE= yes -.include <bsd.port.pre.mk> +.include <bsd.port.options.mk> -.if ${OSVERSION} < 900000 -BUILD_DEPENDS+= clang:${PORTSDIR}/lang/clang +.if ${ARCH} == i386 && ! ${MACHINE_CPU:Mi586} +IGNORE= CPUTYPE must be i586 or higher in /etc/make.conf .endif -.if ${ARCH} == i386 -CFLAGS+= -march=i586 +.if ${OSVERSION} < 1000033 +BUILD_DEPENDS+= flex>=2.5.37:${PORTSDIR}/textproc/flex +CMAKE_ARGS+= -DFLEX_EXECUTABLE:STRING=${LOCALBASE}/bin/flex +CXXFLAGS+= -I${LOCALBASE}/include/flex .endif +post-patch: + @${REINPLACE_CMD} -e 's,/bin/bash,/bin/sh,' \ + ${WRKSRC}/liboslexec/serialize-bc.bash + post-install: .for LNAME in oslcomp oslexec oslquery testshade - cd ${PREFIX}/lib && ${MV} -f lib${LNAME}.so lib${LNAME}.so.1 - cd ${PREFIX}/lib && ${LN} -sf lib${LNAME}.so.1 lib${LNAME}.so + ${MV} ${STAGEDIR}${PREFIX}/lib/lib${LNAME}.so ${STAGEDIR}${PREFIX}/lib/lib${LNAME}.so.1 + ${LN} -s lib${LNAME}.so.1 ${STAGEDIR}${PREFIX}/lib/lib${LNAME}.so .endfor -.include <bsd.port.post.mk> +.include <bsd.port.mk> diff --git a/graphics/openshadinglanguage/files/patch-CMakeLists.txt b/graphics/openshadinglanguage/files/patch-CMakeLists.txt new file mode 100644 index 000000000000..4964a159b8c3 --- /dev/null +++ b/graphics/openshadinglanguage/files/patch-CMakeLists.txt @@ -0,0 +1,86 @@ +--- CMakeLists.txt.orig 2013-07-12 01:01:18.000000000 +0200 ++++ CMakeLists.txt 2013-11-05 21:12:26.000000000 +0100 +@@ -9,10 +9,8 @@ + set (OSO_FILE_VERSION_MAJOR 1) + set (OSO_FILE_VERSION_MINOR 0) + +-cmake_minimum_required (VERSION 2.6) +-if (NOT CMAKE_VERSION VERSION_LESS 2.8.4) +- cmake_policy (SET CMP0017 NEW) +-endif () ++cmake_minimum_required (VERSION 2.8.7) ++cmake_policy (SET CMP0017 NEW) + set (CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE) + message (STATUS "Project source dir = ${PROJECT_SOURCE_DIR}") + message (STATUS "Project build dir = ${CMAKE_BINARY_DIR}") +@@ -21,6 +19,8 @@ + message (FATAL_ERROR "Not allowed to run in-source build!") + endif () + ++include (CheckCXXSymbolExists) ++ + if (NOT CMAKE_BUILD_TYPE) + set (CMAKE_BUILD_TYPE "Release") + endif () +@@ -42,12 +42,11 @@ + OUTPUT_STRIP_TRAILING_WHITESPACE) + message (STATUS "Using gcc ${GCC_VERSION} as the compiler") + endif () +-if (NOT CMAKE_COMPILER_IS_CLANG) +- string (REGEX MATCH clang CMAKE_COMPILER_IS_CLANG ${CMAKE_CXX_COMPILER}) +- if (CMAKE_COMPILER_IS_CLANG) +- set (CMAKE_COMPILER_IS_CLANG 1) +- message (STATUS "Using clang as the compiler") +- endif () ++ ++message (STATUS "CMAKE_CXX_COMPILER_ID is ${CMAKE_CXX_COMPILER_ID}") ++if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") ++ set (CMAKE_COMPILER_IS_CLANG 1) ++ message (STATUS "Using clang as the compiler") + endif () + + ## turn on more detailed warnings and consider warnings as errors +@@ -121,6 +120,10 @@ + endif () + endif () + ++# Try to detect libc++, in which case we should force use of Boost ++# Wave (because that avoids a nonstandard g++ extension in the other ++# code path). ++check_cxx_symbol_exists(_LIBCPP_VERSION string OSL_SYSTEM_HAS_LIBCPP) + + set (VERBOSE OFF CACHE BOOL "Print lots of messages while compiling") + set (BUILDSTATIC OFF CACHE BOOL "Build static library instead of shared") +@@ -129,12 +132,16 @@ + "Use an externally built shared library version of the pugixml library") + set (PUGIXML_HOME "" CACHE STRING "Hint about where to find external PugiXML library") + if (WIN32) +- set (USE_BOOST_WAVE ON CACHE BOOL "Use Boost Wave as preprocessor") + set (USE_LLVM_BITCODE OFF CACHE BOOL "Generate embedded LLVM bitcode") + else () +- set (USE_BOOST_WAVE OFF CACHE BOOL "Use Boost Wave as preprocessor") + set (USE_LLVM_BITCODE ON CACHE BOOL "Generated embedded LLVM bitcode") + endif () ++if (WIN32 OR OSL_SYSTEM_HAS_LIBCPP) ++ set (USE_BOOST_WAVE ON CACHE BOOL "Use Boost Wave as preprocessor") ++else () ++ set (USE_BOOST_WAVE OFF CACHE BOOL "Use Boost Wave as preprocessor") ++endif () ++ + set (USE_PARTIO ON CACHE BOOL "Use Partio if found") + + if (LLVM_NAMESPACE) +@@ -149,6 +156,13 @@ + add_definitions ("${EXTRA_CPP_DEFINITIONS}") + endif() + ++if (USE_BOOST_WAVE) ++ add_definitions ("-DUSE_BOOST_WAVE") ++endif () ++ ++if (CMAKE_COMPILER_IS_CLANG AND OSL_SYSTEM_HAS_LIBCPP) ++ message (STATUS "Using libc++") ++endif () + + set (CMAKE_MODULE_PATH + "${PROJECT_SOURCE_DIR}/cmake/modules" diff --git a/graphics/openshadinglanguage/files/patch-cmake_platform.cmake b/graphics/openshadinglanguage/files/patch-cmake_platform.cmake deleted file mode 100644 index 5cfc64c1bf2f..000000000000 --- a/graphics/openshadinglanguage/files/patch-cmake_platform.cmake +++ /dev/null @@ -1,12 +0,0 @@ ---- ./cmake/platform.cmake.orig 2013-07-19 15:08:25.918110424 +0930 -+++ ./cmake/platform.cmake 2013-07-19 15:11:10.254109449 +0930 -@@ -32,6 +32,9 @@ - elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") - set (platform "FreeBSD") - set (CXXFLAGS "${CXXFLAGS} -DFREEBSD") -+ if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386") -+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=i586") -+ endif() - else () - string (TOLOWER ${CMAKE_SYSTEM_NAME} platform) - endif () diff --git a/graphics/openshadinglanguage/files/patch-liboslcomp__CMakeLists.txt b/graphics/openshadinglanguage/files/patch-liboslcomp__CMakeLists.txt new file mode 100644 index 000000000000..23352762a228 --- /dev/null +++ b/graphics/openshadinglanguage/files/patch-liboslcomp__CMakeLists.txt @@ -0,0 +1,9 @@ +--- ./liboslcomp/CMakeLists.txt.orig 2013-07-12 08:31:18.000000000 +0930 ++++ ./liboslcomp/CMakeLists.txt 2013-11-03 18:07:25.644118883 +1030 +@@ -29,6 +29,3 @@ + INSTALL ( TARGETS oslcomp LIBRARY DESTINATION lib ) + endif () + +-IF ( USE_BOOST_WAVE ) +- ADD_DEFINITIONS ( -DUSE_BOOST_WAVE ) +-ENDIF () diff --git a/graphics/openshadinglanguage/files/patch-liboslcomp__oslcomp.cpp b/graphics/openshadinglanguage/files/patch-liboslcomp__oslcomp.cpp new file mode 100644 index 000000000000..b055de1aad37 --- /dev/null +++ b/graphics/openshadinglanguage/files/patch-liboslcomp__oslcomp.cpp @@ -0,0 +1,20 @@ +--- ./liboslcomp/oslcomp.cpp.orig 2013-07-12 08:31:18.000000000 +0930 ++++ ./liboslcomp/oslcomp.cpp 2013-11-03 18:07:25.646119281 +1030 +@@ -32,7 +32,7 @@ + #include <fstream> + #include <cstdio> + #include <streambuf> +-#ifdef __GNUC__ ++#if defined(__GNUC__) && !defined(_LIBCPP_VERSION) && !defined(USE_BOOST_WAVE) + # include <ext/stdio_filebuf.h> + #endif + #include <cstdio> +@@ -268,7 +268,7 @@ + // std::cout << "cpp command:\n>" << cppcommand << "<\n"; + FILE *cpppipe = popen (cppcommand.c_str(), "r"); + +-#ifdef __GNUC__ ++#if defined(__GNUC__) && !defined(_LIBCPP_VERSION) + __gnu_cxx::stdio_filebuf<char> fb (cpppipe, std::ios::in); + #else + std::filebuf fb (cpppipe); diff --git a/graphics/openshadinglanguage/files/patch-liboslexec__CMakeLists.txt b/graphics/openshadinglanguage/files/patch-liboslexec__CMakeLists.txt deleted file mode 100644 index a836cccb81ae..000000000000 --- a/graphics/openshadinglanguage/files/patch-liboslexec__CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ ---- ./liboslexec/CMakeLists.txt.orig 2013-02-15 11:22:42.000000000 +1030 -+++ ./liboslexec/CMakeLists.txt 2013-02-17 07:11:28.388647893 +1030 -@@ -95,7 +95,7 @@ - -I${Boost_INCLUDE_DIRS} -I${TBB_INCLUDES} -O3 -S -emit-llvm -o ${llvm_asm} ${llvm_src} - - COMMAND ${LLVM_DIRECTORY}/bin/llvm-as -f -o ${llvm_bc} ${llvm_asm} -- COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/serialize-bc.bash ${llvm_bc} ${llvm_bc_cpp} -+ COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/serialize-bc.bash ${llvm_bc} ${llvm_bc_cpp} - MAIN_DEPENDENCY ${llvm_src} - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/serialize-bc.bash - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) diff --git a/graphics/openshadinglanguage/files/patch-liboslexec__constfold.cpp b/graphics/openshadinglanguage/files/patch-liboslexec__constfold.cpp new file mode 100644 index 000000000000..32257b5a57f8 --- /dev/null +++ b/graphics/openshadinglanguage/files/patch-liboslexec__constfold.cpp @@ -0,0 +1,42 @@ +--- ./liboslexec/constfold.cpp.orig 2013-07-12 08:31:18.000000000 +0930 ++++ ./liboslexec/constfold.cpp 2013-11-03 18:07:25.648118961 +1030 +@@ -882,19 +882,22 @@ + { + Opcode &op (rop.inst()->ops()[opnum]); + // Symbol &R (*rop.inst()->argsymbol(op.firstarg()+0)); +- Symbol &Str (*rop.inst()->argsymbol(op.firstarg()+1)); +- Symbol &Results (*rop.inst()->argsymbol(op.firstarg()+2)); +- Symbol &Sep (*rop.inst()->argsymbol(op.firstarg()+3)); +- Symbol &Maxsplit (*rop.inst()->argsymbol(op.firstarg()+4)); +- if (Str.is_constant() && Sep.is_constant() && Maxsplit.is_constant()) { ++ Symbol &Str (*rop.opargsym (op, 1)); ++ Symbol &Results (*rop.opargsym (op, 2)); ++ Symbol *Sep (rop.opargsym (op, 3)); ++ Symbol *Maxsplit (rop.opargsym (op, 4)); ++ if (Str.is_constant() && (!Sep || Sep->is_constant()) && ++ (!Maxsplit || Maxsplit->is_constant())) { + // The split string, separator string, and maxsplit are all constants. + // Compute the results with Strutil::split. + int resultslen = Results.typespec().arraylength(); +- int maxsplit = Imath::clamp (*(int *)Maxsplit.data(), 0, resultslen); ++ int maxsplit = Maxsplit ? *(int *)Maxsplit->data() : resultslen; ++ maxsplit = std::min (maxsplit, resultslen); + std::vector<std::string> splits; ++ ustring sep = Sep ? (*(ustring *)Sep->data()) : ustring(""); + Strutil::split ((*(ustring *)Str.data()).string(), splits, +- (*(ustring *)Sep.data()).string(), maxsplit); +- int n = std::min (maxsplit, (int)splits.size()); ++ sep.string(), maxsplit); ++ int n = std::min (std::max(0,maxsplit), (int)splits.size()); + // Temporarily stash the index of the symbol holding results + int resultsarg = rop.inst()->args()[op.firstarg()+2]; + // Turn the 'split' into a straight assignment of the return value... +@@ -1337,7 +1340,7 @@ + *(const float *)Y.data() == 2.0f) { + // Turn x^2 into x*x, even if x is not constant + static ustring kmul("mul"); +- op.reset (kmul, 2); ++ op.reset (kmul, 3); + rop.inst()->args()[op.firstarg()+2] = rop.inst()->args()[op.firstarg()+1]; + return 1; + } diff --git a/graphics/openshadinglanguage/files/patch-liboslexec__dictionary.cpp b/graphics/openshadinglanguage/files/patch-liboslexec__dictionary.cpp new file mode 100644 index 000000000000..140cff69b567 --- /dev/null +++ b/graphics/openshadinglanguage/files/patch-liboslexec__dictionary.cpp @@ -0,0 +1,11 @@ +--- ./liboslexec/dictionary.cpp.orig 2013-07-12 08:31:18.000000000 +0930 ++++ ./liboslexec/dictionary.cpp 2013-11-03 18:07:25.650119434 +1030 +@@ -50,7 +50,7 @@ + namespace pvt { // OSL::pvt + + +-#ifndef USE_EXTERNAL_PUGIXML ++#ifdef USING_OIIO_PUGI + namespace pugi = OIIO::pugi; + #endif + diff --git a/graphics/openshadinglanguage/files/patch-liboslexec__llvm_gen.cpp b/graphics/openshadinglanguage/files/patch-liboslexec__llvm_gen.cpp new file mode 100644 index 000000000000..fded2ed86124 --- /dev/null +++ b/graphics/openshadinglanguage/files/patch-liboslexec__llvm_gen.cpp @@ -0,0 +1,11 @@ +--- ./liboslexec/llvm_gen.cpp.orig 2013-07-12 08:31:18.000000000 +0930 ++++ ./liboslexec/llvm_gen.cpp 2013-11-03 18:07:25.652119256 +1030 +@@ -3310,7 +3310,7 @@ + Symbol& Results = *rop.opargsym (op, 2); + DASSERT (R.typespec().is_int() && Str.typespec().is_string() && + Results.typespec().is_array() && +- Results.typespec().simpletype() == TypeDesc::TypeString); ++ Results.typespec().is_string_based()); + + llvm::Value *args[5]; + args[0] = rop.llvm_load_value (Str); diff --git a/graphics/openshadinglanguage/files/patch-liboslexec__llvm_instance.cpp b/graphics/openshadinglanguage/files/patch-liboslexec__llvm_instance.cpp new file mode 100644 index 000000000000..3808fd86d4d6 --- /dev/null +++ b/graphics/openshadinglanguage/files/patch-liboslexec__llvm_instance.cpp @@ -0,0 +1,11 @@ +--- ./liboslexec/llvm_instance.cpp.orig 2013-07-12 08:31:18.000000000 +0930 ++++ ./liboslexec/llvm_instance.cpp 2013-11-03 18:07:25.654119237 +1030 +@@ -809,7 +809,7 @@ + { + // Make a layer function: void layer_func(ShaderGlobals*, GroupData*) + // Note that the GroupData* is passed as a void*. +- std::string unique_layer_name = Strutil::format ("%s_%d", inst()->layername().c_str(), inst()->id()); ++ std::string unique_layer_name = Strutil::format ("%s_%d", inst()->layername(), inst()->id()); + + m_layer_func = llvm::cast<llvm::Function>(m_llvm_module->getOrInsertFunction(unique_layer_name, + llvm_type_void(), llvm_type_sg_ptr(), diff --git a/graphics/openshadinglanguage/files/patch-liboslexec__llvm_ops.cpp b/graphics/openshadinglanguage/files/patch-liboslexec__llvm_ops.cpp deleted file mode 100644 index d5d1ea974f91..000000000000 --- a/graphics/openshadinglanguage/files/patch-liboslexec__llvm_ops.cpp +++ /dev/null @@ -1,13 +0,0 @@ ---- ./liboslexec/llvm_ops.cpp.orig 2013-02-17 07:12:22.136610427 +1030 -+++ ./liboslexec/llvm_ops.cpp 2013-02-17 07:13:26.175610292 +1030 -@@ -127,8 +127,8 @@ - - #if defined(__FreeBSD__) - #include <sys/param.h> --#if __FreeBSD_version < 803000 --// freebsd before 8.3 doesn't have log2f - use OIIO lib replacement -+#if __FreeBSD_version < 802502 -+// freebsd before 8.2-STABLE doesn't have log2f - use OIIO lib replacement - using OIIO::log2f; - #endif - #endif diff --git a/graphics/openshadinglanguage/files/patch-liboslexec__runtimeoptimize.h b/graphics/openshadinglanguage/files/patch-liboslexec__runtimeoptimize.h new file mode 100644 index 000000000000..a67b1b2d4494 --- /dev/null +++ b/graphics/openshadinglanguage/files/patch-liboslexec__runtimeoptimize.h @@ -0,0 +1,32 @@ +--- ./liboslexec/runtimeoptimize.h.orig 2013-07-12 08:31:18.000000000 +0930 ++++ ./liboslexec/runtimeoptimize.h 2013-11-03 18:07:25.656119123 +1030 +@@ -345,7 +345,8 @@ + /// Helper: return the ptr to the symbol that is the argnum-th + /// argument to the given op. + Symbol *opargsym (const Opcode &op, int argnum) { +- return inst()->argsymbol (op.firstarg()+argnum); ++ return (argnum < op.nargs()) ? ++ inst()->argsymbol (op.firstarg()+argnum) : NULL; + } + + /// Create an llvm function for the whole shader group, JIT it, +@@ -826,7 +827,7 @@ + /// + llvm::BasicBlock *llvm_exit_instance_block () { + if (! m_exit_instance_block) { +- std::string name = Strutil::format ("%s_%d_exit_", inst()->layername().c_str(), inst()->id()); ++ std::string name = Strutil::format ("%s_%d_exit_", inst()->layername(), inst()->id()); + m_exit_instance_block = llvm_new_basic_block (name); + } + return m_exit_instance_block; +@@ -887,8 +888,8 @@ + int m_local_unknown_message_sent; ///< Non-const setmessage in this inst + std::vector<ustring> m_local_messages_sent; ///< Messages set in this inst + std::vector<int> m_bblockids; ///< Basic block IDs for each op +- std::vector<bool> m_in_conditional; ///< Whether each op is in a cond +- std::vector<bool> m_in_loop; ///< Whether each op is in a loop ++ std::vector<char> m_in_conditional; ///< Whether each op is in a cond ++ std::vector<char> m_in_loop; ///< Whether each op is in a loop + std::vector<int> m_layer_remap; ///< Remapping of layer ordering + std::set<int> m_layers_already_run; ///< List of layers run + int m_num_used_layers; ///< Number of layers actually used |