Fix: T73830 OSL not finding stdosl.h on linux

This extends FindOpenShadingLanguage.cmake to also look for the location of
stdosl.h and adds the path to the invocation of oslc to deal with the headers
being in different locations a little better.

Differential Revision: https://developer.blender.org/D6865

Reviewers: brecht
This commit is contained in:
Ray molenkamp 2020-02-17 10:28:12 -07:00
parent a33b261473
commit 8d60e6fa38
Notes: blender-bot 2023-09-08 04:55:43 +02:00
Referenced by issue #83631, Cycles OSL - compiling shaders failing due "\" and "n" symbols combination inside include paths - Needs OSL update
3 changed files with 18 additions and 11 deletions

View File

@ -66,6 +66,22 @@ FIND_PROGRAM(OSL_COMPILER oslc
HINTS ${_osl_SEARCH_DIRS}
PATH_SUFFIXES bin)
get_filename_component(OSL_SHADER_HINT ${OSL_COMPILER} DIRECTORY)
get_filename_component(OSL_SHADER_HINT ${OSL_SHADER_DIR}/../ ABSOLUTE)
FIND_PATH(OSL_SHADER_DIR
NAMES
stdosl.h
HINTS
${OSL_ROOT_DIR}
${OSL_SHADER_HINT}
$ENV{OSLHOME}
/usr/share/OSL/
/usr/include/OSL/
PATH_SUFFIXES
shaders
)
# handle the QUIETLY and REQUIRED arguments and set OSL_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)

View File

@ -607,7 +607,7 @@ endif()
if(WITH_CYCLES_OSL)
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
set(OSL_SHADER_DIR ${CYCLES_OSL}/shaders)
find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)

View File

@ -96,15 +96,6 @@ set(SRC_OSL
node_rgb_to_bw.osl
)
# FindOSL.cmake does not give us the location of the shader library
# but generally it can be figured out from the location of the oslc
# compiler. However if this fails you can set OSL_SHADER_DIR to
# bypass the auto discovery.
if(NOT DEFINED OSL_SHADER_DIR)
get_filename_component(OSL_SHADER_DIR ${OSL_COMPILER} DIRECTORY)
get_filename_component(OSL_SHADER_DIR ${OSL_SHADER_DIR}/../shaders ABSOLUTE)
endif()
# The headers that OSL ships differs per release so we can not
# hardcode this.
file(GLOB SRC_OSL_HEADER_DIST ${OSL_SHADER_DIR}/*.h)
@ -132,7 +123,7 @@ foreach(_file ${SRC_OSL})
string(REPLACE ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} _OSO_FILE ${_OSO_FILE})
add_custom_command(
OUTPUT ${_OSO_FILE}
COMMAND ${OSL_COMPILER} -q -O2 -I"${CMAKE_CURRENT_SOURCE_DIR}" -o ${_OSO_FILE} ${_OSL_FILE}
COMMAND ${OSL_COMPILER} -q -O2 -I"${CMAKE_CURRENT_SOURCE_DIR}" -I"${OSL_SHADER_DIR}" -o ${_OSO_FILE} ${_OSL_FILE}
DEPENDS ${_OSL_FILE} ${SRC_OSL_HEADERS} ${OSL_COMPILER})
list(APPEND SRC_OSO
${_OSO_FILE}