#!/usr/bin/env python

Import("env")
Import("env_modules")

env_png = env_modules.Clone()

# Thirdparty source files

thirdparty_obj = []

thirdparty_dir = "#modules/png/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

use_neon = "neon_enabled" in env and env["neon_enabled"] 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.modules_sources += thirdparty_obj


# Pandemonium source files

driver_obj = []

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

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