52 lines
1.4 KiB
Python
52 lines
1.4 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'])
|
|
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/stdlib/assert.cpp
|
|
src/stdlib/exception.cpp
|
|
src/stdlib/new.cpp
|
|
src/stdlib/stdio.cpp
|
|
src/stdlib/stdlib.cpp
|
|
src/stdlib/string.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)
|