Skip to content

Commit 3585b1a

Browse files
authored
Add MDL Compiler dependency for genmdl tests (AcademySoftwareFoundation#2254)
Extend test for MaterialXGenMdl. This commit extends source/MaterialXTest/MaterialXGenMdl as a test for source/MaterialXGenMdl, plus the necessary work on the cmake scripts and github actions to add the MDL SDK as a dependency. New cmake variables: - MATERIALX_MDL_SDK_DIR: if set and mdlc is found the test in source/MaterialXTest/MaterialXGenMdl is extended to run mdlc on the generated MDL files. - MATERIALX_MDL_BINARY_MDLC: name of the mdlc binary, derived from MATERIALX_MDL_SDK_DIR The CI tests use vcpkg to install the MDL SDK, but a manually built one also works (alternative for developers). Right now, the MDL SDK dependency is enabled only for Windows_VS2022_x64_Python313 in the extended build.
1 parent 0c1ed1e commit 3585b1a

11 files changed

Lines changed: 236 additions & 279 deletions

File tree

.github/workflows/main.yml

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ jobs:
115115
cmake_config: -G "Visual Studio 17 2022" -A "x64"
116116
test_shaders: ON
117117
extended_build_oiio: ON
118+
extended_build_mdl_sdk: ON
118119

119120
- name: Windows_VS2022_x64_SharedLibs
120121
os: windows-2025
@@ -167,6 +168,12 @@ jobs:
167168
C:/vcpkg/vcpkg install openimageio --triplet=x64-windows
168169
Add-Content $env:GITHUB_PATH "C:/vcpkg/installed/x64-windows/bin"
169170
171+
- name: Install MDL SDK
172+
if: env.IS_EXTENDED_BUILD == 'true' && matrix.extended_build_mdl_sdk == 'ON' && runner.os == 'Windows'
173+
run: |
174+
C:/vcpkg/vcpkg install mdl-sdk --triplet=x64-windows
175+
Add-Content $env:GITHUB_PATH "C:/vcpkg/installed/x64-windows/bin"
176+
170177
- name: Install Python ${{ matrix.python }}
171178
if: matrix.python != 'None'
172179
uses: actions/setup-python@v5
@@ -185,8 +192,16 @@ jobs:
185192
- name: CMake Generate
186193
shell: bash
187194
run: |
188-
if [ "${{ env.IS_EXTENDED_BUILD }}" == "true" ] && [ "${{ matrix.extended_build_oiio }}" == "ON" ]; then
189-
EXTENDED_BUILD_CONFIG="-DMATERIALX_BUILD_OIIO=ON -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows"
195+
if [ "${{ env.IS_EXTENDED_BUILD }}" == "true" ]; then
196+
if [ "${{ runner.os }}" == "Windows" ]; then
197+
EXTENDED_BUILD_CONFIG="-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows"
198+
fi
199+
if [ "${{ matrix.extended_build_oiio }}" == "ON" ]; then
200+
EXTENDED_BUILD_CONFIG="$EXTENDED_BUILD_CONFIG -DMATERIALX_BUILD_OIIO=ON"
201+
fi
202+
if [ "${{ matrix.extended_build_mdl_sdk }}" == "ON" -a "${{ runner.os }}" == "Windows" ]; then
203+
EXTENDED_BUILD_CONFIG="$EXTENDED_BUILD_CONFIG -DMATERIALX_MDL_SDK_DIR=C:/vcpkg/installed/x64-windows"
204+
fi
190205
fi
191206
cmake -S . -B build -DMATERIALX_BUILD_PYTHON=ON -DMATERIALX_BUILD_VIEWER=ON -DMATERIALX_BUILD_GRAPH_EDITOR=ON -DMATERIALX_BUILD_TESTS=ON -DMATERIALX_TEST_RENDER=OFF -DMATERIALX_WARNINGS_AS_ERRORS=ON $EXTENDED_BUILD_CONFIG ${{matrix.cmake_config}}
192207

CMakeLists.txt

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
1414
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
1515
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
1616

17-
# JavaScript setup
17+
# JavaScript setup
1818
option(MATERIALX_BUILD_JS "Build the MaterialX JavaScript package from C++ bindings. Requires the emscripten environment." OFF)
1919
set(MATERIALX_EMSDK_PATH "" CACHE PATH "Path to EMSDK (e.g. 'D:/Projects/emsdk').")
2020
if (MATERIALX_BUILD_JS)
@@ -147,13 +147,8 @@ if (MATERIALX_BUILD_OSOS)
147147
endif()
148148

149149
# Helpers for MDL validation
150-
if (MATERIALX_BUILD_GEN_MDL)
151-
set(MATERIALX_MDLC_EXECUTABLE "" CACHE FILEPATH "Full path to the mdlc binary.")
152-
set(MATERIALX_MDL_RENDER_EXECUTABLE "" CACHE FILEPATH "Full path to the mdl renderer binary.")
153-
set(MATERIALX_MDL_RENDER_ARGUMENTS "" CACHE STRING "Custom arguments for renderer.")
154-
set(MATERIALX_MDL_MODULE_PATHS "" CACHE FILEPATH "Comma separated list of MDL module paths.")
155-
set(MATERIALX_INSTALL_MDL_MODULE_PATH ${MATERIALX_INSTALL_STDLIB_PATH} CACHE FILEPATH "Install path for mdl module.")
156-
endif()
150+
set(MATERIALX_MDL_SDK_DIR "" CACHE PATH "Path to the MDL SDK directory that contains 'include', 'lib', etc.")
151+
set(MATERIALX_MDL_MODULE_PATHS "" CACHE FILEPATH "Comma separated list of MDL module paths.")
157152

158153
# Namespace
159154
set(MATERIALX_NAMESPACE_SUFFIX "" CACHE STRING "Add a suffix to the main MaterialX C++ namespace: Options include dev, staging, <YOURFACILITY> etc.")
@@ -207,13 +202,9 @@ mark_as_advanced(MATERIALX_BUILD_JS)
207202
mark_as_advanced(MATERIALX_EMSDK_PATH)
208203
mark_as_advanced(MATERIALX_BUILD_IOS)
209204
mark_as_advanced(MATERIALX_BUILD_APPLE_FRAMEWORK)
210-
if (MATERIALX_BUILD_GEN_MDL)
211-
mark_as_advanced(MATERIALX_MDLC_EXECUTABLE)
212-
mark_as_advanced(MATERIALX_MDL_RENDER_EXECUTABLE)
213-
mark_as_advanced(MATERIALX_MDL_RENDER_ARGUMENTS)
214-
mark_as_advanced(MATERIALX_MDL_MODULE_PATHS)
215-
mark_as_advanced(MATERIALX_INSTALL_MDL_MODULE_PATH)
216-
endif()
205+
mark_as_advanced(MATERIALX_MDL_BINARY_MDLC)
206+
mark_as_advanced(MATERIALX_MDL_MODULE_PATHS)
207+
mark_as_advanced(MATERIALX_MDL_SDK_DIR)
217208

218209
if (MATERIALX_BUILD_USE_CCACHE)
219210
# Setup CCache for C/C++ compilation
@@ -251,12 +242,11 @@ if (MATERIALX_BUILD_BENCHMARK_TESTS)
251242
add_definitions(-DMATERIALX_BUILD_BENCHMARK_TESTS)
252243
endif()
253244

254-
if (MATERIALX_BUILD_GEN_MDL)
255-
add_definitions(-DMATERIALX_MDLC_EXECUTABLE=\"${MATERIALX_MDLC_EXECUTABLE}\")
256-
add_definitions(-DMATERIALX_MDL_RENDER_EXECUTABLE=\"${MATERIALX_MDL_RENDER_EXECUTABLE}\")
257-
add_definitions(-DMATERIALX_MDL_RENDER_ARGUMENTS=\"${MATERIALX_MDL_RENDER_ARGUMENTS}\")
258-
add_definitions(-DMATERIALX_MDL_MODULE_PATHS=\"${MATERIALX_MDL_MODULE_PATHS}\")
259-
add_definitions(-DMATERIALX_INSTALL_MDL_MODULE_PATH=\"${MATERIALX_INSTALL_MDL_MODULE_PATH}\")
245+
# GEN MDL does not have any additional dependencies. For loading and compiling MDL, e.g., in the test renderer, the MDL SDK is needed.
246+
if(MATERIALX_MDL_SDK_DIR)
247+
find_package(mdl QUIET CONFIG REQUIRED PATHS ${MATERIALX_MDL_SDK_DIR})
248+
get_target_property(MATERIALX_MDL_BINARY_MDLC mdl::mdlc LOCATION)
249+
set(MATERIALX_MDL_BINARY_MDLC ${MATERIALX_MDL_BINARY_MDLC} CACHE FILEPATH "Full path to the mdlc binary." FORCE)
260250
endif()
261251

262252
# Adjust the default installation path

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ MaterialX is an open standard for representing rich material and look-developmen
1717
- Point CMake to the root of the MaterialX library and generate C++ projects for your platform and compiler.
1818
- Select the `MATERIALX_BUILD_PYTHON` option to build Python bindings.
1919
- Select the `MATERIALX_BUILD_VIEWER` option to build the [MaterialX Viewer](https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/documents/DeveloperGuide/Viewer.md).
20-
- Select the `MATERIALX_BUILD_GRAPH_EDITOR` option to build the [MaterialX Graph Editor](https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/documents/DeveloperGuide/GraphEditor.md).
20+
- Select the `MATERIALX_BUILD_GRAPH_EDITOR` option to build the [MaterialX Graph Editor](https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/documents/DeveloperGuide/GraphEditor.md).
2121

2222
## Supported Platforms
2323

resources/Materials/TestSuite/_options.mtlx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
<input name="extraLibraryPaths" type="string" value="" />
6363

6464
<!-- List of document paths for render tests -->
65-
<input name="renderTestPaths" type="string" value="resources/Materials/Examples/StandardSurface,resources/Materials/TestSuite/stdlib/convolution,resources/Materials/TestSuite/stdlib/color_management,resources/Materials/TestSuite/stdlib/procedural,resources/Materials/TestSuite/pbrlib/surfaceshader,resources/Materials/TestSuite/nprlib" />
65+
<input name="renderTestPaths" type="string" value="resources/Materials/Examples/StandardSurface,resources/Materials/TestSuite/stdlib/convolution,resources/Materials/TestSuite/stdlib/color_management,resources/Materials/TestSuite/stdlib/procedural,resources/Materials/TestSuite/pbrlib/surfaceshader,resources/Materials/TestSuite/nprlib,resources/Materials/TestSuite/pbrlib/bsdf" />
6666

6767
<!-- Enable reference quality rendering.
6868
This option enables higher sample counts and supersampling in render tests,

source/MaterialXGenMdl/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ mx_add_library(MaterialXGenMdl
1414

1515
if(NOT SKBUILD)
1616
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/mdl
17-
DESTINATION "${MATERIALX_INSTALL_MDL_MODULE_PATH}")
17+
DESTINATION "${MATERIALX_INSTALL_STDLIB_PATH}")
1818
endif()

source/MaterialXTest/CMakeLists.txt

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,6 @@ if(MATERIALX_BUILD_GEN_GLSL OR MATERIALX_BUILD_GEN_OSL OR MATERIALX_BUILD_GEN_MD
5555
if(MATERIALX_BUILD_GEN_MDL)
5656
add_subdirectory(MaterialXGenMdl)
5757
target_link_libraries(MaterialXTest MaterialXGenMdl)
58-
if (NOT MATERIALX_BUILD_MONOLITHIC)
59-
get_target_property(MaterialXGenMdl_SOURCE_DIR MaterialXGenMdl SOURCE_DIR)
60-
else()
61-
get_target_property(PROJECT_SOURCE_DIR ${MATERIALX_MONOLITHIC_TARGET} SOURCE_DIR)
62-
set(MaterialXGenMdl_SOURCE_DIR "{PROJECT_SOURCE_DIR}/MaterialXGenMdl")
63-
endif()
64-
target_compile_definitions(MaterialXTest PRIVATE -DMATERIALX_MDL_IMPL_MODULE_PATH=\"${MaterialXGenMdl_SOURCE_DIR}/mdl\")
6558
endif()
6659
if(MATERIALX_BUILD_GEN_MSL)
6760
add_subdirectory(MaterialXGenMsl)
@@ -106,7 +99,7 @@ endif()
10699

107100
if(MATERIALX_BUILD_GEN_MDL)
108101
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../source/MaterialXGenMdl/mdl/"
109-
DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${MATERIALX_INSTALL_MDL_MODULE_PATH}/mdl)
102+
DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${MATERIALX_INSTALL_STDLIB_PATH}/mdl)
110103
endif()
111104

112105
add_custom_command(TARGET MaterialXTest POST_BUILD

source/MaterialXTest/MaterialXGenMdl/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,20 @@ file(GLOB_RECURSE headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
33

44
target_sources(MaterialXTest PUBLIC ${source} ${headers})
55

6+
if (NOT MATERIALX_BUILD_MONOLITHIC)
7+
get_target_property(MaterialXGenMdl_SOURCE_DIR MaterialXGenMdl SOURCE_DIR)
8+
else()
9+
get_target_property(PROJECT_SOURCE_DIR ${MATERIALX_MONOLITHIC_TARGET} SOURCE_DIR)
10+
set(MaterialXGenMdl_SOURCE_DIR "{PROJECT_SOURCE_DIR}/MaterialXGenMdl")
11+
endif()
12+
13+
target_compile_definitions(MaterialXTest PRIVATE
14+
MATERIALX_MDL_BINARY_MDLC=\"${MATERIALX_MDL_BINARY_MDLC}\"
15+
MATERIALX_MDL_IMPL_MODULE_PATH=\"${MaterialXGenMdl_SOURCE_DIR}/mdl\"
16+
MATERIALX_INSTALL_MDL_MODULE_PATH=\"${MATERIALX_INSTALL_STDLIB_PATH}\"
17+
MATERIALX_MDL_MODULE_PATHS=\"${MATERIALX_MDL_MODULE_PATHS}\"
18+
)
19+
620
add_tests("${source}")
721
822
assign_source_group("Source Files" ${source})

0 commit comments

Comments
 (0)