summaryrefslogtreecommitdiff
path: root/drivers/png/SCsub
blob: ad7aaf1ee8229cbb3e41056c39c2cdb462eb1e6e (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
66
67
68
69
70
71
72
#!/usr/bin/env python

Import("env")

env_png = env.Clone()

# Thirdparty source files

thirdparty_obj = []

if env["builtin_libpng"]:
    thirdparty_dir = "#thirdparty/libpng/"
    thirdparty_sources = [
        "png.c",
        "pngerror.c",
        "pngget.c",
        "pngmem.c",
        "pngpread.c",
        "pngread.c",
        "pngrio.c",
        "pngrtran.c",
        "pngrutil.c",
        "pngset.c",
        "pngtrans.c",
        "pngwio.c",
        "pngwrite.c",
        "pngwtran.c",
        "pngwutil.c",
    ]
    thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]

    env_png.Prepend(CPPPATH=[thirdparty_dir])
    # Needed for drivers includes and in platform/javascript
    env.Prepend(CPPPATH=[thirdparty_dir])

    # Currently .ASM filter_neon.S does not compile on NT.
    import os

    # Enable ARM NEON instructions on 32-bit Android to compile more optimized code.
    use_neon = env["platform"] == "android" and env["arch"] == "arm32" and os.name != "nt"
    if use_neon:
        env_png.Append(CPPDEFINES=[("PNG_ARM_NEON_OPT", 2)])
    else:
        env_png.Append(CPPDEFINES=[("PNG_ARM_NEON_OPT", 0)])

    env_thirdparty = env_png.Clone()
    env_thirdparty.disable_warnings()
    env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources)

    if use_neon:
        env_neon = env_thirdparty.Clone()
        if "S_compiler" in env:
            env_neon["CC"] = env["S_compiler"]
        neon_sources = []
        neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/arm_init.c"))
        neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/filter_neon_intrinsics.c"))
        neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/filter_neon.S"))
        neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/palette_neon_intrinsics.c"))
        thirdparty_obj += neon_sources

    env.drivers_sources += thirdparty_obj


# Godot source files

driver_obj = []

env_png.add_source_files(driver_obj, "*.cpp")
env.drivers_sources += driver_obj

# Needed to force rebuilding the driver files when the thirdparty library is updated.
env.Depends(driver_obj, thirdparty_obj)