scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

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:
M.gitignore | 3++-
Mscripts/mkdep | 2+-
Msrc/libmach/Makefile | 31+++++++++++++++++++++++++------
Msrc/libmach/coff32/Makefile | 9+++++++++
Msrc/libmach/elf64/Makefile | 9+++++++++
Asrc/libmach/mkdep | 19+++++++++++++++++++
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