bad_apple_os/SConstruct

53 lines
1.5 KiB
Python

import subprocess
env = Environment(tools = ['default', 'compilation_db'])
env['AS'] = 'i686-elf-as'
env['CC'] = 'i686-elf-gcc'
env['CXX'] = 'i686-elf-g++'
env['LD'] = 'i686-elf-g++'
env.Append(CXXFLAGS = ['-ffreestanding', '-fno-exceptions', '-fno-rtti', '-std=c++20'])
env.Append(LINKFLAGS = ['-T', 'linker.ld', '-ffreestanding', '-nostdlib'])
env.Append(CPPPATH = ['#include', '#stdlib/include'])
env.Append(CCFLAGS = ['-g', '-O0'])
def get_crt_object(name: str) -> str:
cmd = [env['CXX']]
cmd.extend(env['CXXFLAGS'])
cmd.append(f'-print-file-name={name}')
result = subprocess.run(cmd, stdout=subprocess.PIPE)
return result.stdout.decode('utf-8').strip()
crtbegin_o = get_crt_object('crtbegin.o')
crtend_o = get_crt_object('crtend.o')
crti_o = env.Object('src/crt/crti.s')
crtn_o = env.Object('src/crt/crtn.s')
os_sources = Split('''
src/app/main.cpp
src/kernel/boot.s
src/kernel/startup.cpp
src/os/panic.cpp
src/os/tty.cpp
src/cstdlib/assert.cpp
src/cstdlib/stdio.cpp
src/cstdlib/stdlib.cpp
src/cstdlib/string.cpp
stdlib/src/exception.cpp
stdlib/src/new.cpp
''')
env['LINKCOM'] = env['LINKCOM'].replace('$_LIBFLAGS', f'{crti_o[0]} {crtbegin_o} $_LIBFLAGS {crtend_o} {crtn_o[0]}')
prog_os = env.Program(
target = 'os.bin',
source = os_sources,
LIBS = ['gcc']
)
env.Depends(prog_os, [crti_o, crtn_o])
env.Default(prog_os)
comp_db = env.CompilationDatabase(target = '#compile_commands.json')
env.Default(comp_db)