commit a32be0f8efe59e3de6413b2bf2dc16c3db4ea2b5
parent 6b7bd71741d013c4b2a0abd66852070b89584fe3
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Mon, 27 Jan 2025 15:34:17 +0100
build/libmach: Handle better subdirectories dependencies
Using a wildcard is always a bad idea, and as we already have the list of
objects in the local Makefiles is better to just use them to genarate the
list of objects for every directory.
Diffstat:
6 files changed, 65 insertions(+), 8 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -3,7 +3,8 @@
bin/
lib/
libexec/
-dirs
+/dirs
+deps.mk
*.gcno
*.gcda
/deps
diff --git a/scripts/mkdep b/scripts/mkdep
@@ -7,7 +7,7 @@ trap "rm -f $tmp" EXIT INT TERM HUP
(cat Makefile
printf "\n#deps\n"
-for i in `find . -name '*.c'`
+for i in *.c
do
file=`basename $i | sed 's/\.c$/.o/'`
dir=`dirname $i`
diff --git a/src/libmach/Makefile b/src/libmach/Makefile
@@ -10,6 +10,30 @@ include $(PROJECTDIR)/scripts/rules.mk
TARGET = libmach.a
OBJS =\
+ archive.o\
+ armember.o\
+ delobj.o\
+ findsec.o\
+ getindex.o\
+ getsec.o\
+ getsym.o\
+ loadmap.o\
+ newmap.o\
+ newobj.o\
+ objpos.o\
+ objprobe.o\
+ objtype.o\
+ pack.o\
+ pc2line.o\
+ readobj.o\
+ rebase.o\
+ setindex.o\
+ setmap.o\
+ setsec.o\
+ setsym.o\
+ strip.o\
+ unpack.o\
+ writeobj.o\
all:
+@$(MAKE) $(DIRS)
@@ -21,9 +45,4 @@ $(TARGET): $(OBJS)
cp $@ $(LIBDIR)/scc
dep:
- (echo H;\
- echo /OBJS/a;\
- ls *.c */*.c | sed -E 's/(.*)\.c$$/ \1.o\\/';\
- echo .; \
- echo w) |\
- ed -s makefile
+ ./mkdep elf64 coff32
diff --git a/src/libmach/coff32/Makefile b/src/libmach/coff32/Makefile
@@ -36,3 +36,12 @@ COFFHDRS =\
all: $(OBJS)
$(OBJS): $(COFFHDRS)
+
+dep:
+ @(printf 'COFF32OBJS=\\';\
+ echo;\
+ echo $(OBJS) |\
+ sed -E 's@ *([^ ]*)@\tcoff32/\1\\\n@g') > deps.mk
+
+distclean:
+ rm -f deps.mk
diff --git a/src/libmach/elf64/Makefile b/src/libmach/elf64/Makefile
@@ -24,3 +24,12 @@ ELFHDRS =\
all: $(OBJS)
$(OBJS): $(ELFHDRS)
+
+dep:
+ @(printf 'ELF64OBJS=\\';\
+ echo;\
+ echo $(OBJS) |\
+ sed -E 's@ *([^ ]*)@\telf64/\1\\\n@g') > deps.mk
+
+distclean:
+ rm -f deps.mk
diff --git a/src/libmach/mkdep b/src/libmach/mkdep
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+ed -s makefile <<EOF
+H
+/include/a
+`for i
+ do
+ echo include $i/deps.mk
+done`
+.
+/OBJS/a
+`for i
+ do
+ printf '\t$('$(echo $i | tr a-z A-Z)'OBJS)\\'
+ echo
+done`
+.
+w
+EOF