# Semi intelligent scons build script.
#
# To use:
#   star = SConscript("path/to/starscream/SConscript", "env")
#
# where "env" is a variable containing your target environment.
# "star" will contain a list of files to add to your build output. If the
# list is empty, the target platform is not x86 or x64.

hostenv = Environment()
star = hostenv.Program("starscream", "star.c")

Srcs = []

Import("env")
conf = Configure(env)

x86 = conf.TryCompile("""int main(){
#if !(defined(__i386__) || defined(i386) || defined(__i386) || defined(_M_IX86))
#error Not an x86
#endif
return 0;
}""", ".c")

x64 = conf.TryCompile("""int main(){
#if !(defined(__x86_64))
#error Not an x64
#endif
return 0;
}""", ".c")

if (x86 or x64):
	starargs = '$SOURCE $TARGET -stackcall -addressbits 32 -cputype 68000 -name s68000'

	if conf.env["PLATFORM"] == "darwin":
		starargs += " -stackalign"

	if x64:
		starargs += ' -x64'
		if conf.env["PLATFORM"] == "darwin":
			env.Append(ASFLAGS = "-fmacho64")
			starargs += ' -amd64'
		elif conf.env["PLATFORM"] == "posix":
			env.Append(ASFLAGS = ["-felf64"])
			starargs += ' -amd64'
		elif env["PLATFORM"] == "win64":
			env.Append(ASFLAGS = "-fwin64")
			starargs += ' -win64'
		env["AS"] = "yasm"
		env.Append(ASFLAGS=["-ax86", "-mamd64"]);
	else:
		if env["PLATFORM"] == "darwin":
			env.Append(ASFLAGS = "-fmacho")
		elif env["PLATFORM"] in ["win32", "cygwin"]:
			env.Append(ASFLAGS = "-fwin32")
		elif env["PLATFORM"] == "posix":
			env.Append(ASFLAGS = "-felf")

	starasm = conf.env.Command('starscr.asm', star, starargs)
	Srcs += starasm

env = conf.Finish()

Return("Srcs")
