mirror of
https://github.com/AsahiLinux/m1n1
synced 2024-11-10 01:34:12 +00:00
m1n1.loadobjs: Support loading of inline C snippets
Signed-off-by: Martin Povišer <povik@protonmail.com>
This commit is contained in:
parent
9212ac2036
commit
72c6170ee8
2 changed files with 27 additions and 4 deletions
6
Makefile
6
Makefile
|
@ -123,7 +123,7 @@ TARGET_RAW := m1n1.bin
|
|||
|
||||
DEPDIR := build/.deps
|
||||
|
||||
.PHONY: all clean format update_tag update_cfg
|
||||
.PHONY: all clean format update_tag update_cfg invoke_cc
|
||||
all: update_tag update_cfg build/$(TARGET) build/$(TARGET_RAW)
|
||||
clean:
|
||||
rm -rf build/*
|
||||
|
@ -155,6 +155,10 @@ build/%.o: src/%.c
|
|||
@mkdir -p "$(dir $@)"
|
||||
@$(CC) -c $(CFLAGS) -MMD -MF $(DEPDIR)/$(*F).d -MQ "$@" -MP -o $@ $<
|
||||
|
||||
# special target for usage by m1n1.loadobjs
|
||||
invoke_cc:
|
||||
@$(CC) -c $(CFLAGS) -Isrc -o $(OBJFILE) $(CFILE)
|
||||
|
||||
build/$(NAME).elf: $(BUILD_OBJS) m1n1.ld
|
||||
@echo " LD $@"
|
||||
@$(LD) -T m1n1.ld $(LDFLAGS) -o $@ $(BUILD_OBJS)
|
||||
|
|
|
@ -21,10 +21,11 @@ def tool_output_lines(progname, args):
|
|||
yield line.decode("ascii")
|
||||
proc.wait()
|
||||
if proc.returncode:
|
||||
raise Exception(f"{repr(cmdline)} returned status {proc.returncode}")
|
||||
raise Exception(f"{repr(cmdline)} exited with status {proc.returncode}")
|
||||
|
||||
def run_tool(progname, args):
|
||||
subprocess.check_call(_tool_cmdline(progname, args), shell=True)
|
||||
def run_tool(progname, args, silent=False):
|
||||
subprocess.check_call(_tool_cmdline(progname, args), shell=True,
|
||||
stdout=subprocess.DEVNULL if silent else None)
|
||||
|
||||
|
||||
class LinkedProgram:
|
||||
|
@ -156,8 +157,26 @@ class LinkedProgram:
|
|||
return None, None
|
||||
return self.symbols[idx]
|
||||
|
||||
def load_inline_c(self, source):
|
||||
tmp = tempfile.mkdtemp()
|
||||
cfile = tmp + ".c"
|
||||
objfile = tmp + ".o"
|
||||
with open(cfile, "w") as f:
|
||||
f.write(source)
|
||||
run_tool("make", f"-C {self.SOURCE_ROOT} invoke_cc "
|
||||
f"OBJFILE={objfile} CFILE={cfile}", silent=True)
|
||||
self.load_obj(objfile)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from m1n1.setup import *
|
||||
lp = LinkedProgram(u)
|
||||
lp.debug_printf("hello from the other side! (%d)\n", 42)
|
||||
lp.load_inline_c('''
|
||||
#include "utils.h"
|
||||
int add(int a, int b) {
|
||||
debug_printf("adding %d and %d\\n", a, b);
|
||||
return a + b;
|
||||
}
|
||||
''')
|
||||
print(f"1 + 2 = {lp.add(1, 2)}")
|
||||
|
|
Loading…
Reference in a new issue