#
# (C) 2012-2014 KATO Takeshi
#

import os.path


def load_config(x, cf):
	def_config(x, cf, 'ARCH', 'x86_64')
	def_config(x, cf, 'ARCHID', 'ARCH_'+x.env.CONFIG_ARCH, quote=False)

	def_config(x, cf, 'DEBUG', 0)
	def_config(x, cf, 'DEBUG_VALIDATE', 0)
	def_config(x, cf, 'DEBUG_VERBOSE', 0)

	# 0:disable / 1:enable boot phase debugging.
	def_config(x, cf, 'DEBUG_BOOT', 0)

	# verbose level of ACPI logging.
	def_config(x, cf, 'DEBUG_ACPI_VERBOSE', 0)

	# max cpu count.
	def_config(x, cf, 'MAX_CPUS', 1)

	# 0:nopreemption kernel / 1:preemption kernel
	def_config(x, cf, 'PREEMPT', 1)

	# tick frequency
	def_config(x, cf, 'TICK_HZ', 1000000000)

	# 0:disable / 1:enable ACPI.
	def_config(x, cf, 'ACPI', 0)

	# 0:disable / 1:enable APIC.
	def_config(x, cf, 'APIC', None)

	# 0:disable / 1:enable HPET.
	def_config(x, cf, 'HPET', 0)

	# 0:disable / 1:enable multiboot kernel generation
	def_config(x, cf, 'MULTIBOOT', 0)

	# 0:disable / 1:enable multiboot2 kernel generation
	def_config(x, cf, 'MULTIBOOT2', 0)


	env_config(x, cf, 'COMMON_CFLAGS', ['-pipe', '-Wall', '-Wextra'])
	env_config(x, cf, 'COMMON_CXXFLAGS', ['-pipe', '-Wall', '-Wextra'])

	if x.env['CONFIG_ACPI']:
		env_config(x, cf, 'CFLAGS_ACPICA', '-pipe')

	# other enviroment variables.
	for key in cf.keys():
		if not key.startswith('_'):
			x.env[key] = cf[key]


def def_config(x, config, name, default_val, quote=True):
	if name in config:
		x.define('CONFIG_'+name, config[name], quote=quote)
		x.env['CONFIG_'+name] = config[name]
		del config[name]
	elif default_val != None:
		x.define('CONFIG_'+name, default_val, quote=quote)
		x.env['CONFIG_'+name] = default_val

def env_config(x, config, name, default_val):
	if name in config:
		x.env[name] = config[name]
		del config[name]
	elif default_val != None:
		x.env[name] = default_val

def configure(x):
	cf = dict()

	config_file = x.path.parent.find_node(x.options.option_file)
	if config_file:
		execfile(config_file.abspath(), cf)

	load_config(x, cf)

	x.write_config_header('../include/config.h')


configure(opt)


