From 5d1fdd0e818f910e5865e9dcbe0a2ae9c7e3bde8 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Wed, 12 Jul 2023 19:45:43 -0700 Subject: [PATCH] [all] Reference headers in src instead of copying This is the second of two big changes to clean up includes throughout the project. Since I've started using clangd with Neovim and using VSCode's intellisense, my former strategy of copying all header files into place in `build/include` means that the real files don't show up in `compile_commands.json` and so display many include errors when viewing those header files in those tools. That setup was mostly predicated on a desire to keep directory depths small, but really I don't think paths like `src/libraries/j6/j6` are much better than `src/libraries/j6/include/j6`, and the latter doesn't have the aforementioned issues, and is clearer to the casual observer as well. Some additional changes: - Added a new module flag `copy_headers` for behavior similar to the old style, but placing headers in `$module_dir/include` instead of the global `build/include`. This was needed for external projects that don't follow the same source/headers folder structure - in this case, `zstd`. - There is no longer an associated `headers.*.ninja` for each `module.*.ninja` file, as only parsed headers need to be listed; this functionality has been moved back into the module's ninja file. --- assets/debugging/jsix.elf-gdb.py | 2 +- external/zstd.module | 1 + scripts/bonnibel/module.py | 81 ++++++++----------- scripts/bonnibel/project.py | 4 - scripts/bonnibel/source.py | 26 +++--- src/libraries/bootproto/bootproto.module | 2 +- .../bootproto/{ => include}/bootproto/acpi.h | 0 .../{ => include}/bootproto/bootconfig.h | 0 .../bootproto/devices/framebuffer.h | 0 .../bootproto/{ => include}/bootproto/init.h | 0 .../{ => include}/bootproto/kernel.h | 0 .../{ => include}/bootproto/memory.h.cog | 0 src/libraries/cpu/{ => include}/cpu/cpu_id.h | 0 .../cpu/{ => include}/cpu/features.inc | 0 src/libraries/elf/{ => include}/elf/file.h | 0 src/libraries/elf/{ => include}/elf/headers.h | 0 .../j6/{ => include}/j6/cap_flags.h.cog | 0 src/libraries/j6/{ => include}/j6/channel.hh | 0 .../j6/{ => include}/j6/condition.hh | 0 src/libraries/j6/{ => include}/j6/errors.h | 0 src/libraries/j6/{ => include}/j6/flags.h | 0 src/libraries/j6/{ => include}/j6/init.h | 0 src/libraries/j6/{ => include}/j6/memutils.h | 2 +- src/libraries/j6/{ => include}/j6/mutex.hh | 0 src/libraries/j6/{ => include}/j6/protocols.h | 0 .../j6/protocols/service_locator.h | 0 .../j6/{ => include}/j6/syscalls.h.cog | 0 .../j6/{ => include}/j6/sysconf.h.cog | 0 src/libraries/j6/{ => include}/j6/syslog.hh | 0 .../j6/{ => include}/j6/tables/log_areas.inc | 0 .../{ => include}/j6/tables/object_types.inc | 0 .../j6/{ => include}/j6/tables/syscalls.inc | 0 .../j6/{ => include}/j6/tables/vm_flags.inc | 0 src/libraries/j6/{ => include}/j6/thread.hh | 0 src/libraries/j6/{ => include}/j6/types.h | 0 .../{ => include}/__j6libc/arch/amd64/errno.h | 0 .../libc/{ => include}/__j6libc/file.h | 0 .../libc/{ => include}/__j6libc/mbstate_t.h | 0 .../libc/{ => include}/__j6libc/uchar.h | 0 .../libc/{ => include}/arch/amd64/errno.h | 0 src/libraries/libc/{ => include}/assert.h | 0 src/libraries/libc/{ => include}/complex.h | 0 src/libraries/libc/{ => include}/ctype.h | 0 src/libraries/libc/{ => include}/errno.h.cog | 0 src/libraries/libc/{ => include}/fenv.h | 0 .../libc/{ => include}/inttypes.h.cog | 0 src/libraries/libc/{ => include}/locale.h | 0 src/libraries/libc/{ => include}/math.h | 0 src/libraries/libc/{ => include}/setjmp.h | 0 src/libraries/libc/{ => include}/signal.h | 0 .../libc/{ => include}/stdatomic.h.cog | 0 src/libraries/libc/{ => include}/stdio.h | 0 src/libraries/libc/{ => include}/stdlib.h | 0 src/libraries/libc/{ => include}/string.h | 4 +- src/libraries/libc/{ => include}/tgmath.h | 0 src/libraries/libc/{ => include}/threads.h | 0 src/libraries/libc/{ => include}/time.h | 0 src/libraries/libc/{ => include}/uchar.h | 0 src/libraries/libc/{ => include}/wchar.h | 0 src/libraries/libc/{ => include}/wctype.h | 0 src/libraries/libc/libc.module | 12 +-- .../libc_free/{ => include}/__j6libc/bits.h | 0 .../libc_free/{ => include}/__j6libc/casts.h | 0 .../libc_free/{ => include}/__j6libc/null.h | 0 .../{ => include}/__j6libc/restrict.h | 0 .../libc_free/{ => include}/__j6libc/size_t.h | 0 .../{ => include}/__j6libc/wchar_t.h | 0 src/libraries/libc_free/{ => include}/float.h | 0 .../libc_free/{ => include}/iso646.h | 0 .../libc_free/{ => include}/limits.h | 0 .../libc_free/{ => include}/stdalign.h | 0 .../libc_free/{ => include}/stdarg.h | 0 .../libc_free/{ => include}/stdbool.h | 0 .../libc_free/{ => include}/stddef.h | 0 .../libc_free/{ => include}/stdint.h.cog | 0 .../libc_free/{ => include}/stdnoreturn.h | 0 .../util/{ => include}/util/allocator.h | 0 .../util/{ => include}/util/assert.h | 0 .../util/{ => include}/util/basic_types.h | 2 +- .../util/{ => include}/util/bip_buffer.h | 0 .../util/{ => include}/util/bitset.h | 0 src/libraries/util/{ => include}/util/cdb.h | 0 .../util/{ => include}/util/counted.h | 0 src/libraries/util/{ => include}/util/deque.h | 0 .../util/{ => include}/util/enum_bitfields.h | 0 .../util/{ => include}/util/format.h | 0 src/libraries/util/{ => include}/util/hash.h | 0 .../util/{ => include}/util/linked_list.h | 0 src/libraries/util/{ => include}/util/map.h | 0 src/libraries/util/{ => include}/util/misc.h | 0 src/libraries/util/{ => include}/util/new.h | 0 .../util/{ => include}/util/no_construct.h | 0 .../util/{ => include}/util/node_map.h | 0 .../util/{ => include}/util/pointers.h | 0 .../util/{ => include}/util/radix_tree.h | 0 .../util/{ => include}/util/spinlock.h | 0 src/libraries/util/{ => include}/util/util.h | 0 .../util/{ => include}/util/vector.h | 0 98 files changed, 62 insertions(+), 74 deletions(-) rename src/libraries/bootproto/{ => include}/bootproto/acpi.h (100%) rename src/libraries/bootproto/{ => include}/bootproto/bootconfig.h (100%) rename src/libraries/bootproto/{ => include}/bootproto/devices/framebuffer.h (100%) rename src/libraries/bootproto/{ => include}/bootproto/init.h (100%) rename src/libraries/bootproto/{ => include}/bootproto/kernel.h (100%) rename src/libraries/bootproto/{ => include}/bootproto/memory.h.cog (100%) rename src/libraries/cpu/{ => include}/cpu/cpu_id.h (100%) rename src/libraries/cpu/{ => include}/cpu/features.inc (100%) rename src/libraries/elf/{ => include}/elf/file.h (100%) rename src/libraries/elf/{ => include}/elf/headers.h (100%) rename src/libraries/j6/{ => include}/j6/cap_flags.h.cog (100%) rename src/libraries/j6/{ => include}/j6/channel.hh (100%) rename src/libraries/j6/{ => include}/j6/condition.hh (100%) rename src/libraries/j6/{ => include}/j6/errors.h (100%) rename src/libraries/j6/{ => include}/j6/flags.h (100%) rename src/libraries/j6/{ => include}/j6/init.h (100%) rename src/libraries/j6/{ => include}/j6/memutils.h (98%) rename src/libraries/j6/{ => include}/j6/mutex.hh (100%) rename src/libraries/j6/{ => include}/j6/protocols.h (100%) rename src/libraries/j6/{ => include}/j6/protocols/service_locator.h (100%) rename src/libraries/j6/{ => include}/j6/syscalls.h.cog (100%) rename src/libraries/j6/{ => include}/j6/sysconf.h.cog (100%) rename src/libraries/j6/{ => include}/j6/syslog.hh (100%) rename src/libraries/j6/{ => include}/j6/tables/log_areas.inc (100%) rename src/libraries/j6/{ => include}/j6/tables/object_types.inc (100%) rename src/libraries/j6/{ => include}/j6/tables/syscalls.inc (100%) rename src/libraries/j6/{ => include}/j6/tables/vm_flags.inc (100%) rename src/libraries/j6/{ => include}/j6/thread.hh (100%) rename src/libraries/j6/{ => include}/j6/types.h (100%) rename src/libraries/libc/{ => include}/__j6libc/arch/amd64/errno.h (100%) rename src/libraries/libc/{ => include}/__j6libc/file.h (100%) rename src/libraries/libc/{ => include}/__j6libc/mbstate_t.h (100%) rename src/libraries/libc/{ => include}/__j6libc/uchar.h (100%) rename src/libraries/libc/{ => include}/arch/amd64/errno.h (100%) rename src/libraries/libc/{ => include}/assert.h (100%) rename src/libraries/libc/{ => include}/complex.h (100%) rename src/libraries/libc/{ => include}/ctype.h (100%) rename src/libraries/libc/{ => include}/errno.h.cog (100%) rename src/libraries/libc/{ => include}/fenv.h (100%) rename src/libraries/libc/{ => include}/inttypes.h.cog (100%) rename src/libraries/libc/{ => include}/locale.h (100%) rename src/libraries/libc/{ => include}/math.h (100%) rename src/libraries/libc/{ => include}/setjmp.h (100%) rename src/libraries/libc/{ => include}/signal.h (100%) rename src/libraries/libc/{ => include}/stdatomic.h.cog (100%) rename src/libraries/libc/{ => include}/stdio.h (100%) rename src/libraries/libc/{ => include}/stdlib.h (100%) rename src/libraries/libc/{ => include}/string.h (90%) rename src/libraries/libc/{ => include}/tgmath.h (100%) rename src/libraries/libc/{ => include}/threads.h (100%) rename src/libraries/libc/{ => include}/time.h (100%) rename src/libraries/libc/{ => include}/uchar.h (100%) rename src/libraries/libc/{ => include}/wchar.h (100%) rename src/libraries/libc/{ => include}/wctype.h (100%) rename src/libraries/libc_free/{ => include}/__j6libc/bits.h (100%) rename src/libraries/libc_free/{ => include}/__j6libc/casts.h (100%) rename src/libraries/libc_free/{ => include}/__j6libc/null.h (100%) rename src/libraries/libc_free/{ => include}/__j6libc/restrict.h (100%) rename src/libraries/libc_free/{ => include}/__j6libc/size_t.h (100%) rename src/libraries/libc_free/{ => include}/__j6libc/wchar_t.h (100%) rename src/libraries/libc_free/{ => include}/float.h (100%) rename src/libraries/libc_free/{ => include}/iso646.h (100%) rename src/libraries/libc_free/{ => include}/limits.h (100%) rename src/libraries/libc_free/{ => include}/stdalign.h (100%) rename src/libraries/libc_free/{ => include}/stdarg.h (100%) rename src/libraries/libc_free/{ => include}/stdbool.h (100%) rename src/libraries/libc_free/{ => include}/stddef.h (100%) rename src/libraries/libc_free/{ => include}/stdint.h.cog (100%) rename src/libraries/libc_free/{ => include}/stdnoreturn.h (100%) rename src/libraries/util/{ => include}/util/allocator.h (100%) rename src/libraries/util/{ => include}/util/assert.h (100%) rename src/libraries/util/{ => include}/util/basic_types.h (99%) rename src/libraries/util/{ => include}/util/bip_buffer.h (100%) rename src/libraries/util/{ => include}/util/bitset.h (100%) rename src/libraries/util/{ => include}/util/cdb.h (100%) rename src/libraries/util/{ => include}/util/counted.h (100%) rename src/libraries/util/{ => include}/util/deque.h (100%) rename src/libraries/util/{ => include}/util/enum_bitfields.h (100%) rename src/libraries/util/{ => include}/util/format.h (100%) rename src/libraries/util/{ => include}/util/hash.h (100%) rename src/libraries/util/{ => include}/util/linked_list.h (100%) rename src/libraries/util/{ => include}/util/map.h (100%) rename src/libraries/util/{ => include}/util/misc.h (100%) rename src/libraries/util/{ => include}/util/new.h (100%) rename src/libraries/util/{ => include}/util/no_construct.h (100%) rename src/libraries/util/{ => include}/util/node_map.h (100%) rename src/libraries/util/{ => include}/util/pointers.h (100%) rename src/libraries/util/{ => include}/util/radix_tree.h (100%) rename src/libraries/util/{ => include}/util/spinlock.h (100%) rename src/libraries/util/{ => include}/util/util.h (100%) rename src/libraries/util/{ => include}/util/vector.h (100%) diff --git a/assets/debugging/jsix.elf-gdb.py b/assets/debugging/jsix.elf-gdb.py index b3fbf3e..32bd019 100644 --- a/assets/debugging/jsix.elf-gdb.py +++ b/assets/debugging/jsix.elf-gdb.py @@ -300,7 +300,7 @@ class DumpLogCommand(gdb.Command): self.areas = [] area_re = re.compile(r"LOG\(\s*(\w+).*") - with open("src/libraries/j6/j6/tables/log_areas.inc", 'r') as areas_inc: + with open("src/libraries/j6/include/j6/tables/log_areas.inc", 'r') as areas_inc: for line in areas_inc: m = area_re.match(line) if m: diff --git a/external/zstd.module b/external/zstd.module index d35ecb2..311d92b 100644 --- a/external/zstd.module +++ b/external/zstd.module @@ -3,6 +3,7 @@ zstd = module("zstd", root = "${source_root}/external/zstd", kind = "lib", + copy_headers = True, deps = [ "libc" ], output = "libzstd.a", sources = [ diff --git a/scripts/bonnibel/module.py b/scripts/bonnibel/module.py index 2db3716..640b4ed 100644 --- a/scripts/bonnibel/module.py +++ b/scripts/bonnibel/module.py @@ -31,6 +31,7 @@ class Module: "targets": (set, ()), "deps": (set, ()), "public_headers": (set, ()), + "copy_headers": (bool, False), "includes": (tuple, ()), "include_phase": (str, "normal"), "sources": (tuple, ()), @@ -43,10 +44,11 @@ class Module: } def __init__(self, name, modfile, root, **kwargs): - from .source import make_source + from pathlib import Path + from .source import make_source, make_copy_source # Required fields - self.root = root + self.root = Path(root) self.name = name self.modfile = modfile @@ -67,7 +69,11 @@ class Module: # Turn strings into real Source objects self.sources = [make_source(root, f) for f in self.sources] - self.public_headers = [make_source(root, f) for f in self.public_headers] + + header_source = lambda f: make_source(root, Path("include") / f) + if self.copy_headers: + header_source = lambda f: make_copy_source(root, f, "include") + self.public_headers = [header_source(f) for f in self.public_headers] # Filled by Module.update self.depmods = set() @@ -131,53 +137,18 @@ class Module: all_deps = walk_deps(self.depmods) - def gather_phony(build, deps, child_rel, add_headers=False): + def gather_phony(build, deps, child_rel): phony = ".headers.phony" child_phony = [child_rel(phony, module=c.name) for c in all_deps] - header_targets = [] - if add_headers: - if self.public_headers: - header_targets.append(f"${{build_root}}/include/{self.name}/{phony}") - build.build( rule = "touch", outputs = [mod_rel(phony)], - implicit = child_phony + header_targets, + implicit = child_phony, order_only = list(map(mod_rel, deps)), ) - filename = str(output / f"headers.{self.name}.ninja") - with open(filename, "w") as buildfile: - build = Writer(buildfile) - - build.comment("This file is automatically generated by bonnibel") - build.newline() - - build.variable("module_dir", f"${{build_root}}/include/{self.name}") - - header_deps = [] - - inputs = [] - headers = set(self.public_headers) - while headers: - source = headers.pop() - headers.update(source.next) - - if source.action: - build.newline() - build.build(rule=source.action, **source.args) - - if source.gather: - header_deps += list(source.outputs) - - if source.input: - inputs.extend(map(mod_rel, source.outputs)) - - build.newline() - gather_phony(build, header_deps, include_rel) - filename = str(output / f"module.{self.name}.ninja") with open(filename, "w") as buildfile: build = Writer(buildfile) @@ -192,7 +163,10 @@ class Module: ld_script = self.ld_script and self.root / self.ld_script, ) if self.public_headers: - modopts.includes += [f"${{build_root}}/include/{self.name}"] + modopts.includes += [ + self.root / "include", + f"${{target_dir}}/{self.name}.dir/include", + ] for key, value in self.variables.items(): build.variable(key, value) @@ -214,9 +188,9 @@ class Module: for dep in all_deps: if dep.public_headers: if dep.include_phase == "normal": - modopts.includes += [f"${{build_root}}/include/{dep.name}"] + modopts.includes += [dep.root / "include", f"${{target_dir}}/{dep.name}.dir/include"] elif dep.include_phase == "late": - modopts.late += [f"${{build_root}}/include/{dep.name}"] + modopts.late += [dep.root / "include", f"${{target_dir}}/{dep.name}.dir/include"] else: from . import BonnibelError raise BonnibelError(f"Module {dep.name} has invalid include_phase={dep.include_phase}") @@ -250,6 +224,23 @@ class Module: build.variable("ldflags", ["${ldflags}"] + ["-T", modopts.ld_script]) header_deps = [] + inputs = [] + headers = set(self.public_headers) + while headers: + source = headers.pop() + headers.update(source.next) + + if source.action: + build.newline() + build.build(rule=source.action, **source.args) + + if source.gather: + header_deps += list(source.outputs) + + if source.input: + inputs.extend(map(mod_rel, source.outputs)) + + build.newline() inputs = [] sources = set(self.sources) @@ -267,9 +258,7 @@ class Module: if source.input: inputs.extend(map(mod_rel, source.outputs)) - build.newline() - - gather_phony(build, header_deps, target_rel, add_headers=True) + gather_phony(build, header_deps, target_rel) output = target_rel(self.output) build.newline() diff --git a/scripts/bonnibel/project.py b/scripts/bonnibel/project.py index d7c0a2d..3ebbc7f 100644 --- a/scripts/bonnibel/project.py +++ b/scripts/bonnibel/project.py @@ -50,10 +50,6 @@ class Project: build.subninja(output / target.name / "target.ninja") build.newline() - for mod in modules.values(): - build.subninja(output / f"headers.{mod.name}.ninja") - build.newline() - build.build( rule = "touch", outputs = "${build_root}/.all_headers", diff --git a/scripts/bonnibel/source.py b/scripts/bonnibel/source.py index 8fbda67..92074fa 100644 --- a/scripts/bonnibel/source.py +++ b/scripts/bonnibel/source.py @@ -72,22 +72,21 @@ class ParseSource(Source): variables = dict(name=self.path), ) -class HeaderSource(Source): +class CopySource(ParseSource): action = "cp" - gather = True + + def __init__(self, path, root = "${module_dir}", deps=tuple(), prefix = ""): + self.path = path + self.root = root + self.deps = deps + self.prefix = prefix @property - def outputs(self): - return (self.path,) + def output(self): + from pathlib import Path + return Path(self.prefix) / self.path - @property - def args(self): - return dict( - outputs = [mod_rel(self.path)], - inputs = [join(self.root, self.path)], - implicit = list(map(_resolve, self.deps)), - variables = dict(name=self.path), - ) +class HeaderSource(Source): pass class CompileSource(Source): action = property(_dynamic_action("compile")) @@ -117,3 +116,6 @@ def make_source(root, path): return HeaderSource(path, root) else: raise RuntimeError(f"{path} has no Source type") + +def make_copy_source(root, path, prefix = ""): + return CopySource(path, root, prefix=prefix) \ No newline at end of file diff --git a/src/libraries/bootproto/bootproto.module b/src/libraries/bootproto/bootproto.module index 6484612..a1e96c9 100644 --- a/src/libraries/bootproto/bootproto.module +++ b/src/libraries/bootproto/bootproto.module @@ -14,4 +14,4 @@ bp = module("bootproto", from os.path import join layout = join(source_root, "definitions/memory_layout.yaml") -bp.add_depends("bootproto/memory.h.cog", deps=[layout]) +bp.add_depends(["bootproto/memory.h.cog"], deps=[layout]) diff --git a/src/libraries/bootproto/bootproto/acpi.h b/src/libraries/bootproto/include/bootproto/acpi.h similarity index 100% rename from src/libraries/bootproto/bootproto/acpi.h rename to src/libraries/bootproto/include/bootproto/acpi.h diff --git a/src/libraries/bootproto/bootproto/bootconfig.h b/src/libraries/bootproto/include/bootproto/bootconfig.h similarity index 100% rename from src/libraries/bootproto/bootproto/bootconfig.h rename to src/libraries/bootproto/include/bootproto/bootconfig.h diff --git a/src/libraries/bootproto/bootproto/devices/framebuffer.h b/src/libraries/bootproto/include/bootproto/devices/framebuffer.h similarity index 100% rename from src/libraries/bootproto/bootproto/devices/framebuffer.h rename to src/libraries/bootproto/include/bootproto/devices/framebuffer.h diff --git a/src/libraries/bootproto/bootproto/init.h b/src/libraries/bootproto/include/bootproto/init.h similarity index 100% rename from src/libraries/bootproto/bootproto/init.h rename to src/libraries/bootproto/include/bootproto/init.h diff --git a/src/libraries/bootproto/bootproto/kernel.h b/src/libraries/bootproto/include/bootproto/kernel.h similarity index 100% rename from src/libraries/bootproto/bootproto/kernel.h rename to src/libraries/bootproto/include/bootproto/kernel.h diff --git a/src/libraries/bootproto/bootproto/memory.h.cog b/src/libraries/bootproto/include/bootproto/memory.h.cog similarity index 100% rename from src/libraries/bootproto/bootproto/memory.h.cog rename to src/libraries/bootproto/include/bootproto/memory.h.cog diff --git a/src/libraries/cpu/cpu/cpu_id.h b/src/libraries/cpu/include/cpu/cpu_id.h similarity index 100% rename from src/libraries/cpu/cpu/cpu_id.h rename to src/libraries/cpu/include/cpu/cpu_id.h diff --git a/src/libraries/cpu/cpu/features.inc b/src/libraries/cpu/include/cpu/features.inc similarity index 100% rename from src/libraries/cpu/cpu/features.inc rename to src/libraries/cpu/include/cpu/features.inc diff --git a/src/libraries/elf/elf/file.h b/src/libraries/elf/include/elf/file.h similarity index 100% rename from src/libraries/elf/elf/file.h rename to src/libraries/elf/include/elf/file.h diff --git a/src/libraries/elf/elf/headers.h b/src/libraries/elf/include/elf/headers.h similarity index 100% rename from src/libraries/elf/elf/headers.h rename to src/libraries/elf/include/elf/headers.h diff --git a/src/libraries/j6/j6/cap_flags.h.cog b/src/libraries/j6/include/j6/cap_flags.h.cog similarity index 100% rename from src/libraries/j6/j6/cap_flags.h.cog rename to src/libraries/j6/include/j6/cap_flags.h.cog diff --git a/src/libraries/j6/j6/channel.hh b/src/libraries/j6/include/j6/channel.hh similarity index 100% rename from src/libraries/j6/j6/channel.hh rename to src/libraries/j6/include/j6/channel.hh diff --git a/src/libraries/j6/j6/condition.hh b/src/libraries/j6/include/j6/condition.hh similarity index 100% rename from src/libraries/j6/j6/condition.hh rename to src/libraries/j6/include/j6/condition.hh diff --git a/src/libraries/j6/j6/errors.h b/src/libraries/j6/include/j6/errors.h similarity index 100% rename from src/libraries/j6/j6/errors.h rename to src/libraries/j6/include/j6/errors.h diff --git a/src/libraries/j6/j6/flags.h b/src/libraries/j6/include/j6/flags.h similarity index 100% rename from src/libraries/j6/j6/flags.h rename to src/libraries/j6/include/j6/flags.h diff --git a/src/libraries/j6/j6/init.h b/src/libraries/j6/include/j6/init.h similarity index 100% rename from src/libraries/j6/j6/init.h rename to src/libraries/j6/include/j6/init.h diff --git a/src/libraries/j6/j6/memutils.h b/src/libraries/j6/include/j6/memutils.h similarity index 98% rename from src/libraries/j6/j6/memutils.h rename to src/libraries/j6/include/j6/memutils.h index 510e888..2100eff 100644 --- a/src/libraries/j6/j6/memutils.h +++ b/src/libraries/j6/include/j6/memutils.h @@ -15,4 +15,4 @@ void *memset(void *s, int c, size_t n); #ifdef __cplusplus } // extern "C" -#endif \ No newline at end of file +#endif diff --git a/src/libraries/j6/j6/mutex.hh b/src/libraries/j6/include/j6/mutex.hh similarity index 100% rename from src/libraries/j6/j6/mutex.hh rename to src/libraries/j6/include/j6/mutex.hh diff --git a/src/libraries/j6/j6/protocols.h b/src/libraries/j6/include/j6/protocols.h similarity index 100% rename from src/libraries/j6/j6/protocols.h rename to src/libraries/j6/include/j6/protocols.h diff --git a/src/libraries/j6/j6/protocols/service_locator.h b/src/libraries/j6/include/j6/protocols/service_locator.h similarity index 100% rename from src/libraries/j6/j6/protocols/service_locator.h rename to src/libraries/j6/include/j6/protocols/service_locator.h diff --git a/src/libraries/j6/j6/syscalls.h.cog b/src/libraries/j6/include/j6/syscalls.h.cog similarity index 100% rename from src/libraries/j6/j6/syscalls.h.cog rename to src/libraries/j6/include/j6/syscalls.h.cog diff --git a/src/libraries/j6/j6/sysconf.h.cog b/src/libraries/j6/include/j6/sysconf.h.cog similarity index 100% rename from src/libraries/j6/j6/sysconf.h.cog rename to src/libraries/j6/include/j6/sysconf.h.cog diff --git a/src/libraries/j6/j6/syslog.hh b/src/libraries/j6/include/j6/syslog.hh similarity index 100% rename from src/libraries/j6/j6/syslog.hh rename to src/libraries/j6/include/j6/syslog.hh diff --git a/src/libraries/j6/j6/tables/log_areas.inc b/src/libraries/j6/include/j6/tables/log_areas.inc similarity index 100% rename from src/libraries/j6/j6/tables/log_areas.inc rename to src/libraries/j6/include/j6/tables/log_areas.inc diff --git a/src/libraries/j6/j6/tables/object_types.inc b/src/libraries/j6/include/j6/tables/object_types.inc similarity index 100% rename from src/libraries/j6/j6/tables/object_types.inc rename to src/libraries/j6/include/j6/tables/object_types.inc diff --git a/src/libraries/j6/j6/tables/syscalls.inc b/src/libraries/j6/include/j6/tables/syscalls.inc similarity index 100% rename from src/libraries/j6/j6/tables/syscalls.inc rename to src/libraries/j6/include/j6/tables/syscalls.inc diff --git a/src/libraries/j6/j6/tables/vm_flags.inc b/src/libraries/j6/include/j6/tables/vm_flags.inc similarity index 100% rename from src/libraries/j6/j6/tables/vm_flags.inc rename to src/libraries/j6/include/j6/tables/vm_flags.inc diff --git a/src/libraries/j6/j6/thread.hh b/src/libraries/j6/include/j6/thread.hh similarity index 100% rename from src/libraries/j6/j6/thread.hh rename to src/libraries/j6/include/j6/thread.hh diff --git a/src/libraries/j6/j6/types.h b/src/libraries/j6/include/j6/types.h similarity index 100% rename from src/libraries/j6/j6/types.h rename to src/libraries/j6/include/j6/types.h diff --git a/src/libraries/libc/__j6libc/arch/amd64/errno.h b/src/libraries/libc/include/__j6libc/arch/amd64/errno.h similarity index 100% rename from src/libraries/libc/__j6libc/arch/amd64/errno.h rename to src/libraries/libc/include/__j6libc/arch/amd64/errno.h diff --git a/src/libraries/libc/__j6libc/file.h b/src/libraries/libc/include/__j6libc/file.h similarity index 100% rename from src/libraries/libc/__j6libc/file.h rename to src/libraries/libc/include/__j6libc/file.h diff --git a/src/libraries/libc/__j6libc/mbstate_t.h b/src/libraries/libc/include/__j6libc/mbstate_t.h similarity index 100% rename from src/libraries/libc/__j6libc/mbstate_t.h rename to src/libraries/libc/include/__j6libc/mbstate_t.h diff --git a/src/libraries/libc/__j6libc/uchar.h b/src/libraries/libc/include/__j6libc/uchar.h similarity index 100% rename from src/libraries/libc/__j6libc/uchar.h rename to src/libraries/libc/include/__j6libc/uchar.h diff --git a/src/libraries/libc/arch/amd64/errno.h b/src/libraries/libc/include/arch/amd64/errno.h similarity index 100% rename from src/libraries/libc/arch/amd64/errno.h rename to src/libraries/libc/include/arch/amd64/errno.h diff --git a/src/libraries/libc/assert.h b/src/libraries/libc/include/assert.h similarity index 100% rename from src/libraries/libc/assert.h rename to src/libraries/libc/include/assert.h diff --git a/src/libraries/libc/complex.h b/src/libraries/libc/include/complex.h similarity index 100% rename from src/libraries/libc/complex.h rename to src/libraries/libc/include/complex.h diff --git a/src/libraries/libc/ctype.h b/src/libraries/libc/include/ctype.h similarity index 100% rename from src/libraries/libc/ctype.h rename to src/libraries/libc/include/ctype.h diff --git a/src/libraries/libc/errno.h.cog b/src/libraries/libc/include/errno.h.cog similarity index 100% rename from src/libraries/libc/errno.h.cog rename to src/libraries/libc/include/errno.h.cog diff --git a/src/libraries/libc/fenv.h b/src/libraries/libc/include/fenv.h similarity index 100% rename from src/libraries/libc/fenv.h rename to src/libraries/libc/include/fenv.h diff --git a/src/libraries/libc/inttypes.h.cog b/src/libraries/libc/include/inttypes.h.cog similarity index 100% rename from src/libraries/libc/inttypes.h.cog rename to src/libraries/libc/include/inttypes.h.cog diff --git a/src/libraries/libc/locale.h b/src/libraries/libc/include/locale.h similarity index 100% rename from src/libraries/libc/locale.h rename to src/libraries/libc/include/locale.h diff --git a/src/libraries/libc/math.h b/src/libraries/libc/include/math.h similarity index 100% rename from src/libraries/libc/math.h rename to src/libraries/libc/include/math.h diff --git a/src/libraries/libc/setjmp.h b/src/libraries/libc/include/setjmp.h similarity index 100% rename from src/libraries/libc/setjmp.h rename to src/libraries/libc/include/setjmp.h diff --git a/src/libraries/libc/signal.h b/src/libraries/libc/include/signal.h similarity index 100% rename from src/libraries/libc/signal.h rename to src/libraries/libc/include/signal.h diff --git a/src/libraries/libc/stdatomic.h.cog b/src/libraries/libc/include/stdatomic.h.cog similarity index 100% rename from src/libraries/libc/stdatomic.h.cog rename to src/libraries/libc/include/stdatomic.h.cog diff --git a/src/libraries/libc/stdio.h b/src/libraries/libc/include/stdio.h similarity index 100% rename from src/libraries/libc/stdio.h rename to src/libraries/libc/include/stdio.h diff --git a/src/libraries/libc/stdlib.h b/src/libraries/libc/include/stdlib.h similarity index 100% rename from src/libraries/libc/stdlib.h rename to src/libraries/libc/include/stdlib.h diff --git a/src/libraries/libc/string.h b/src/libraries/libc/include/string.h similarity index 90% rename from src/libraries/libc/string.h rename to src/libraries/libc/include/string.h index 4819888..5b06db9 100644 --- a/src/libraries/libc/string.h +++ b/src/libraries/libc/include/string.h @@ -13,6 +13,7 @@ #include <__j6libc/null.h> #include <__j6libc/restrict.h> #include <__j6libc/size_t.h> +#include // memcpy, memmove, memset are defined in libj6 #ifdef __cplusplus extern "C" { @@ -20,8 +21,6 @@ extern "C" { // Copying functions // -void *memcpy(void * restrict s1, const void * restrict s2, size_t n); -void *memmove(void * restrict s1, const void * restrict s2, size_t n); char *strncpy(char * restrict s1, const char * restrict s2, size_t n); // Concatenation functions @@ -49,7 +48,6 @@ char *strtok(char * restrict s1, const char * restrict s2); // Miscellaneous functions // -void *memset(void *s, int c, size_t n); char *strerror(int errnum); size_t strlen(const char *s); diff --git a/src/libraries/libc/tgmath.h b/src/libraries/libc/include/tgmath.h similarity index 100% rename from src/libraries/libc/tgmath.h rename to src/libraries/libc/include/tgmath.h diff --git a/src/libraries/libc/threads.h b/src/libraries/libc/include/threads.h similarity index 100% rename from src/libraries/libc/threads.h rename to src/libraries/libc/include/threads.h diff --git a/src/libraries/libc/time.h b/src/libraries/libc/include/time.h similarity index 100% rename from src/libraries/libc/time.h rename to src/libraries/libc/include/time.h diff --git a/src/libraries/libc/uchar.h b/src/libraries/libc/include/uchar.h similarity index 100% rename from src/libraries/libc/uchar.h rename to src/libraries/libc/include/uchar.h diff --git a/src/libraries/libc/wchar.h b/src/libraries/libc/include/wchar.h similarity index 100% rename from src/libraries/libc/wchar.h rename to src/libraries/libc/include/wchar.h diff --git a/src/libraries/libc/wctype.h b/src/libraries/libc/include/wctype.h similarity index 100% rename from src/libraries/libc/wctype.h rename to src/libraries/libc/include/wctype.h diff --git a/src/libraries/libc/libc.module b/src/libraries/libc/libc.module index 362565d..bbb5168 100644 --- a/src/libraries/libc/libc.module +++ b/src/libraries/libc/libc.module @@ -5,14 +5,16 @@ # many files that it's unweildy. So if a file is added or removed in # libc, remember to run configure again. -def glob(ext): +def glob(ext, root=''): from glob import glob + from pathlib import Path + + base = Path(module_root) / root def resolve(path): - from pathlib import Path - return str(Path(path).relative_to(module_root)) + return str(Path(path).relative_to(base)) - return list(map(resolve, glob(f"{module_root}/**/*.{ext}", recursive=True))) + return list(map(resolve, glob(f"{base}/**/*.{ext}", recursive=True))) sources = [] for ext in ("c", "cpp", "s", "inc"): @@ -20,7 +22,7 @@ for ext in ("c", "cpp", "s", "inc"): headers = [] for ext in ("h",): - headers += glob(ext) + glob(ext + ".cog") + headers += glob(ext, "include") + glob(ext + ".cog", "include") libc = module("libc", kind = "lib", diff --git a/src/libraries/libc_free/__j6libc/bits.h b/src/libraries/libc_free/include/__j6libc/bits.h similarity index 100% rename from src/libraries/libc_free/__j6libc/bits.h rename to src/libraries/libc_free/include/__j6libc/bits.h diff --git a/src/libraries/libc_free/__j6libc/casts.h b/src/libraries/libc_free/include/__j6libc/casts.h similarity index 100% rename from src/libraries/libc_free/__j6libc/casts.h rename to src/libraries/libc_free/include/__j6libc/casts.h diff --git a/src/libraries/libc_free/__j6libc/null.h b/src/libraries/libc_free/include/__j6libc/null.h similarity index 100% rename from src/libraries/libc_free/__j6libc/null.h rename to src/libraries/libc_free/include/__j6libc/null.h diff --git a/src/libraries/libc_free/__j6libc/restrict.h b/src/libraries/libc_free/include/__j6libc/restrict.h similarity index 100% rename from src/libraries/libc_free/__j6libc/restrict.h rename to src/libraries/libc_free/include/__j6libc/restrict.h diff --git a/src/libraries/libc_free/__j6libc/size_t.h b/src/libraries/libc_free/include/__j6libc/size_t.h similarity index 100% rename from src/libraries/libc_free/__j6libc/size_t.h rename to src/libraries/libc_free/include/__j6libc/size_t.h diff --git a/src/libraries/libc_free/__j6libc/wchar_t.h b/src/libraries/libc_free/include/__j6libc/wchar_t.h similarity index 100% rename from src/libraries/libc_free/__j6libc/wchar_t.h rename to src/libraries/libc_free/include/__j6libc/wchar_t.h diff --git a/src/libraries/libc_free/float.h b/src/libraries/libc_free/include/float.h similarity index 100% rename from src/libraries/libc_free/float.h rename to src/libraries/libc_free/include/float.h diff --git a/src/libraries/libc_free/iso646.h b/src/libraries/libc_free/include/iso646.h similarity index 100% rename from src/libraries/libc_free/iso646.h rename to src/libraries/libc_free/include/iso646.h diff --git a/src/libraries/libc_free/limits.h b/src/libraries/libc_free/include/limits.h similarity index 100% rename from src/libraries/libc_free/limits.h rename to src/libraries/libc_free/include/limits.h diff --git a/src/libraries/libc_free/stdalign.h b/src/libraries/libc_free/include/stdalign.h similarity index 100% rename from src/libraries/libc_free/stdalign.h rename to src/libraries/libc_free/include/stdalign.h diff --git a/src/libraries/libc_free/stdarg.h b/src/libraries/libc_free/include/stdarg.h similarity index 100% rename from src/libraries/libc_free/stdarg.h rename to src/libraries/libc_free/include/stdarg.h diff --git a/src/libraries/libc_free/stdbool.h b/src/libraries/libc_free/include/stdbool.h similarity index 100% rename from src/libraries/libc_free/stdbool.h rename to src/libraries/libc_free/include/stdbool.h diff --git a/src/libraries/libc_free/stddef.h b/src/libraries/libc_free/include/stddef.h similarity index 100% rename from src/libraries/libc_free/stddef.h rename to src/libraries/libc_free/include/stddef.h diff --git a/src/libraries/libc_free/stdint.h.cog b/src/libraries/libc_free/include/stdint.h.cog similarity index 100% rename from src/libraries/libc_free/stdint.h.cog rename to src/libraries/libc_free/include/stdint.h.cog diff --git a/src/libraries/libc_free/stdnoreturn.h b/src/libraries/libc_free/include/stdnoreturn.h similarity index 100% rename from src/libraries/libc_free/stdnoreturn.h rename to src/libraries/libc_free/include/stdnoreturn.h diff --git a/src/libraries/util/util/allocator.h b/src/libraries/util/include/util/allocator.h similarity index 100% rename from src/libraries/util/util/allocator.h rename to src/libraries/util/include/util/allocator.h diff --git a/src/libraries/util/util/assert.h b/src/libraries/util/include/util/assert.h similarity index 100% rename from src/libraries/util/util/assert.h rename to src/libraries/util/include/util/assert.h diff --git a/src/libraries/util/util/basic_types.h b/src/libraries/util/include/util/basic_types.h similarity index 99% rename from src/libraries/util/util/basic_types.h rename to src/libraries/util/include/util/basic_types.h index 7494fc5..0562d46 100644 --- a/src/libraries/util/util/basic_types.h +++ b/src/libraries/util/include/util/basic_types.h @@ -90,4 +90,4 @@ template T&& forward(typename types::remove_reference::type& par template void swap(T &t1, T &t2) { T tmp = move(t1); t1 = move(t2); t2 = move(tmp); } -} // namespace util \ No newline at end of file +} // namespace util diff --git a/src/libraries/util/util/bip_buffer.h b/src/libraries/util/include/util/bip_buffer.h similarity index 100% rename from src/libraries/util/util/bip_buffer.h rename to src/libraries/util/include/util/bip_buffer.h diff --git a/src/libraries/util/util/bitset.h b/src/libraries/util/include/util/bitset.h similarity index 100% rename from src/libraries/util/util/bitset.h rename to src/libraries/util/include/util/bitset.h diff --git a/src/libraries/util/util/cdb.h b/src/libraries/util/include/util/cdb.h similarity index 100% rename from src/libraries/util/util/cdb.h rename to src/libraries/util/include/util/cdb.h diff --git a/src/libraries/util/util/counted.h b/src/libraries/util/include/util/counted.h similarity index 100% rename from src/libraries/util/util/counted.h rename to src/libraries/util/include/util/counted.h diff --git a/src/libraries/util/util/deque.h b/src/libraries/util/include/util/deque.h similarity index 100% rename from src/libraries/util/util/deque.h rename to src/libraries/util/include/util/deque.h diff --git a/src/libraries/util/util/enum_bitfields.h b/src/libraries/util/include/util/enum_bitfields.h similarity index 100% rename from src/libraries/util/util/enum_bitfields.h rename to src/libraries/util/include/util/enum_bitfields.h diff --git a/src/libraries/util/util/format.h b/src/libraries/util/include/util/format.h similarity index 100% rename from src/libraries/util/util/format.h rename to src/libraries/util/include/util/format.h diff --git a/src/libraries/util/util/hash.h b/src/libraries/util/include/util/hash.h similarity index 100% rename from src/libraries/util/util/hash.h rename to src/libraries/util/include/util/hash.h diff --git a/src/libraries/util/util/linked_list.h b/src/libraries/util/include/util/linked_list.h similarity index 100% rename from src/libraries/util/util/linked_list.h rename to src/libraries/util/include/util/linked_list.h diff --git a/src/libraries/util/util/map.h b/src/libraries/util/include/util/map.h similarity index 100% rename from src/libraries/util/util/map.h rename to src/libraries/util/include/util/map.h diff --git a/src/libraries/util/util/misc.h b/src/libraries/util/include/util/misc.h similarity index 100% rename from src/libraries/util/util/misc.h rename to src/libraries/util/include/util/misc.h diff --git a/src/libraries/util/util/new.h b/src/libraries/util/include/util/new.h similarity index 100% rename from src/libraries/util/util/new.h rename to src/libraries/util/include/util/new.h diff --git a/src/libraries/util/util/no_construct.h b/src/libraries/util/include/util/no_construct.h similarity index 100% rename from src/libraries/util/util/no_construct.h rename to src/libraries/util/include/util/no_construct.h diff --git a/src/libraries/util/util/node_map.h b/src/libraries/util/include/util/node_map.h similarity index 100% rename from src/libraries/util/util/node_map.h rename to src/libraries/util/include/util/node_map.h diff --git a/src/libraries/util/util/pointers.h b/src/libraries/util/include/util/pointers.h similarity index 100% rename from src/libraries/util/util/pointers.h rename to src/libraries/util/include/util/pointers.h diff --git a/src/libraries/util/util/radix_tree.h b/src/libraries/util/include/util/radix_tree.h similarity index 100% rename from src/libraries/util/util/radix_tree.h rename to src/libraries/util/include/util/radix_tree.h diff --git a/src/libraries/util/util/spinlock.h b/src/libraries/util/include/util/spinlock.h similarity index 100% rename from src/libraries/util/util/spinlock.h rename to src/libraries/util/include/util/spinlock.h diff --git a/src/libraries/util/util/util.h b/src/libraries/util/include/util/util.h similarity index 100% rename from src/libraries/util/util/util.h rename to src/libraries/util/include/util/util.h diff --git a/src/libraries/util/util/vector.h b/src/libraries/util/include/util/vector.h similarity index 100% rename from src/libraries/util/util/vector.h rename to src/libraries/util/include/util/vector.h