Improved SCons script for building the userspace stdlib.
This commit is contained in:
parent
a096458bdb
commit
3cd4fe9537
@ -23,6 +23,7 @@ stdlib = GetOption('stdlib')
|
||||
env = Environment(tools = ['default', 'compilation_db'], ENV = os.environ) # TODO inheriting the environment is not a best practice
|
||||
env.Append(CCFLAGS = ['-g', '-O0', '-fno-stack-protector'])
|
||||
env.Append(CPPDEFINES = ['BASTL_EXTENSIONS=1'])
|
||||
env['TARGET_ARCH'] = target
|
||||
# env.Append(CCFLAGS = ['-O2'])
|
||||
|
||||
env['ISO_FILES'] = []
|
||||
|
@ -1,16 +1,20 @@
|
||||
|
||||
Import('env')
|
||||
|
||||
shared_sources = Split('''
|
||||
env['CRTI_PATH'] = env.File(f'src/crti.{env["TARGET_ARCH"]}.s').abspath
|
||||
env['CRTN_PATH'] = env.File(f'src/crtn.{env["TARGET_ARCH"]}.s').abspath
|
||||
env['CRT0_PATH'] = env.File(f'src/crt0.{env["TARGET_ARCH"]}.s').abspath
|
||||
|
||||
stdlib_sources = Split(f'''
|
||||
src/assert.cpp
|
||||
src/stdio.cpp
|
||||
src/stdlib.cpp
|
||||
src/string.cpp
|
||||
|
||||
src/memory.{env['TARGET_ARCH']}.s
|
||||
''')
|
||||
|
||||
kernel_sources = shared_sources
|
||||
|
||||
env.Append(KERNEL_SOURCES = [env.File(f) for f in kernel_sources])
|
||||
env.Append(KERNEL_SOURCES = [env.File(f) for f in stdlib_sources])
|
||||
|
||||
### Stdlib
|
||||
stdlib_env = env.Clone()
|
||||
@ -18,20 +22,17 @@ stdlib_env['AS'] = 'x86_64-baos-elf-as'
|
||||
stdlib_env['CC'] = 'x86_64-baos-elf-gcc'
|
||||
stdlib_env['CXX'] = 'x86_64-baos-elf-g++'
|
||||
stdlib_env['LD'] = 'x86_64-baos-elf-g++'
|
||||
stdlib_env['OBJSUFFIX'] = f'.baos{stdlib_env["OBJSUFFIX"]}'
|
||||
stdlib_env.Append(CXXFLAGS = ['-fno-exceptions', '-fno-rtti', '-std=c++20'])
|
||||
stdlib_env.Append(CPPPATH = ['#targets/_any/bastl/include', '#targets/_any/stdlib/include', '#targets/_any/kernel/include'])
|
||||
|
||||
stdlib_sources = Split('''
|
||||
src/crt0.s
|
||||
''')
|
||||
for src in shared_sources:
|
||||
new_src = stdlib_env.File(f'#.stdlib_variant/{stdlib_env.File(src).name}').abspath
|
||||
stdlib_env.Command(new_src, src, Copy("$TARGET", "$SOURCE"))
|
||||
stdlib_sources.append(new_src)
|
||||
lib_stdlib = stdlib_env.StaticLibrary(
|
||||
target = stdlib_env.File('#stdlib.a'),
|
||||
target = stdlib_env.File('#stdlib/stdlib.a'),
|
||||
source = stdlib_sources
|
||||
)
|
||||
stdlib_env.Default(lib_stdlib)
|
||||
crti_o = stdlib_env.Object(target = '#stdlib/crti.o', source = stdlib_env['CRTI_PATH'])
|
||||
crtn_o = stdlib_env.Object(target = '#stdlib/crtn.o', source = stdlib_env['CRTN_PATH'])
|
||||
crt0_o = stdlib_env.Object(target = '#stdlib/crt0.o', source = stdlib_env['CRT0_PATH'])
|
||||
stdlib_env.Default([lib_stdlib, crti_o, crtn_o, crt0_o])
|
||||
|
||||
Return('env')
|
||||
|
@ -13,4 +13,4 @@ _init:
|
||||
_fini:
|
||||
push %rbp
|
||||
movq %rsp, %rbp
|
||||
/* gcc will nicely put the contents of crtbegin.o's .fini section here. */
|
||||
/* gcc will nicely put the contents of crtbegin.o's .fini section here. */
|
@ -24,16 +24,14 @@ def get_crt_object(name: str) -> str:
|
||||
|
||||
crtbegin_o = get_crt_object('crtbegin.o')
|
||||
crtend_o = get_crt_object('crtend.o')
|
||||
crti_o = kernel_env.Object('src/crt/crti.s')
|
||||
crtn_o = kernel_env.Object('src/crt/crtn.s')
|
||||
crti_o = kernel_env.Object(kernel_env['CRTI_PATH'])
|
||||
crtn_o = kernel_env.Object(kernel_env['CRTN_PATH'])
|
||||
kernel_env['LINKCOM'] = env['LINKCOM'].replace('$_LIBFLAGS', f'{crti_o[0].abspath} {crtbegin_o} -Wl,--start-group $_LIBFLAGS -Wl,--end-group -lgcc {crtend_o} {crtn_o[0].abspath}')
|
||||
|
||||
kernel_isr_sources = env['KERNEL_ISR_SOURCES'] + Split('''
|
||||
|
||||
''')
|
||||
kernel_sources = env['KERNEL_SOURCES'] + Split('''
|
||||
src/cstdlib/memory.s
|
||||
|
||||
src/kernel/boot.s
|
||||
src/kernel/startup.cpp
|
||||
''') + [kernel_env.Object(f, CCFLAGS = kernel_env['CCFLAGS'] + ['-mgeneral-regs-only']) for f in kernel_isr_sources]
|
||||
|
Loading…
x
Reference in New Issue
Block a user