# @file   wscript
# @brief  FD boot setup code
#
# (C) 2011 KATO Takeshi
#


setup_asflags = [
]

setup_includes = [
]

setup_linkflags = [
    '-nostdlib',
    '-static',
]

setup_source = [
    'hpet_timer.cc',
    'log_access.cc',
    'log_buf.cc',
    'lzmadecwrap.cc',
    'memory_alloc.cc',
    'memops.cc',
    'prekernel.cc',
    'termchain.cc',
    'videoterm.cc',
]

setup_asm_source = [
    'a20.S',
    'interrupt_handler.S',
    'setup.S',
]


def build(bld):
	setup_target = bld.path.find_or_declare('setup.bin')

	setup_includes.append(bld.top_dir + '/external/lzma/C')

	linker_script = bld.path.find_node('setup.ld')
	setup_linkflags.append('-T'+linker_script.abspath())
	bld.add_manual_dependency(setup_target, linker_script)

	setup_linkflags2 = [bld.env.LINK_PASS + f for f in setup_linkflags]

	# assemble-->
	setup_rule_a = '${CC} -c ${SRC} -o ${TGT} ' + ' '.join(setup_asflags)

	for asm_src in setup_asm_source:
		srcnode = bld.path.find_node(asm_src)
		objnode = srcnode.change_ext('.o')

		bld(target=objnode, source=srcnode, rule=setup_rule_a)

		# .o を setup_source に入れられないためリンクフラグに入れる。
		setup_linkflags2.append(objnode.abspath())
		bld.add_manual_dependency(setup_target, objnode)
	# <--assemble

	map = bld.path.find_or_declare('setup.map')
	setup_linkflags2.append('-Wl,-Map,'+map.abspath())

	setup_source.append(bld.srcnode.find_node('external/lzma/C/LzmaDec.c'))
	bld.program(
	    target    = setup_target,
	    source    = setup_source,
	    use       = ['setup_libs', 'setup_objs', 'SETUP'],
	    includes  = setup_includes,
	    cxxflags  = [],
	    linkflags = setup_linkflags2,
	)

