cmake_minimum_required(VERSION 3.6) project(native-spirv-to-dxil) include(ExternalProject) # need python find_package(Python COMPONENTS Interpreter REQUIRED) if(DEFINED ENV{VIRTUAL_ENV} OR DEFINED ENV{CONDA_PREFIX}) set(_pip_args) else() set(_pip_args "--user") endif() find_program(PIP_EXE pip) if(PIP_EXE STREQUAL "PIP_EXE-NOTFOUND") message(FATAL_ERROR "pip required") endif(PIP_EXE STREQUAL "PIP_EXE-NOTFOUND") execute_process(COMMAND ${Python_EXECUTABLE} -m pip install mako) string(TOLOWER ${CMAKE_BUILD_TYPE} MESON_BUILD_TYPE) set(MESA_EXTRA_FLAGS -Dbuildtype=${MESON_BUILD_TYPE} # enable spirv-to-dxil (obviously) -Dspirv-to-dxil=true # force zink because we want libvulkan_util -Dgallium-drivers=zink # set min-windows-version to 7 to remove need to link against synchronization.lib (we don't need futexes for the compiler) -Dmin-windows-version=7 # disable everything we don't need. -Dvulkan-drivers= -Dopengl=false -Dglx=disabled -Dmicrosoft-clc=disabled -Dgallium-d3d12-video=disabled -Dgbm=disabled -Degl=disabled -Dgles1=disabled -Dgles2=disabled -Dllvm=disabled -Dshared-llvm=disabled -Dplatforms= -Dzlib=disabled ) ExternalProject_Add(mesa URL file://${CMAKE_CURRENT_LIST_DIR}/mesa PREFIX ${CMAKE_BINARY_DIR}/mesa CONFIGURE_COMMAND cd ${CMAKE_BINARY_DIR}/mesa/src/mesa && meson setup ${CMAKE_BINARY_DIR}/mesa/src/mesa-build ${MESA_EXTRA_FLAGS} BUILD_COMMAND cd ${CMAKE_BINARY_DIR}/mesa/src/mesa-build && meson compile src/vulkan/util/vulkan_util:static_library && meson compile src/microsoft/spirv_to_dxil/spirv_to_dxil:static_library INSTALL_COMMAND cmake -DOUT_DIR=${CMAKE_BINARY_DIR}/mesa -DMESA_BUILD=${CMAKE_BINARY_DIR}/mesa/src/mesa-build -P ${CMAKE_CURRENT_LIST_DIR}/install_spirv_to_dxil.cmake BUILD_BYPRODUCTS ${CMAKE_BINARY_DIR}/mesa/lib/spirv_to_dxil.lib ${CMAKE_BINARY_DIR}/mesa/lib/libspirv_to_dxil.a ${CMAKE_BINARY_DIR}/mesa/lib/vulkan_util.lib ${CMAKE_BINARY_DIR}/mesa/lib/libvulkan_util.a )