add python manifest generation

This commit is contained in:
2026-04-08 23:27:50 +03:00
parent b5162a19e8
commit 7ec285a966
2 changed files with 42 additions and 2 deletions

View File

@@ -45,7 +45,7 @@ vpath %.h $(sort $(dir $(C_HEADERS)))
rebuild: clean | build rebuild: clean | build
all: all: build manifest
build: date Dir $(C_HEADERS) target build: date Dir $(C_HEADERS) target
@@ -60,12 +60,18 @@ $(BUILD_DIR)/$(TARGET).so: $(OBJECTS)
@echo -e '\033[1;32mELF ('$(ARCH)')\t'$(OBJECTS)'\n\t\t\t->\t'$@'\033[0m' @echo -e '\033[1;32mELF ('$(ARCH)')\t'$(OBJECTS)'\n\t\t\t->\t'$@'\033[0m'
@$(CC) $(LFLAGS) $(OBJECTS) -o $(BUILD_DIR)/$(TARGET).so @$(CC) $(LFLAGS) $(OBJECTS) -o $(BUILD_DIR)/$(TARGET).so
manifest: $(MANIFEST_TARGETS) manifest: $(MANIFEST_BUILD_DIR)/MANIFEST.json
$(MANIFEST_BUILD_DIR)/MANIFEST.json: $(MANIFEST_TARGETS)
@for elf in $(MANIFEST_TARGETS); do \ @for elf in $(MANIFEST_TARGETS); do \
echo -e "\033[1;32mRUN\t$$elf\033[0m"; \ echo -e "\033[1;32mRUN\t$$elf\033[0m"; \
$$elf $(MANIFEST_BUILD_DIR) || { echo -e "\033[0;31merror running $$elf\033[0m"; exit 1; }; \ $$elf $(MANIFEST_BUILD_DIR) || { echo -e "\033[0;31merror running $$elf\033[0m"; exit 1; }; \
done done
@echo -e "\033[1;32mPY\t$@\033[0m"
@python $(MANIFEST_SRC_DIR)/gen_manifest_json.py $(MANIFEST_BUILD_DIR)
$(MANIFEST_BUILD_DIR)/%.elf: $(MANIFEST_SRC_DIR)/%.c Makefile | $(MANIFEST_BUILD_DIR) $(MANIFEST_BUILD_DIR)/%.elf: $(MANIFEST_SRC_DIR)/%.c Makefile | $(MANIFEST_BUILD_DIR)

View File

@@ -0,0 +1,34 @@
import sys
import csv
import json
def main():
if len(sys.argv) != 2:
print('provide manifest data directory')
return
manifest_dir = sys.argv[1]
mem_segments = []
out_manifest = {
'mem_segments': mem_segments
}
with open(manifest_dir + '/seg_data.csv', 'r', newline='') as csvfile:
reader = csv.DictReader(csvfile, delimiter=';')
for line in reader:
mem_segments.append(
{
'seg_id': int(line['seg_id']),
'name': line['name'],
'word_len': int(line['word_len']),
'default_size': int(line['default_size']),
'default_addr': int(line['default_addr']),
'is_executable': line['is_executable'] == '1'
}
)
with open(manifest_dir + '/MANIFEST.json', 'w') as f:
json.dump(out_manifest, f, indent=4)
if __name__ == '__main__':
main()