# Copyright 2018 The Amber Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. set(AMBER_SOURCES amber.cc amberscript/parser.cc buffer.cc command.cc command_data.cc debug.cc descriptor_set_and_binding_parser.cc engine.cc executor.cc float16_helper.cc format.cc parser.cc pipeline.cc pipeline_data.cc recipe.cc result.cc sampler.cc script.cc shader.cc shader_compiler.cc sleep.cc tokenizer.cc type.cc type_parser.cc value.cc verifier.cc virtual_file_store.cc vkscript/command_parser.cc vkscript/datum_type_parser.cc vkscript/parser.cc vkscript/section_parser.cc ) if (${Vulkan_FOUND}) add_subdirectory(vulkan) list(APPEND AMBER_SOURCES vulkan_engine_config.cc) endif() if (${Dawn_FOUND}) add_subdirectory(dawn) list(APPEND AMBER_SOURCES dawn_engine_config.cc) endif() if (${AMBER_ENABLE_DXC}) list(APPEND AMBER_SOURCES dxc_helper.cc) endif() if (${AMBER_ENABLE_CLSPV}) list(APPEND AMBER_SOURCES clspv_helper.cc) endif() add_library(libamber ${AMBER_SOURCES}) amber_default_compile_options(libamber) target_include_directories(libamber PRIVATE "${CMAKE_BINARY_DIR}" ${SPIRV-Headers_SOURCE_DIR}/include) set_target_properties(libamber PROPERTIES OUTPUT_NAME "amber") if (${AMBER_ENABLE_DXC}) target_include_directories(libamber PRIVATE "${PROJECT_SOURCE_DIR}/third_party/dxc/include" "${CMAKE_BINARY_DIR}/third_party/dxc/include" ) add_dependencies(libamber dxcompiler) target_link_libraries(libamber dxcompiler LLVMDxcSupport LLVMHLSL LLVMOption LLVMSupport ) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(libamber PRIVATE -fms-extensions -Wno-language-extension-token -fexceptions ) endif() endif() if (${AMBER_ENABLE_CLSPV}) target_include_directories(libamber PRIVATE "${clspv_SOURCE_DIR}/clspv/include" ) target_link_libraries(libamber clspv_core clspv_passes ) endif() if (${AMBER_ENABLE_SPIRV_TOOLS}) target_link_libraries(libamber SPIRV-Tools) endif() if (${AMBER_ENABLE_SHADERC}) target_link_libraries(libamber shaderc SPIRV) endif() if (${AMBER_ENABLE_VK_DEBUGGING}) target_link_libraries(libamber cppdap) endif() if (NOT MSVC AND NOT ANDROID) target_link_libraries(libamber pthread) endif() if (${Vulkan_FOUND}) target_link_libraries(libamber libamberenginevulkan) target_include_directories(libamber PRIVATE "${VulkanHeaders_INCLUDE_DIR}") if (${VULKAN_CTS_HEADER} AND DEFINED AMBER_CTS_INL_DIR) target_include_directories(libamber PRIVATE "${AMBER_CTS_INL_DIR}") endif() endif() if (${Dawn_FOUND}) target_link_libraries(libamber libamberenginedawn) endif() if (${AMBER_ENABLE_TESTS}) set(TEST_SRCS amberscript/parser_attach_test.cc amberscript/parser_bind_test.cc amberscript/parser_buffer_test.cc amberscript/parser_clear_color_test.cc amberscript/parser_clear_depth_test.cc amberscript/parser_clear_stencil_test.cc amberscript/parser_clear_test.cc amberscript/parser_compile_options_test.cc amberscript/parser_copy_test.cc amberscript/parser_debug_test.cc amberscript/parser_depth_test.cc amberscript/parser_device_feature_test.cc amberscript/parser_expect_test.cc amberscript/parser_extension_test.cc amberscript/parser_framebuffer_test.cc amberscript/parser_image_test.cc amberscript/parser_pipeline_test.cc amberscript/parser_pipeline_set_test.cc amberscript/parser_repeat_test.cc amberscript/parser_run_test.cc amberscript/parser_sampler_test.cc amberscript/parser_set_test.cc amberscript/parser_shader_opt_test.cc amberscript/parser_shader_test.cc amberscript/parser_stencil_test.cc amberscript/parser_blend_test.cc amberscript/parser_struct_test.cc amberscript/parser_subgroup_size_control_test.cc amberscript/parser_test.cc amberscript/parser_viewport_test.cc buffer_test.cc command_data_test.cc descriptor_set_and_binding_parser_test.cc executor_test.cc float16_helper_test.cc format_test.cc pipeline_test.cc result_test.cc script_test.cc shader_compiler_test.cc tokenizer_test.cc type_parser_test.cc type_test.cc verifier_test.cc virtual_file_store_test.cc vkscript/command_parser_test.cc vkscript/datum_type_parser_test.cc vkscript/parser_test.cc vkscript/section_parser_test.cc ../samples/ppm.cc ../samples/ppm_test.cc ) if (${Vulkan_FOUND}) list(APPEND TEST_SRCS vulkan/vertex_buffer_test.cc vulkan/pipeline_test.cc) endif() if (${Dawn_FOUND}) list(APPEND TEST_SRCS dawn/pipeline_info_test.cc) endif() add_executable(amber_unittests ${TEST_SRCS}) if (NOT MSVC) target_compile_options(amber_unittests PRIVATE -Wno-global-constructors -Wno-weak-vtables ) endif() target_include_directories(amber_unittests PRIVATE ${gmock_SOURCE_DIR}/include) target_link_libraries(amber_unittests libamber gmock_main) amber_default_compile_options(amber_unittests) add_test(NAME amber_unittests COMMAND amber_unittests) if (${Vulkan_FOUND}) target_include_directories(amber_unittests PRIVATE "${VulkanHeaders_INCLUDE_DIR}" "${CMAKE_BINARY_DIR}") endif() if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") # vulkan/vulkan.h defines VK_NULL_HANDLE as 0u and that also serves as a null pointer. # Disable Clang's warning that will alwaays fire on that. This is required to build # with XCode 10. target_compile_options(amber_unittests PRIVATE -Wno-zero-as-null-pointer-constant) endif() endif()