summaryrefslogtreecommitdiff
path: root/drivers/vulkan/SCsub
blob: 3e0f5788c3620fd0c6464b9f9ce61f4aafa0bf6e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env python

Import("env")

thirdparty_obj = []
thirdparty_dir = "#thirdparty/vulkan"
thirdparty_volk_dir = "#thirdparty/volk"

if env["use_volk"]:
    env.AppendUnique(CPPDEFINES=["USE_VOLK"])
    env.Prepend(CPPPATH=[thirdparty_volk_dir])

if env["platform"] == "android" and not env["use_volk"]:
    # Use NDK Vulkan headers
    ndk_vulkan_dir = env["ANDROID_NDK_ROOT"] + "/sources/third_party/vulkan/src"
    thirdparty_includes = [
        ndk_vulkan_dir,
        ndk_vulkan_dir + "/include",
        ndk_vulkan_dir + "/layers",
        ndk_vulkan_dir + "/layers/generated",
    ]
    env.Prepend(CPPPATH=thirdparty_includes)
else:
    # Use bundled Vulkan headers
    env.Prepend(CPPPATH=[thirdparty_dir, thirdparty_dir + "/include"])

if env["platform"] == "android":
    env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_ANDROID_KHR"])
elif env["platform"] == "iphone":
    env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_IOS_MVK"])
elif env["platform"] == "linuxbsd":
    env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_XLIB_KHR"])
elif env["platform"] == "osx":
    env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_MACOS_MVK"])
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)

env_thirdparty_vma.add_source_files(thirdparty_obj, thirdparty_sources_vma)


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)