diff --git a/build_files/cmake/Modules/FindOpenShadingLanguage.cmake b/build_files/cmake/Modules/FindOpenShadingLanguage.cmake index 01ed72051f7..07ed2c86e19 100644 --- a/build_files/cmake/Modules/FindOpenShadingLanguage.cmake +++ b/build_files/cmake/Modules/FindOpenShadingLanguage.cmake @@ -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) diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index cfa4f1c9bf7..0c1374af348 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -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) diff --git a/intern/cycles/kernel/shaders/CMakeLists.txt b/intern/cycles/kernel/shaders/CMakeLists.txt index 958ebe2f04e..9dcedc9ba19 100644 --- a/intern/cycles/kernel/shaders/CMakeLists.txt +++ b/intern/cycles/kernel/shaders/CMakeLists.txt @@ -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}