# -*-python-*-

import SCons

rootEnv = Environment(BUILDROOT="build",
		      ENV = {"PATH": ["/home/devkitPro/devkitARM/bin",
				      "/bin", "/usr/bin",
				      "/opt/bin", "/usr/local/bin"]})


# Add the Gambit compiler builder to the main Environment
# FIXME: Should probably find some way to make /home/gambit/4.0b20 a variable
gambitCompilerBuilder = Builder(action = '/home/gambit/4.0b20/bin/gsc -:="/home/gambit/4.0b20" -f -o $TARGET -c -check $SOURCE',
				suffix = ".c", src_suffix = ".scm",
				single_source=True)
rootEnv.Append(BUILDERS = {"GambitCompiler" : gambitCompilerBuilder})


# Add the Gambit library builder to the main Environment
def gambitLinkerEmitter(target, source, env):
    # target and source are always lists--makes keywords more descriptive
    # for the next time I actually touch the SConstruct
    (targets, sources) = (target, source)

    # Grab the last source file the way a gsc without -o would
    # ARGGGGHHH!  Is this really the only way to get the base name?
    baseName = SCons.Util.splitext(str(sources[-1].name))[0]

    targets = [SCons.Util.adjustixes(baseName, None, "_.c")]

    return (targets, sources)

gambitLinkerBuilder = Builder(action = '/home/gambit/4.0b20/bin/gsc -:="/home/gambit/4.0b20" -f -link -o $TARGET $SOURCES',
			      emitter=gambitLinkerEmitter,
			      src_suffix = ".scm")
rootEnv.Append(BUILDERS = {"GambitLinker" : gambitLinkerBuilder})

system = "osx-x86"
system = "nds-arm"

if system == "nds-arm":
    rootEnv.Replace(CC="arm-eabi-gcc")
    rootEnv.Replace(AS="arm-eabi-as")
    rootEnv.Replace(LD="arm-eabi-ld")
    rootEnv.Replace(AR="arm-eabi-ar")
    rootEnv.Replace(RANLIB="arm-eabi-ranlib")

    rootEnv.Replace(LIBS=["m", "c", "sysbase"])
    rootEnv.Replace(LIBPATH=["/Users/devkitPro/libnds/lib", "/Users/devkitPro/devkitARM/arm-eabi/lib"])

    rootEnv.Replace(arm7CCFLAGS = "-std=gnu99 -Wall -W -Wno-unused -O2 -mcpu=arm7tdmi -mtune=arm7tdmi -fomit-frame-pointer -ffast-math -mthumb-interwork -DARM7 -DNDS -DUSE_DSWIFI")

    archCCFLAGS =                 "-std=gnu99 -Wall -W -Wno-unused -O2 -march=armv5te -mtune=arm946e-s -fomit-frame-pointer -fno-strict-aliasing -ffast-math -fstack-check -fstack-protector-all -fbounds-check -mthumb-interwork -DARM9 -I/home/devkitPro/devkitARM/include -I/home/devkitPro/libnds/include -DNDS"
    archCCFLAGS =                 "-std=gnu99 -Wall -W -Wno-unused -Os -march=armv5te -mtune=arm946e-s -fomit-frame-pointer -fno-strict-aliasing -ffast-math -mthumb -mthumb-interwork -DARM9 -I/home/devkitPro/devkitARM/include -I/home/devkitPro/libnds/include -DNDS"
    archCCFLAGS =                 "-std=gnu99 -Wall -W -Wno-unused -Os -march=armv5te -mtune=arm946e-s -fomit-frame-pointer -fno-strict-aliasing -mthumb -mthumb-interwork -DARM9 -I/home/devkitPro/devkitARM/include -I/home/devkitPro/libnds/include -DNDS"
    rootEnv.Replace(arm9CCFLAGS = " ".join([archCCFLAGS, "-DUSE_DSWIFI -DHAVE_CONFIG_H"]))

else:
    archCCFLAGS = '-g -no-cpp-precomp -Wall -W -Wno-unused -fno-math-errno -fno-trapping-math -fno-strict-aliasing -fPIC -mieee-fp'

# Compile the main Gambit library
gambitLibCCFLAGS = '-DHAVE_CONFIG_H -D___PRIMAL -D___LIBRARY -D___GAMBCDIR=\\\"/home/gambit/4.0b20\\\"'
libCCFLAGS = " ".join([archCCFLAGS, gambitLibCCFLAGS])

libEnv = rootEnv.Copy()
libEnv.Replace(CCFLAGS=libCCFLAGS)

env = libEnv
Export("env")
libgambc = libEnv.SConscript("lib/SConscript", build_dir="$BUILDROOT/lib", exports="env")


# Compile the Gambit gsi and gsc executables
gambitExecutableCCFLAGS = '-DHAVE_CONFIG_H'

gsiCCFLAGS = " ".join([archCCFLAGS, gambitExecutableCCFLAGS])
gsiEnv = rootEnv.Copy()
gsiEnv.Replace(CCFLAGS=gsiCCFLAGS)

if system == "nds-arm":
    env = gsiEnv
    Export("env")
    gsi = env.SConscript("nds/SConscript", build_dir="$BUILDROOT/nds", exports=["env", "libgambc"])
else:
    env = gsiEnv
    Export("env")
    gsi = env.SConscript("gsi/SConscript", build_dir="$BUILDROOT/gsi", exports=["env", "libgambc"])

    # Compile the Gambit gsc executable
    env = gsiEnv
    Export("env")
    #gsc = env.SConscript("gsc/SConscript", build_dir="$BUILDROOT/gsc", exports=["env", "libgambc"])






#gambitLibCCFLAGS = '-g -no-cpp-precomp -Wall -W -Wno-unused -fno-math-errno -fschedule-insns2 -fno-trapping-math -fno-strict-aliasing -fwrapv -fexpensive-optimizations -fforce-addr -fpeephole2 -falign-jumps -falign-functions -fno-function-cse -ftree-copyrename -ftree-fre -ftree-dce -fregmove -fgcse-las -freorder-functions -fcaller-saves -fno-if-conversion2 -foptimize-sibling-calls -fcse-skip-blocks -funit-at-a-time -finline-functions -fomit-frame-pointer -fPIC -fno-common -mieee-fp -DHAVE_CONFIG_H -D___PRIMAL -D___LIBRARY -D___GAMBCDIR=\\\"/home/gambit/4.0b20\\\"'

#gambitExecutableCCFLAGS = '-g -no-cpp-precomp -Wall -W -Wno-unused -fno-math-errno -fschedule-insns2 -fno-trapping-math -fno-strict-aliasing -fwrapv -fexpensive-optimizations -fforce-addr -fpeephole2 -falign-jumps -falign-functions -fno-function-cse -ftree-copyrename -ftree-fre -ftree-dce -fregmove -fgcse-las -freorder-functions -fcaller-saves -fno-if-conversion2 -foptimize-sibling-calls -fcse-skip-blocks -funit-at-a-time -finline-functions -fomit-frame-pointer -fPIC -fno-common -mieee-fp -DHAVE_CONFIG_H'