87 lines
3.4 KiB
CMake
87 lines
3.4 KiB
CMake
project(aorii_renderer)
|
|
|
|
set(GL_BACKEND FALSE CACHE BOOL "OpenGL backend to use")
|
|
set(DX_BACKEND FALSE CACHE BOOL "DirectX backend to use")
|
|
set(VK_BACKEND FALSE CACHE BOOL "Vulkan backend to use")
|
|
set(METAL_BACKEND FALSE CACHE BOOL "Metal backend to use")
|
|
|
|
if (NOT GL_BACKEND AND NOT DX_BACKEND AND NOT VK_BACKEND AND NOT METAL_BACKEND)
|
|
message(FATAL_ERROR "No backend selected")
|
|
endif()
|
|
|
|
set(RENDERER_SOURCES "")
|
|
retrieve_files(core RENDERER_SOURCES)
|
|
retrieve_files(misc RENDERER_SOURCES)
|
|
if (GL_BACKEND)
|
|
retrieve_files(backend/gl RENDERER_SOURCES)
|
|
endif()
|
|
if (DX_BACKEND)
|
|
retrieve_files(backend/dx RENDERER_SOURCES)
|
|
endif ()
|
|
if (VK_BACKEND)
|
|
retrieve_files(backend/vk RENDERER_SOURCES)
|
|
endif ()
|
|
if (METAL_BACKEND)
|
|
retrieve_files(backend/metal RENDERER_SOURCES)
|
|
endif ()
|
|
|
|
add_library(${PROJECT_NAME} STATIC ${RENDERER_SOURCES})
|
|
target_link_libraries(${PROJECT_NAME} PUBLIC Eigen3::Eigen spdlog::spdlog glfw aorii_core)
|
|
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${Stb_INCLUDE_DIR})
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE NOMINMAX)
|
|
add_os_definitions(${PROJECT_NAME})
|
|
configure_glfw_native(${PROJECT_NAME})
|
|
|
|
set(ALL_BACKENDS GL_BACKEND DX_BACKEND VK_BACKEND METAL_BACKEND)
|
|
if (GL_BACKEND)
|
|
target_compile_definitions(${PROJECT_NAME} PUBLIC GL_BACKEND=1)
|
|
list(REMOVE_ITEM ALL_BACKENDS GL_BACKEND)
|
|
endif()
|
|
if (DX_BACKEND)
|
|
target_compile_definitions(${PROJECT_NAME} PUBLIC DX_BACKEND=1)
|
|
list(REMOVE_ITEM ALL_BACKENDS DX_BACKEND)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE d3d11 d3dcompiler dxgi)
|
|
endif ()
|
|
if (VK_BACKEND)
|
|
target_compile_definitions(${PROJECT_NAME} PUBLIC VK_BACKEND=1)
|
|
list(REMOVE_ITEM ALL_BACKENDS VK_BACKEND)
|
|
endif ()
|
|
if (METAL_BACKEND)
|
|
target_compile_definitions(${PROJECT_NAME} PUBLIC METAL_BACKEND=1)
|
|
list(REMOVE_ITEM ALL_BACKENDS METAL_BACKEND)
|
|
endif ()
|
|
foreach(BACKEND ${ALL_BACKENDS})
|
|
target_compile_definitions(${PROJECT_NAME} PUBLIC ${BACKEND}=0)
|
|
endforeach()
|
|
|
|
# 添加编译shader的自定义命令
|
|
if (NOT DEFINED SHADER_OUTPUT_DIR)
|
|
set(SHADER_OUTPUT_DIR ${CMAKE_BINARY_DIR}/shaders CACHE PATH "Output directory for compiled shaders")
|
|
message(STATUS "SHADER_OUTPUT_DIR not defined, using default: ${SHADER_OUTPUT_DIR}")
|
|
endif ()
|
|
function(compile_aorii_shader SHADER_FILE)
|
|
compile_slang_shaders("${CMAKE_CURRENT_SOURCE_DIR}/shader/${SHADER_FILE}.slang" "vertex" "vertex_main")
|
|
compile_slang_shaders("${CMAKE_CURRENT_SOURCE_DIR}/shader/${SHADER_FILE}.slang" "pixel" "pixel_main")
|
|
endfunction()
|
|
compile_aorii_shader(aorii_rect)
|
|
compile_aorii_shader(aorii_rounded_rect)
|
|
compile_aorii_shader(aorii_texture)
|
|
compile_aorii_shader(aorii_segment)
|
|
compile_aorii_shader(aorii_sdf_text)
|
|
add_compile_shaders_target("compile_aorii_shaders" ${PROJECT_NAME})
|
|
|
|
# 如果需要编译example, 添加自定义命令用于拷贝shader文件
|
|
if (BUILD_EXAMPLE)
|
|
# 复制${SHADER_OUTPUT_DIR}文件到${CMAKE_CURRENT_BINARY_DIR}/example/resource/shaders
|
|
set(SOURCE_DIR ${SHADER_OUTPUT_DIR})
|
|
set(DEST_DIR ${CMAKE_BINARY_DIR}/example/resource/shaders)
|
|
|
|
# 添加自定义命令, 当外部目标compile_aorii_shaders被编译时, 将${SOURCE_DIR}文件复制到${DEST_DIR}
|
|
add_custom_command(
|
|
TARGET compile_aorii_shaders
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${DEST_DIR}
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${SOURCE_DIR} ${DEST_DIR}
|
|
COMMENT "Copying shaders to ${DEST_DIR}"
|
|
)
|
|
endif () |