From 939022bb5eb7e421c2aab2f6cec78afb3fe5c195 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Thu, 13 Jan 2022 20:17:00 -0800 Subject: [PATCH] [build] Change memory_layout from csv to yaml I realized we don't need yet another format for configuration. As a bonus, yaml also allows for a more descriptive file. --- definitions/memory_layout.csv | 5 --- definitions/memory_layout.yaml | 17 ++++++++++ scripts/memory.py | 34 ++++++++++--------- src/kernel/kernel.module | 2 +- src/kernel/memory.h.cog | 2 +- src/libraries/bootproto/bootproto.module | 2 +- .../bootproto/include/bootproto/memory.h.cog | 2 +- 7 files changed, 39 insertions(+), 25 deletions(-) delete mode 100644 definitions/memory_layout.csv create mode 100644 definitions/memory_layout.yaml diff --git a/definitions/memory_layout.csv b/definitions/memory_layout.csv deleted file mode 100644 index 9ec2f54..0000000 --- a/definitions/memory_layout.csv +++ /dev/null @@ -1,5 +0,0 @@ -linear,64T,shared -bitmap,1T,shared -heap,64G -stacks,64G -buffers,64G diff --git a/definitions/memory_layout.yaml b/definitions/memory_layout.yaml new file mode 100644 index 0000000..9f6d465 --- /dev/null +++ b/definitions/memory_layout.yaml @@ -0,0 +1,17 @@ +--- +- name: linear + size: 64T + shared: true + +- name: bitmap + size: 1T + shared: true + +- name: heap + size: 64G + +- name: stacks + size: 64G + +- name: buffers + size: 64G diff --git a/scripts/memory.py b/scripts/memory.py index 47bf959..1acbea7 100644 --- a/scripts/memory.py +++ b/scripts/memory.py @@ -4,27 +4,29 @@ class Layout: sizes = {'G': 1024 ** 3, 'T': 1024 ** 4} + @staticmethod + def get_size(desc): + size, mag = int(desc[:-1]), desc[-1] + + try: + mult = Layout.sizes[mag] + except KeyError: + raise RuntimeError(f"No magnitude named '{mag}'.") + + return size * mult + def __init__(self, path): - import csv + from yaml import safe_load regions = [] addr = 1 << 64 - with open(path, newline='') as infile: - reader = csv.reader(infile) - for row in reader: - name, size = row[:2] - shared = (len(row) > 2 and "shared" in row[2]) - - size, mag = int(size[:-1]), size[-1] - - try: - mult = Layout.sizes[mag] - except KeyError: - raise RuntimeError(f"No magnitude named '{mag}'.") - - size *= mult + with open(path, 'r') as infile: + data = safe_load(infile.read()) + for r in data: + size = Layout.get_size(r["size"]) addr -= size - regions.append(Layout.Region(name, addr, size, shared)) + regions.append(Layout.Region(r["name"], addr, size, + r.get("shared", False))) self.regions = tuple(regions) diff --git a/src/kernel/kernel.module b/src/kernel/kernel.module index 8f4f626..b388ef4 100644 --- a/src/kernel/kernel.module +++ b/src/kernel/kernel.module @@ -68,7 +68,7 @@ kernel = module("kernel", from glob import glob from os.path import join -layout = join(source_root, "definitions/memory_layout.csv") +layout = join(source_root, "definitions/memory_layout.yaml") definitions = glob('definitions/**/*.def', recursive=True) kernel.add_depends(["memory.h.cog"], [layout]) diff --git a/src/kernel/memory.h.cog b/src/kernel/memory.h.cog index c6aa7b5..04f66de 100644 --- a/src/kernel/memory.h.cog +++ b/src/kernel/memory.h.cog @@ -37,7 +37,7 @@ constexpr unsigned kernel_buffer_pages = 16; from os.path import join from memory import Layout -layout = Layout(join(definitions_path, "memory_layout.csv")) +layout = Layout(join(definitions_path, "memory_layout.yaml")) l = max([len(r.name) for r in layout.regions]) for region in layout.regions: diff --git a/src/libraries/bootproto/bootproto.module b/src/libraries/bootproto/bootproto.module index 5d6a4ab..7496939 100644 --- a/src/libraries/bootproto/bootproto.module +++ b/src/libraries/bootproto/bootproto.module @@ -8,5 +8,5 @@ bp = module("bootproto", from os.path import join -layout = join(source_root, "definitions/memory_layout.csv") +layout = join(source_root, "definitions/memory_layout.yaml") bp.add_input("include/bootproto/memory.h.cog", deps=[layout]) diff --git a/src/libraries/bootproto/include/bootproto/memory.h.cog b/src/libraries/bootproto/include/bootproto/memory.h.cog index fa9b590..412f99a 100644 --- a/src/libraries/bootproto/include/bootproto/memory.h.cog +++ b/src/libraries/bootproto/include/bootproto/memory.h.cog @@ -11,7 +11,7 @@ namespace mem { from os.path import join from memory import Layout -layout = Layout(join(definitions_path, "memory_layout.csv")) +layout = Layout(join(definitions_path, "memory_layout.yaml")) for region in layout.regions: if region.shared: