import os

env = Environment()

sources = Split('''
	common/main.cpp common/LuaGL.cpp
''')

def pspBase(elfStrippedName):
	env.Platform('posix')
	env['CXX'] = 'psp-g++'
	env['LINK'] = 'psp-gcc'
	env.Append(CCFLAGS = Split('''
		-I /usr/local/pspdev/psp/sdk/include -I common
		-G0 -Wall -O2
	'''))
	env.Append(LIBS = Split('''
		png jpeg z GLU GL lua lualib m stdc++ pspdisplay pspge pspctrl pspvfpu c pspuser pspkernel psprtc
		'''))
	env.Append(LINKFLAGS = Split('''
		-L /usr/local/pspdev/psp/sdk/lib
	'''))
	sources.append(Split('''
		psp/main.cpp psp/gui.cpp
	'''))
	env['ENV']['PATH'] = os.environ['PATH']
	elf = env.Program('luaplayer.elf', sources)
	elf_fixed = env.Command('luaplayer_fixed.elf', elf, ['psp-fixup-imports $SOURCE -o $TARGET'])
	Depends(elf_fixed, elf)
	elf_stripped = env.Command(elfStrippedName, elf_fixed, ['psp-strip $SOURCE -o $TARGET'])
	Depends(elf_stripped, elf_fixed)
	return elf_stripped

system = ARGUMENTS.get('system', 'win32')
if system == 'ps3':
	env.Platform('posix')
	env.Append(CCFLAGS = Split('''
		-O2 -I /usr/src/linux-20061110/include -I common
	'''))
	env.Append(LIBS = Split('''
		m GLU OSMesa lua
	'''))
	sources.append(Split('''
		ps3/gui.cpp ps3/main.cpp
	'''))
	env.Program('release/ps3/luaplayer', sources)
elif system == 'win32':
	env.Platform('win32')
	env.Append(CCFLAGS = Split('''
		-I lua/src -I common
	'''))
	env.Append(LIBS = Split('''
		kernel32 user32 gdi32 OpenGL32
	'''))
	sources.append(Split('''
		win32/gui.cpp win32/main.cpp
		lua/src/lapi.c lua/src/lcode.c lua/src/ldebug.c lua/src/ldo.c lua/src/ldump.c lua/src/lfunc.c lua/src/lgc.c lua/src/llex.c lua/src/lmem.c
		lua/src/lobject.c lua/src/lopcodes.c lua/src/lparser.c lua/src/lstate.c lua/src/lstring.c lua/src/ltable.c lua/src/ltm.c
		lua/src/lundump.c lua/src/lvm.c lua/src/lzio.c
		lua/src/lauxlib.c lua/src/lbaselib.c lua/src/ldblib.c lua/src/liolib.c lua/src/lmathlib.c lua/src/loslib.c lua/src/ltablib.c
		lua/src/lstrlib.c lua/src/loadlib.c lua/src/linit.c
	'''))
	env.Program('release/win32/luaplayer', sources)
elif system == 'psp10':
	elf_stripped = pspBase('luaplayer_stripped.elf')
	pbp = env.Command('release/psp10/luaplayer/EBOOT.PBP', elf_stripped, ['pack-pbp $TARGET PARAM.SFO title-icon.png NULL NULL NULL NULL $SOURCE NULL'])
	Depends(pbp, elf_stripped)
elif system == 'psp15':
	elf_stripped = pspBase('release/psp15/luaplayer/EBOOT.PBP')
	pbp = env.Command('release/psp15/luaplayer%/EBOOT.PBP', elf_stripped, ['pack-pbp $TARGET PARAM.SFO title-icon.png NULL NULL NULL NULL NULL NULL'])
	Depends(pbp, elf_stripped)
elif system == 'macosx':
	env.Platform('darwin')
	env.Append(CCFLAGS = Split('''
		-I lua/src -I common -DMAC
		-O -arch i386 -arch ppc -fpascal-strings -Wall -g2 -I/System/Library/Frameworks/Carbon.framework/Headers
		-I/System/Library/Frameworks/OpenGL.framework/Headers
	'''))
	env.Append(LINKFLAGS = Split('''
		-arch i386 -arch ppc -framework Carbon -framework OpenGL -framework AGL -lstdc++
	'''))
	sources.append(Split('''
		macosx/gui.cpp macosx/main.cpp
		lua/src/lapi.c lua/src/lcode.c lua/src/ldebug.c lua/src/ldo.c lua/src/ldump.c lua/src/lfunc.c lua/src/lgc.c lua/src/llex.c lua/src/lmem.c
		lua/src/lobject.c lua/src/lopcodes.c lua/src/lparser.c lua/src/lstate.c lua/src/lstring.c lua/src/ltable.c lua/src/ltm.c
		lua/src/lundump.c lua/src/lvm.c lua/src/lzio.c
		lua/src/lauxlib.c lua/src/lbaselib.c lua/src/ldblib.c lua/src/liolib.c lua/src/lmathlib.c lua/src/loslib.c lua/src/ltablib.c
		lua/src/lstrlib.c lua/src/loadlib.c lua/src/linit.c
	'''))
	env.Program('release/macosx/luaplayer', sources)
elif system == 'linux':
	print 'not supported'
	Exit(-1)
else:
	print 'unknown system'
	Exit(-1)

