(WIP) Loader for 64 bit kernel.
This commit is contained in:
@@ -18,15 +18,40 @@ crtend_o = get_crt_object('crtend.o')
|
||||
crti_o = env.Object('src/crt/crti.s')
|
||||
crtn_o = env.Object('src/crt/crtn.s')
|
||||
|
||||
i686_sources = Split('''
|
||||
src/kernel/boot.s
|
||||
x86_64_sources = Split('''
|
||||
src/kernel/startup.cpp
|
||||
''')
|
||||
|
||||
env['LINKCOM'] = env['LINKCOM'].replace('$_LIBFLAGS', f'{crti_o[0].abspath} {crtbegin_o} $_LIBFLAGS {crtend_o} {crtn_o[0].abspath}')
|
||||
env['KERNEL_LINKCOM'] = env['LINKCOM'].replace('$_LIBFLAGS', f'{crti_o[0].abspath} {crtbegin_o} $_LIBFLAGS {crtend_o} {crtn_o[0].abspath}')
|
||||
|
||||
env.Append(KERNEL_SOURCES = [env.File(f) for f in i686_sources])
|
||||
env.Append(KERNEL_DEPENDENCIES = [crti_o, crtn_o])
|
||||
x86_64_iso_files = [
|
||||
{
|
||||
"source": env.File("boot/grub.cfg"),
|
||||
"target": "boot/grub/grub.cfg"
|
||||
},
|
||||
{
|
||||
"source": env.File("#os.bin"),
|
||||
"target": "boot/os.bin"
|
||||
},
|
||||
{
|
||||
"source": env.File("#loader.bin"),
|
||||
"target": "boot/loader.bin"
|
||||
}
|
||||
]
|
||||
|
||||
# also compile the loader (as i686-elf)
|
||||
loader_sources = Split('''
|
||||
src/loader/boot.asm
|
||||
''')
|
||||
nasm_include_dir = env.Dir('src/loader')
|
||||
prog_loader = env.Command(
|
||||
'#loader.bin', 'src/loader/boot.asm', f'nasm -I"{nasm_include_dir.abspath}" "$SOURCE" -f bin -o "$TARGET"'
|
||||
)
|
||||
|
||||
# finally update the environment
|
||||
env.Append(KERNEL_SOURCES = [env.File(f) for f in x86_64_sources])
|
||||
env.Append(KERNEL_DEPENDENCIES = [crti_o, crtn_o, prog_loader])
|
||||
env.Append(LINKFLAGS = ['-mcmodel=large', '-mno-red-zone', '-mno-mmx', '-mno-sse', '-mno-sse2'])
|
||||
env.Append(ISO_FILES = x86_64_iso_files)
|
||||
|
||||
Return('env')
|
||||
|
||||
Reference in New Issue
Block a user