import os

argenv=Environment()
# command line options
argenv.Replace(debug=ARGUMENTS.get("debug",0))
argenv.Replace(debugopt=ARGUMENTS.get("debugopt",0))
argenv.Replace(debugopt2=ARGUMENTS.get("debugopt2",0))
argenv.Replace(debugmem=ARGUMENTS.get("debugmem",0))
argenv.Replace(do_64bit_analysis=ARGUMENTS.get("do_64bit_analysis",1))
argenv.Replace(do_64bit_build=ARGUMENTS.get("do_64bit_build",2))
argenv.Replace(build_ida=ARGUMENTS.get("build_ida",1))
argenv.Replace(build_irdb=ARGUMENTS.get("build_irdb",1))
argenv.Replace(build_irdb_driver=ARGUMENTS.get("build_irdb_driver",0))
argenv.Replace(install=ARGUMENTS.get("install",1))
argenv.Replace(numeric_error_annots=ARGUMENTS.get("numeric_error_annots",1))
argenv.Replace(do_sccp=ARGUMENTS.get("do_sccp",1))

# environment options
argenv.Replace(SMPSA_HOME=os.environ['SMPSA_HOME'])
argenv.Replace(IDASDK=os.environ['IDASDK'])
argenv.Replace(IDAROOT=os.environ['IDAROOT'])
argenv.Replace(SECURITY_TRANSFORMS_HOME=os.environ['SECURITY_TRANSFORMS_HOME'])


if argenv['SMPSA_HOME'] is None:
    print 'Cannot proceed without SMPSA_HOME set.'
    exit(1)



if int(argenv['debug']) == 1:
	print "Setting debug mode"
	STARS_CCFLAGS=" -g "
	STARS_LDFLAGS=""
elif int(argenv['debugopt']) == 1:
	print "Setting debugopt mode"
	STARS_CCFLAGS=" -g -O1 "
	STARS_LDFLAGS=""
elif int(argenv['debugopt2']) == 1:
	print "Setting debugopt2 mode"
	STARS_CCFLAGS=" -g -O2 "
	STARS_LDFLAGS=""
elif int(argenv['debugmem']) == 1:
	print "Setting debugmem mode"
	STARS_CCFLAGS=" -g -fsanitize=address -fno-omit-frame-pointer "
	STARS_LDFLAGS="-lasan "
else:
	print "Setting release mode"
	STARS_CCFLAGS=" -O3 "
	STARS_LDFLAGS=""

if int(argenv['do_64bit_analysis']) == 1:
	STARS_CCFLAGS+=" -D__EA64__ "

if int(argenv['do_sccp']) == 1:
   STARS_CCFLAGS+=" -DSTARS_DO_SCCP "

if int(argenv['numeric_error_annots']) == 1:
   STARS_CCFLAGS+=" -DSTARS_EMIT_NUMERIC_ERROR_ANNOTS "

Export('argenv', 'STARS_CCFLAGS', 'STARS_LDFLAGS')

if int(argenv['build_ida']) == 1:
	if argenv['IDASDK'] is None:
    		print 'Cannot proceed without IDASDK set.'
    		exit(1)
	
	if argenv['IDAROOT'] is None:
    		print 'Cannot proceed without IDAROOT set.'
    		exit(1)

	print "Build IDA Plugin"
	lib=SConscript('SConscript.ida', variant_dir='build_ida')
	print "Done build IDA Plugin"
	test=argenv.Command(target="./test.log", source=lib, action="IDAROOT=$IDAROOT SMPSA_HOME=$SMPSA_HOME $SMPSA_HOME/tests/scripts/make_baseline.sh 2>&1 |tee ./test.log")
	argenv.Depends(test,lib)
	ab=argenv.AlwaysBuild(test)
	argenv.Default(ab)
	

if int(argenv['build_irdb']) == 1 or int(argenv['build_irdb_driver']) == 1:
	if argenv['SECURITY_TRANSFORMS_HOME'] is None:
	    print 'Cannot build libstars.a without SECURITY_TRANSFORMS_HOME set.  Did you forget the env. var.?  Or try setting build_irdb=0. '
	    exit(1)
	print "Build IDA/IRDB library"
	lib=SConscript('SConscript.irdb_lib', variant_dir='build_irdb_lib')



Default(lib)


pedi = Command( target = "./testoutput",
		source = "./SConscript",
                action = "if [ -f manifest.txt.config ]; then "+os.environ['PEDI_HOME']+"/pedi -m manifest.txt ; else echo Skipping PEDI; fi" )
Default( pedi )