From 1dc25293b84fb3aed880bb4315adc7ce321c6343 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Mon, 28 Oct 2019 11:29:38 +0100 Subject: [PATCH] Startup library header path must be overriden The startup library might fail at runtime if local headers are included rather than headers from somewhere else. --- repos/base-linux/src/core/Tupfile | 2 +- repos/base-linux/src/lib/startup/Tupfile | 2 ++ repos/base-nova/src/core/Tupfile | 4 ++-- repos/base-nova/src/lib/ld/Tupfile | 2 +- repos/base-nova/src/lib/startup/Tupfile | 2 ++ repos/base/src/lib/startup/Tupfile | 13 ------------- repos/base/src/lib/startup/Tupfile.inc | 22 ++++++++++++++++++++++ 7 files changed, 30 insertions(+), 17 deletions(-) create mode 100644 repos/base-linux/src/lib/startup/Tupfile create mode 100644 repos/base-nova/src/lib/startup/Tupfile delete mode 100644 repos/base/src/lib/startup/Tupfile create mode 100644 repos/base/src/lib/startup/Tupfile.inc diff --git a/repos/base-linux/src/core/Tupfile b/repos/base-linux/src/core/Tupfile index 07c27d7ed..4ab7159e8 100644 --- a/repos/base-linux/src/core/Tupfile +++ b/repos/base-linux/src/core/Tupfile @@ -47,7 +47,7 @@ LDFLAGS += -L$(LIB_DIR) `$(PKG_CONFIG) --libs cxx-baremetal` : {obj} | \ $(DEV_DIR)/ \ $(GENODE_DIR)/ \ - $(BASE_DIR)/ \ + $(REP_DIR)/ \ $(REP_DIR)/ \ $(REP_DIR)/ \ |> !ld % % % \ diff --git a/repos/base-linux/src/lib/startup/Tupfile b/repos/base-linux/src/lib/startup/Tupfile new file mode 100644 index 000000000..24bcdd86b --- /dev/null +++ b/repos/base-linux/src/lib/startup/Tupfile @@ -0,0 +1,2 @@ +include_rules +include &(BASE_DIR)/src/lib/startup/Tupfile.inc diff --git a/repos/base-nova/src/core/Tupfile b/repos/base-nova/src/core/Tupfile index d8e245e84..c7e3444cd 100644 --- a/repos/base-nova/src/core/Tupfile +++ b/repos/base-nova/src/core/Tupfile @@ -51,9 +51,9 @@ LDFLAGS += -L$(LIB_DIR) `$(PKG_CONFIG) --libs cxx-baremetal` $(DEV_DIR)/ \ $(GENODE_DIR)/ \ $(BASE_DIR)/ \ - $(BASE_DIR)/ \ + $(REP_DIR)/ \ $(REP_DIR)/ \ |> $(LD) $(LDFLAGS) -u _start -r \ % % % %f -o %o \ |> core.o $(REP_DIR)/ {core} -: {core} |> cp %f %o |> $(DEV_DIR)/lib/core-nova.o +: {core} |> cp %f %o |> $(OUT_DIR)/lib/core-nova.o diff --git a/repos/base-nova/src/lib/ld/Tupfile b/repos/base-nova/src/lib/ld/Tupfile index aaf4eb4ad..b48bf1375 100644 --- a/repos/base-nova/src/lib/ld/Tupfile +++ b/repos/base-nova/src/lib/ld/Tupfile @@ -39,7 +39,7 @@ BASE_PKGS += alarm cxx-baremetal ldso-startup timeout LDFLAGS += `$(PKG_CONFIG) --static --libs $(BASE_PKGS)` -L $(LIB_DIR) -: $(BASE_LIBS) {obj} | symbol.map $(BASE_DIR)/ $(REP_DIR)/ $(GENODE_DIR)/ $(DEV_DIR)/ \ +: $(BASE_LIBS) {obj} | symbol.map $(REP_DIR)/ $(REP_DIR)/ $(GENODE_DIR)/ $(DEV_DIR)/ \ |> \ $(LD) -o %o \ $(LD_MARCH) $(LDFLAGS) \ diff --git a/repos/base-nova/src/lib/startup/Tupfile b/repos/base-nova/src/lib/startup/Tupfile new file mode 100644 index 000000000..24bcdd86b --- /dev/null +++ b/repos/base-nova/src/lib/startup/Tupfile @@ -0,0 +1,2 @@ +include_rules +include &(BASE_DIR)/src/lib/startup/Tupfile.inc diff --git a/repos/base/src/lib/startup/Tupfile b/repos/base/src/lib/startup/Tupfile deleted file mode 100644 index 986bf18fa..000000000 --- a/repos/base/src/lib/startup/Tupfile +++ /dev/null @@ -1,13 +0,0 @@ -include_rules - -: foreach *.cc |> !cxx |> | $(BASE_DIR)/ {obj} - -ifeq (@(TUP_ARCH),i386) - : foreach spec/x86_32/*.s |> !asm |> | $(BASE_DIR)/ {obj} -endif -ifeq (@(TUP_ARCH),x86_64) - : foreach spec/x86_64/*.s |> !asm |> | $(BASE_DIR)/ {obj} -endif -ifeq (@(TUP_ARCH),arm64) - : foreach spec/arm_64/*.s |> !asm |> | $(BASE_DIR)/ {obj} -endif diff --git a/repos/base/src/lib/startup/Tupfile.inc b/repos/base/src/lib/startup/Tupfile.inc new file mode 100644 index 000000000..37a9dbfe5 --- /dev/null +++ b/repos/base/src/lib/startup/Tupfile.inc @@ -0,0 +1,22 @@ +# This file must be included from another "repository" because +# the C preprocessor is injecting headers that have the same +# filename across "repositories", and if those headers are included +# from this "repository", then things break at runtime. Thus the +# preprocessor include directories must be set correctly before +# this file is included. Do not be fooled into thinking that the +# directory structure has significance. + +: foreach $(BASE_DIR)/src/lib/startup/*.cc |> !cxx |> | $(REP_DIR)/ {obj} + +ifeq (@(TUP_ARCH),i386) + : foreach $(BASE_DIR)/src/lib/startup/spec/x86_32/*.s \ + |> !asm |> | $(REP_DIR)/ {obj} +endif +ifeq (@(TUP_ARCH),x86_64) + : foreach $(BASE_DIR)/src/lib/startup/spec/x86_64/*.s \ + |> !asm |> | $(REP_DIR)/ {obj} +endif +ifeq (@(TUP_ARCH),arm64) + : foreach $(BASE_DIR)/src/lib/startup/spec/arm_64/*.s \ + |> !asm |> | $(REP_DIR)/ {obj} +endif