polka/src/SConscript

62 lines
1.8 KiB
Text
Raw Normal View History

2014-01-30 15:13:54 -08:00
# SConscript
# vim: set ft=python:
# Eryn Wells <eryn@erynwells.me>
2016-02-27 12:27:44 -05:00
import os
import os.path
import shlex
import subprocess
2016-02-27 12:27:44 -05:00
2016-02-27 08:39:32 -08:00
files = [
'boot.s',
2016-02-27 13:50:51 -05:00
'Main.cc',
'Console.cc',
'ConsolePrintFormat.cc',
'Descriptors.cc',
2016-03-09 01:17:13 -05:00
'Interrupts.cc',
2016-03-19 04:05:09 -04:00
'Multiboot.cc',
2016-03-06 11:49:30 -05:00
'PIC.cc',
'cxa.cc',
'isr.S',
2016-03-13 13:53:19 -04:00
'kstd/CString.cc'
2016-02-27 08:39:32 -08:00
]
2016-02-27 12:27:44 -05:00
toolchain_bin = Dir(os.environ['POLKA_TOOLCHAIN']).Dir('bin')
env.Replace(AS=toolchain_bin.File('i686-elf-as'),
CC=toolchain_bin.File('i686-elf-gcc'),
CXX=toolchain_bin.File('i686-elf-g++'),
LINK=toolchain_bin.File('i686-elf-ld'))
env.Append(CCFLAGS='-ffreestanding',
CPPDEFINES='__polka',
CXXFLAGS='-fno-exceptions -fno-rtti',
LINKFLAGS='-nostdlib -lgcc')
2016-02-27 08:39:32 -08:00
# Global constructor files. These must be linked IN THIS ORDER.
def crtfile_path(name):
cmd = shlex.split(env.subst('$CC $CCFLAGS $CFLAGS -print-file-name={}'.format(name)))
return subprocess.check_output(cmd).strip()
crtbegin_file = Command('crtbegin.o', [], Copy('$TARGET', crtfile_path('crtbegin.o')))
crtend_file = Command('crtend.o', [], Copy('$TARGET', crtfile_path('crtend.o')))
crtinit_files = ['crti.s', crtbegin_file]
crtfini_files = [crtend_file, 'crtn.s']
2016-02-27 08:39:32 -08:00
linker_script = File('linker.ld')
kernel = Program('polka.bin', crtinit_files + files + crtfini_files, LINKFLAGS='-T {}'.format(linker_script.path))
2016-02-27 08:39:32 -08:00
Depends(kernel, linker_script)
Alias('kernel', kernel)
img_dir = Dir('img')
grub_cfg = File('grub.cfg')
image_dir = Command(img_dir, kernel, [
Mkdir(img_dir.Dir('boot/grub')),
2016-02-27 12:27:44 -05:00
Copy(os.path.join(img_dir.Dir('boot').path, '${SOURCE.file}'), '$SOURCE'),
Copy(img_dir.Dir('boot/grub'), grub_cfg.srcnode())
2016-02-27 08:39:32 -08:00
])
Clean(image_dir, img_dir)
image = Command('polka.img', image_dir, [
'grub-mkrescue -o $TARGET $SOURCE',
])
Alias('image', image)