Files
jsix/SConstruct
2019-01-17 00:51:45 -08:00

54 lines
1.4 KiB
Python

from os.path import join
import SCons.Node
def target_from_source_nosplit(node, prefix, suffix, splitext):
return node.dir.Entry(prefix + node.name + suffix)
SCons.Node._target_from_source_map['nosplit'] = target_from_source_nosplit
SCons.Node._target_from_source_map[1] = target_from_source_nosplit
def RGlob(path, pattern):
from os import walk
from itertools import chain
return list(chain.from_iterable([Glob(join(d, pattern)) for d, _, _ in walk(path)]))
def subdirs(path):
from os import listdir
from os.path import isdir, join
return [d for d in listdir(path) if isdir(join(path, d))]
SetOption('implicit_cache', 1)
Decider('MD5-timestamp')
VariantDir('src', 'build', duplicate=0)
env = SConscript('scons/default_env.scons')
target = SConscript('scons/target_env.scons', 'env')
libs = {}
for lib in subdirs('src/libraries'):
libs[lib] = SConscript(join('src/libraries', lib, 'SConscript'), 'target RGlob')
kernel = target.Clone()
kernel.Append(CCFLAGS = [
'-mno-sse',
'-mno-red-zone',
])
kernel.Append(
CPPPATH = [
'src/kernel',
'src/libraries/elf/include',
'src/libraries/initrd/include',
'src/libraries/kutil/include',
],
ASFLAGS = ['-I', 'src/kernel/'],
LIBS = libs.values() + ['c'],
LINKFLAGS = ['-T', File('#src/arch/x86_64/kernel.ld').abspath],
)
kernel.Program(
'popcorn.elf',
RGlob('src/kernel', '*.cpp') +
RGlob('src/kernel', '*.s'))
# vim: ft=python et