The OSL dependency is built with target sm_50 currently, which means that LLVM defaults to generating PTX version 4.0. However, due to an apparent bug in LLVM 20 it still uses instructions that were only introduced in PTX version 6.0. As a result OptiX refuses to load the shadeops PTX with an `OPTIX_ERROR_INVALID_INPUT` error. To fix this, raise the PTX version generated by LLVM to 6.0 for both the shadeops module (which previously used 4.0) and also any generated code (which previously used 5.0) to be safe. PTX version 6.0 was introduced with CUDA 9, so it has pretty long driver backwards compatibility still. This commit contains fixes for the OSL, to fully fix the original report a recompiled OSL libraries would need to land for the affected platforms. Ref #147361 Pull Request: https://projects.blender.org/blender/blender/pulls/147620
176 lines
5.4 KiB
CMake
176 lines
5.4 KiB
CMake
# SPDX-FileCopyrightText: 2017-2022 Blender Authors
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
if(WIN32)
|
|
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES "kernel32${LIBEXT} user32${LIBEXT} gdi32${LIBEXT} winspool${LIBEXT} shell32${LIBEXT} ole32${LIBEXT} oleaut32${LIBEXT} uuid${LIBEXT} comdlg32${LIBEXT} advapi32${LIBEXT} psapi${LIBEXT}")
|
|
set(OSL_CMAKE_LINKER_FLAGS)
|
|
set(OSL_FLEX_BISON -DFLEX_EXECUTABLE=${LIBDIR}/flexbison/win_flex.exe -DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe)
|
|
else()
|
|
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES)
|
|
# llvm-config will add -lmxl2. Make sure it can be found and that no system
|
|
# library is used instead.
|
|
set(OSL_CMAKE_LINKER_FLAGS "-L${LIBDIR}/xml2/lib")
|
|
set(OSL_OPENIMAGEIO_LIBRARY "${LIBDIR}/openimageio/lib/OpenImageIO${SHAREDLIBEXT};${LIBDIR}/openexr/lib/IlmImf${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}")
|
|
|
|
if(APPLE)
|
|
# Explicitly specify Homebrew path, so we don't use the old system one.
|
|
if(BLENDER_PLATFORM_ARM)
|
|
set(OSL_FLEX_BISON -DBISON_EXECUTABLE=/opt/homebrew/opt/bison/bin/bison)
|
|
else()
|
|
set(OSL_FLEX_BISON -DBISON_EXECUTABLE=/usr/local/opt/bison/bin/bison)
|
|
endif()
|
|
else()
|
|
set(OSL_FLEX_BISON)
|
|
endif()
|
|
endif()
|
|
|
|
set(OSL_EXTRA_ARGS
|
|
-DOpenImageIO_ROOT=${LIBDIR}/openimageio/
|
|
-DOSL_BUILD_TESTS=OFF
|
|
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
|
|
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
|
|
${OSL_FLEX_BISON}
|
|
-DCMAKE_CXX_STANDARD_LIBRARIES=${OSL_CMAKE_CXX_STANDARD_LIBRARIES}
|
|
-DCMAKE_EXE_LINKER_FLAGS=${OSL_CMAKE_LINKER_FLAGS}
|
|
-DCMAKE_SHARED_LINKER_FLAGS=${OSL_CMAKE_LINKER_FLAGS}
|
|
-DBUILD_SHARED_LIBS=ON
|
|
-DLINKSTATIC=OFF
|
|
-DOSL_BUILD_PLUGINS=OFF
|
|
-DSTOP_ON_WARNING=OFF
|
|
-DUSE_LLVM_BITCODE=ON
|
|
-DLLVM_ROOT=${LIBDIR}/llvm/
|
|
-DLLVM_STATIC=ON
|
|
-DUSE_PARTIO=OFF
|
|
-DUSE_QT=OFF
|
|
-DINSTALL_DOCS=OFF
|
|
-Dpugixml_ROOT=${LIBDIR}/pugixml
|
|
-DUSE_PYTHON=ON
|
|
-DImath_ROOT=${LIBDIR}/imath
|
|
-DCMAKE_DEBUG_POSTFIX=_d
|
|
-Dpybind11_ROOT=${LIBDIR}/pybind11
|
|
-DPython_ROOT=${LIBDIR}/python
|
|
-DPython_EXECUTABLE=${PYTHON_BINARY}
|
|
-DPython3_EXECUTABLE=${PYTHON_BINARY}
|
|
-Dlibdeflate_DIR=${LIBDIR}/deflate/lib/cmake/libdeflate
|
|
)
|
|
|
|
if(NOT (APPLE OR BLENDER_PLATFORM_WINDOWS_ARM))
|
|
list(APPEND OSL_EXTRA_ARGS
|
|
-DOSL_USE_OPTIX=ON
|
|
-DCUDA_TARGET_ARCH=sm_50
|
|
-DCUDA_TOOLKIT_ROOT_DIR=${CUDAToolkit_ROOT}
|
|
)
|
|
endif()
|
|
if(WIN32)
|
|
# Needed to make Clang compile CUDA code with VS2019
|
|
list(APPEND OSL_EXTRA_ARGS
|
|
-DLLVM_COMPILE_FLAGS=-D__CUDACC_VER_MAJOR__=${CUDAToolkit_VERSION_MAJOR}
|
|
)
|
|
endif()
|
|
|
|
ExternalProject_Add(external_osl
|
|
URL file://${PACKAGE_DIR}/${OSL_FILE}
|
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
|
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
|
|
LIST_SEPARATOR ^^
|
|
URL_HASH ${OSL_HASH_TYPE}=${OSL_HASH}
|
|
PREFIX ${BUILD_DIR}/osl
|
|
|
|
PATCH_COMMAND
|
|
${PATCH_CMD} -p 1 -d
|
|
${BUILD_DIR}/osl/src/external_osl <
|
|
${PATCH_DIR}/osl.diff &&
|
|
${PATCH_CMD} -p 1 -d
|
|
${BUILD_DIR}/osl/src/external_osl <
|
|
${PATCH_DIR}/osl_ptx_version.diff &&
|
|
${PATCH_CMD} -p 1 -d
|
|
${BUILD_DIR}/osl/src/external_osl <
|
|
${PATCH_DIR}/osl_supports_isa_thread.diff
|
|
|
|
CMAKE_ARGS
|
|
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/osl
|
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
|
${DEFAULT_CMAKE_FLAGS}
|
|
${OSL_EXTRA_ARGS}
|
|
|
|
INSTALL_DIR ${LIBDIR}/osl
|
|
)
|
|
|
|
add_dependencies(
|
|
external_osl
|
|
ll
|
|
external_openexr
|
|
external_zlib
|
|
external_openimageio
|
|
external_pugixml
|
|
external_python
|
|
external_pybind11
|
|
)
|
|
if(WIN32)
|
|
add_dependencies(
|
|
external_osl
|
|
external_flexbison
|
|
)
|
|
elseif(UNIX AND NOT APPLE)
|
|
add_dependencies(
|
|
external_osl
|
|
external_flex
|
|
)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
if(BUILD_MODE STREQUAL Release)
|
|
ExternalProject_Add_Step(external_osl after_install
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
${LIBDIR}/osl/
|
|
${HARVEST_TARGET}/osl
|
|
|
|
DEPENDEES install
|
|
)
|
|
endif()
|
|
if(BUILD_MODE STREQUAL Debug)
|
|
ExternalProject_Add_Step(external_osl after_install
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
${LIBDIR}/osl/lib/oslcomp_d.lib
|
|
${HARVEST_TARGET}/osl/lib/oslcomp_d.lib
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
${LIBDIR}/osl/lib/oslexec_d.lib
|
|
${HARVEST_TARGET}/osl/lib/oslexec_d.lib
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
${LIBDIR}/osl/lib/oslquery_d.lib
|
|
${HARVEST_TARGET}/osl/lib/oslquery_d.lib
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
${LIBDIR}/osl/lib/oslnoise_d.lib
|
|
${HARVEST_TARGET}/osl/lib/oslnoise_d.lib
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
${LIBDIR}/osl/bin/oslcomp_d.dll
|
|
${HARVEST_TARGET}/osl/bin/oslcomp_d.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
${LIBDIR}/osl/bin/oslexec_d.dll
|
|
${HARVEST_TARGET}/osl/bin/oslexec_d.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
${LIBDIR}/osl/bin/oslquery_d.dll
|
|
${HARVEST_TARGET}/osl/bin/oslquery_d.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
${LIBDIR}/osl/bin/oslnoise_d.dll
|
|
${HARVEST_TARGET}/osl/bin/oslnoise_d.dll
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
${LIBDIR}/osl/lib/python${PYTHON_SHORT_VERSION}/
|
|
${HARVEST_TARGET}/osl/lib/python${PYTHON_SHORT_VERSION}_debug/
|
|
|
|
DEPENDEES install
|
|
)
|
|
endif()
|
|
else()
|
|
harvest_rpath_bin(external_osl osl/bin osl/bin "oslc")
|
|
harvest(external_osl osl/include osl/include "*.h")
|
|
harvest_rpath_lib(external_osl osl/lib osl/lib "*${SHAREDLIBEXT}*")
|
|
harvest(external_osl osl/share/OSL/shaders osl/share/OSL/shaders "*.h")
|
|
harvest_rpath_python(external_osl
|
|
osl/lib/python${PYTHON_SHORT_VERSION}
|
|
python/lib/python${PYTHON_SHORT_VERSION}
|
|
"*"
|
|
)
|
|
endif()
|