Split up source and added basic support for different targets.
This commit is contained in:
56
SConstruct
56
SConstruct
@@ -1,52 +1,36 @@
|
||||
|
||||
import subprocess
|
||||
|
||||
AddOption(
|
||||
'--target',
|
||||
dest = 'target',
|
||||
type = 'choice',
|
||||
choices = ('i686', 'x86_64'),
|
||||
nargs = 1,
|
||||
action = 'store',
|
||||
default = 'i686'
|
||||
)
|
||||
|
||||
target = GetOption('target')
|
||||
|
||||
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', '#bastl/include'])
|
||||
env.Append(CPPPATH = ['#targets/_any/include', '#bastl/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
|
||||
|
||||
bastl/src/exception.cpp
|
||||
bastl/src/new.cpp
|
||||
''')
|
||||
env['LINKCOM'] = env['LINKCOM'].replace('$_LIBFLAGS', f'{crti_o[0]} {crtbegin_o} $_LIBFLAGS {crtend_o} {crtn_o[0]}')
|
||||
env['KERNEL_SOURCES'] = []
|
||||
env['KERNEL_DEPENDENCIES'] = []
|
||||
env = SConscript('bastl/SConscript', exports = 'env')
|
||||
env = SConscript('targets/_any/SConscript', exports = 'env')
|
||||
env = SConscript(f'targets/{target}/SConscript', exports = 'env')
|
||||
|
||||
prog_os = env.Program(
|
||||
target = 'os.bin',
|
||||
source = os_sources,
|
||||
source = env['KERNEL_SOURCES'],
|
||||
LIBS = ['gcc']
|
||||
)
|
||||
env.Depends(prog_os, [crti_o, crtn_o])
|
||||
env.Depends(prog_os, env['KERNEL_DEPENDENCIES'])
|
||||
env.Default(prog_os)
|
||||
comp_db = env.CompilationDatabase(target = '#compile_commands.json')
|
||||
env.Default(comp_db)
|
||||
|
||||
Reference in New Issue
Block a user