cmake_minimum_required(VERSION 3.24) project(QubicTeachingSamples LANGUAGES CXX) if(NOT WIN32) message(FATAL_ERROR "These native DirectX 12 samples require Windows and the Windows SDK.") endif() set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_program(DXC_EXECUTABLE NAMES dxc REQUIRED) foreach(sample IN ITEMS triangle texture) if(sample STREQUAL "texture") set(textured 1) else() set(textured 0) endif() set(shader_dir "${CMAKE_CURRENT_BINARY_DIR}/shaders/${sample}") foreach(stage IN ITEMS vs ps) string(TOUPPER "${stage}" entry_prefix) add_custom_command( OUTPUT "${shader_dir}/${stage}.cso" COMMAND ${CMAKE_COMMAND} -E make_directory "${shader_dir}" COMMAND "${DXC_EXECUTABLE}" -T ${stage}_6_0 -E ${entry_prefix}Main -D TEXTURED=${textured} -Zpr -Ges -Fo "${shader_dir}/${stage}.cso" "${CMAKE_CURRENT_SOURCE_DIR}/Shaders/Scene.hlsl" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/Shaders/Scene.hlsl" VERBATIM) endforeach() add_custom_target(${sample}_shaders COMMAND ${CMAKE_COMMAND} -E copy_directory "${shader_dir}" "$/shaders/${sample}" DEPENDS "${shader_dir}/vs.cso" "${shader_dir}/ps.cso" VERBATIM) add_executable(qubic_${sample} WIN32 main.cpp) add_dependencies(qubic_${sample} ${sample}_shaders) target_compile_definitions(qubic_${sample} PRIVATE UNICODE _UNICODE NOMINMAX WIN32_LEAN_AND_MEAN TEXTURED=${textured}) target_link_libraries(qubic_${sample} PRIVATE d3d12 dxgi windowscodecs ole32 shell32) if(MSVC) target_compile_options(qubic_${sample} PRIVATE /W4 /permissive- /utf-8) endif() endforeach()