From 8ceb3e2e49f045649d90c7c159aca8a633c0f09c Mon Sep 17 00:00:00 2001 From: flysand7 Date: Sat, 26 Aug 2023 17:08:46 +1100 Subject: [PATCH] add more options --- build.py | 52 +++++++++++++++++++++++++++++++++++++++++++------ loader/loader.h | 2 +- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/build.py b/build.py index cec1fc8..46d2755 100755 --- a/build.py +++ b/build.py @@ -9,9 +9,16 @@ import re arg_parser = argparse.ArgumentParser(description="Build ciabatta", formatter_class=argparse.ArgumentDefaultsHelpFormatter) arg_parser.add_argument("-t", "--test", help="Specify a file to compile with ciabatta") +arg_parser.add_argument("-m", "--mode", help="Specify mode (release, debug)") +arg_parser.add_argument("--ld", action="store_true", help="Enable loader debugging (only works with --mode debug)") args = vars(arg_parser.parse_args()) test_file = args['test'] +build_mode = args['mode'] +loader_debugging_enabled = args['ld'] + +if build_mode == None: + build_mode = 'debug' class colors: grey='\033[38;5;243m' @@ -47,6 +54,28 @@ cc_flags = [] cc_defines = [] cc_includes = [] +cc_flags_stack = [] +def cc_flags_push(): + global cc_flags + global cc_flags_stack + cc_flags_stack.append(cc_flags) + cc_flags = cc_flags.copy() +def cc_flags_pop(): + global cc_flags + global cc_flags_stack + cc_flags = cc_flags_stack.pop() + +cc_defines_stack = [] +def cc_defines_push(): + global cc_defines + global cc_defines_stack + cc_defines_stack.append(cc_defines) + cc_defines = cc_defines.copy() +def cc_defines_pop(): + global cc_defines + global cc_defines_stack + cc_defines = cc_defines_stack.pop() + def compile(output, inputs, additional_flags=[]): flags_cmdline = ' '.join(cc_flags + additional_flags) defines_cmdline = ' '.join(map(prefix('-D '), map(quote, cc_defines))) @@ -85,16 +114,23 @@ target_abi = 'sysv' target_arch = 'x86-64' target_os = 'linux' -cc_flags.extend(['-nostdlib', '-fno-stack-protector']) -cc_flags.extend(['-g', '-O0']) -cc_defines.append('_DEBUG') cc_defines.append(f'_CIA_OS_CONF=\\"os/{target_os}/conf.h\\"') +cc_flags.extend(['-nostdlib', '-fno-stack-protector']) + +if build_mode == 'debug': + cc_flags.extend(['-g', '-O0']) + cc_defines.append('_DEBUG') +elif build_mode == 'release': + cc_flags.extend(['-O3']) + cc_defines.append('NDEBUG') cc_includes.append('include') cc_includes.append('include/linux') # Build the dynamic loader -loader_flags = [ +cc_flags_push() +cc_defines_push() +cc_flags.extend([ '-Wl,-e,_dlstart', '-Wl,--sort-section,alignment', '-Wl,--sort-common', @@ -102,10 +138,14 @@ loader_flags = [ '-Wl,--hash-style=both', '-Wl,--no-undefined', '-Wl,--exclude-libs=ALL' -] +]) +if loader_debugging_enabled: + cc_defines.append('_CIA_LD_DEBUG') print_step("Building lib/ld-cia.so\n") assemble_obj('bin/loader-entry.o', [f'arch/{target_abi}_{target_arch}/loader-entry.asm'], ['-f "elf64"']) -compile_shared('lib/ld-cia.so', ['bin/loader-entry.o','loader/loader-self-reloc.c','loader/loader.c'], loader_flags) +compile_shared('lib/ld-cia.so', ['bin/loader-entry.o','loader/loader-self-reloc.c','loader/loader.c']) +cc_defines_pop() +cc_flags_pop() # Build the ciabatta print_step("Building lib/cia.a\n") diff --git a/loader/loader.h b/loader/loader.h index 3c4d29b..ecc0bb4 100644 --- a/loader/loader.h +++ b/loader/loader.h @@ -107,7 +107,7 @@ static void printf(char *fmt, ...) { va_end(args); } -#if defined(_DEBUG) +#if defined(_DEBUG) && defined(_CIA_LD_DEBUG) #define _dbg_print_char(c) print_char(c) #define _dbg_print_string(s) print_string(s) #define _dbg_print_string_n(s,n) print_string_n(s,n)