| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #!/usr/bin/env python
- from misc.utility.scons_hints import *
- Import("env")
- thirdparty_obj = []
- thirdparty_dir = "#thirdparty/vulkan"
- thirdparty_volk_dir = "#thirdparty/volk"
- thirdparty_spirv_headers_dir = "#thirdparty/spirv-headers"
- thirdparty_respirv_dir = "#thirdparty/re-spirv"
- # Use bundled Vulkan headers
- env.Prepend(CPPPATH=[thirdparty_dir, thirdparty_dir + "/include"])
- if env["use_volk"]:
- env.AppendUnique(CPPDEFINES=["USE_VOLK"])
- env.Prepend(CPPPATH=[thirdparty_volk_dir])
- if env["platform"] == "android":
- env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_ANDROID_KHR"])
- elif env["platform"] == "ios":
- env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_IOS_MVK", "VK_USE_PLATFORM_METAL_EXT"])
- elif env["platform"] == "linuxbsd":
- if env["x11"]:
- env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_XLIB_KHR"])
- if env["wayland"]:
- env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_WAYLAND_KHR"])
- elif env["platform"] == "macos":
- env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_MACOS_MVK", "VK_USE_PLATFORM_METAL_EXT"])
- elif env["platform"] == "windows":
- env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_WIN32_KHR"])
- # Build Vulkan memory allocator and volk
- env_thirdparty_vma = env.Clone()
- env_thirdparty_vma.disable_warnings()
- thirdparty_sources_vma = [thirdparty_dir + "/vk_mem_alloc.cpp"]
- if env["use_volk"]:
- env_thirdparty_vma.AppendUnique(CPPDEFINES=[("VMA_STATIC_VULKAN_FUNCTIONS", 1)])
- env_thirdparty_volk = env.Clone()
- env_thirdparty_volk.disable_warnings()
- thirdparty_sources_volk = [thirdparty_volk_dir + "/volk.c"]
- env_thirdparty_volk.add_source_files(thirdparty_obj, thirdparty_sources_volk)
- elif env["platform"] == "android":
- # Our current NDK version only provides old Vulkan headers,
- # so we have to limit VMA.
- env_thirdparty_vma.AppendUnique(CPPDEFINES=[("VMA_VULKAN_VERSION", 1000000)])
- elif env["platform"] == "macos" or env["platform"] == "ios":
- # MoltenVK supports only Vulkan 1.1 API, limit VMA to the same version.
- env_thirdparty_vma.AppendUnique(CPPDEFINES=[("VMA_VULKAN_VERSION", 1001000)])
- env_thirdparty_vma.add_source_files(thirdparty_obj, thirdparty_sources_vma)
- # Build re-spirv
- env_thirdparty_respirv = env.Clone()
- env_thirdparty_respirv.Prepend(CPPPATH=[thirdparty_spirv_headers_dir + "/include"])
- env_thirdparty_respirv.disable_warnings()
- thirdparty_sources_respirv = [thirdparty_respirv_dir + "/re-spirv.cpp"]
- env_thirdparty_respirv.add_source_files(thirdparty_obj, thirdparty_sources_respirv)
- env.drivers_sources += thirdparty_obj
- # Godot source files
- driver_obj = []
- env.add_source_files(driver_obj, "*.cpp")
- env.drivers_sources += driver_obj
- # Needed to force rebuilding the driver files when the thirdparty code is updated.
- env.Depends(driver_obj, thirdparty_obj)
|