From b095cb8627806ea3ee05031f57ee3a03ac4cdf9e Mon Sep 17 00:00:00 2001 From: mike lowis Date: Sun, 4 Apr 2021 22:08:21 -0400 Subject: [PATCH] added rule generation script --- Makefile | 14 ++-- config.mk | 12 ++++ genrules.sh | 31 +++++++++ rules.mk | 189 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 242 insertions(+), 4 deletions(-) create mode 100644 config.mk create mode 100755 genrules.sh create mode 100644 rules.mk diff --git a/Makefile b/Makefile index b7a9765..96e64a2 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,13 @@ -.PHONY: all clean +.PHONY: all libs bins clean rules -all: - ./tools/build.sh +all: libs bins clean: - rm -rf build/ \ No newline at end of file + find build/ -type f -delete + +rules: + ./genrules.sh + +include config.mk +include rules.mk + diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..cb39484 --- /dev/null +++ b/config.mk @@ -0,0 +1,12 @@ +CC = cc +CFLAGS = -g -Wall -Wextra -Werror +CPPFLAGS = -Iinc/ -I/usr/include/freetype2 + +AR = ar +ARFLAGS = rs + +LDFLAGS = -Lbuild/lib/ -la -lnet -lui -lX11 -lXft -lfontconfig + +ARCHIVE = $(AR) $(ARFLAGS) $@ $^ +BINARY = $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS) +OBJECT = $(CC) $(CFLAGS) $(CPPFLAGS) -MMD -c -o $@ $< diff --git a/genrules.sh b/genrules.sh new file mode 100755 index 0000000..3c4b56c --- /dev/null +++ b/genrules.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +rm -rf build/ +printf "" > rules.mk + +# Generate rules for all libraries +for lib in lib/*; do + libdir="$(dirname "$lib")" + libname="$(basename "$lib")" + for f in "$lib"/*; do + mkdir -p "build/$(dirname "$f")" + printf "%s\n" "build/${f%.c}.o: $f config.mk" >> rules.mk + printf "\t\$(OBJECT)\n" >> rules.mk + printf "%s\n" "build/$libdir/lib$libname.a: build/${f%.c}.o" >> rules.mk + printf "%sinclude %s\n" '-' "build/${f%.c}.d" >> rules.mk + done + printf "%s\n" "build/$libdir/lib$libname.a:" >> rules.mk + printf "\t\$(ARCHIVE)\n" >> rules.mk + printf "%s\n" "libs: build/$libdir/lib$libname.a" >> rules.mk + mkdir -p "build/$libdir/" +done + +# Generate rules for simple binaries +for bin in bin/*.c; do + mkdir -p "build/bin/" + printf "%s\n" "build/${bin%.c}.o: $bin" >> rules.mk + printf "\t\$(OBJECT)\n" >> rules.mk + printf "%s\n" "build/${bin%.c}: build/${bin%.c}.o" >> rules.mk + printf "\t\$(BINARY)\n" >> rules.mk + printf "%s\n" "bins: build/${bin%.c}" >> rules.mk +done diff --git a/rules.mk b/rules.mk new file mode 100644 index 0000000..92e6b1b --- /dev/null +++ b/rules.mk @@ -0,0 +1,189 @@ +build/lib/a/argv0.o: lib/a/argv0.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/argv0.o +-include build/lib/a/argv0.d +build/lib/a/ecalloc.o: lib/a/ecalloc.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/ecalloc.o +-include build/lib/a/ecalloc.d +build/lib/a/efopen.o: lib/a/efopen.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/efopen.o +-include build/lib/a/efopen.d +build/lib/a/efreadline.o: lib/a/efreadline.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/efreadline.o +-include build/lib/a/efreadline.d +build/lib/a/emalloc.o: lib/a/emalloc.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/emalloc.o +-include build/lib/a/emalloc.d +build/lib/a/eraise.o: lib/a/eraise.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/eraise.o +-include build/lib/a/eraise.d +build/lib/a/erealloc.o: lib/a/erealloc.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/erealloc.o +-include build/lib/a/erealloc.d +build/lib/a/esignal.o: lib/a/esignal.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/esignal.o +-include build/lib/a/esignal.d +build/lib/a/estrdup.o: lib/a/estrdup.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/estrdup.o +-include build/lib/a/estrdup.d +build/lib/a/fatal.o: lib/a/fatal.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/fatal.o +-include build/lib/a/fatal.d +build/lib/a/forkexec.o: lib/a/forkexec.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/forkexec.o +-include build/lib/a/forkexec.d +build/lib/a/gc.o: lib/a/gc.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/gc.o +-include build/lib/a/gc.d +build/lib/a/options.o: lib/a/options.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/options.o +-include build/lib/a/options.d +build/lib/a/opts_parse.o: lib/a/opts_parse.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/opts_parse.o +-include build/lib/a/opts_parse.d +build/lib/a/opts_parsespec.o: lib/a/opts_parsespec.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/opts_parsespec.o +-include build/lib/a/opts_parsespec.d +build/lib/a/opts_printhelp.o: lib/a/opts_printhelp.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/opts_printhelp.o +-include build/lib/a/opts_printhelp.d +build/lib/a/set_option.o: lib/a/set_option.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/set_option.o +-include build/lib/a/set_option.d +build/lib/a/smprintf.o: lib/a/smprintf.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/smprintf.o +-include build/lib/a/smprintf.d +build/lib/a/strmcat.o: lib/a/strmcat.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/strmcat.o +-include build/lib/a/strmcat.d +build/lib/a/usage.o: lib/a/usage.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/usage.o +-include build/lib/a/usage.d +build/lib/a/warn.o: lib/a/warn.c config.mk + $(OBJECT) +build/lib/liba.a: build/lib/a/warn.o +-include build/lib/a/warn.d +build/lib/liba.a: + $(ARCHIVE) +libs: build/lib/liba.a +build/lib/net/netaccept.o: lib/net/netaccept.c config.mk + $(OBJECT) +build/lib/libnet.a: build/lib/net/netaccept.o +-include build/lib/net/netaccept.d +build/lib/net/netannounce.o: lib/net/netannounce.c config.mk + $(OBJECT) +build/lib/libnet.a: build/lib/net/netannounce.o +-include build/lib/net/netannounce.d +build/lib/net/netdial.o: lib/net/netdial.c config.mk + $(OBJECT) +build/lib/libnet.a: build/lib/net/netdial.o +-include build/lib/net/netdial.d +build/lib/net/netlisten.o: lib/net/netlisten.c config.mk + $(OBJECT) +build/lib/libnet.a: build/lib/net/netlisten.o +-include build/lib/net/netlisten.d +build/lib/net/netresolve.o: lib/net/netresolve.c config.mk + $(OBJECT) +build/lib/libnet.a: build/lib/net/netresolve.o +-include build/lib/net/netresolve.d +build/lib/net/netsocket.o: lib/net/netsocket.c config.mk + $(OBJECT) +build/lib/libnet.a: build/lib/net/netsocket.o +-include build/lib/net/netsocket.d +build/lib/libnet.a: + $(ARCHIVE) +libs: build/lib/libnet.a +build/lib/ui/font_close.o: lib/ui/font_close.c config.mk + $(OBJECT) +build/lib/libui.a: build/lib/ui/font_close.o +-include build/lib/ui/font_close.d +build/lib/ui/font_load.o: lib/ui/font_load.c config.mk + $(OBJECT) +build/lib/libui.a: build/lib/ui/font_load.o +-include build/lib/ui/font_load.d +build/lib/ui/ui_begin.o: lib/ui/ui_begin.c config.mk + $(OBJECT) +build/lib/libui.a: build/lib/ui/ui_begin.o +-include build/lib/ui/ui_begin.d +build/lib/ui/ui_end.o: lib/ui/ui_end.c config.mk + $(OBJECT) +build/lib/libui.a: build/lib/ui/ui_end.o +-include build/lib/ui/ui_end.d +build/lib/ui/window_create.o: lib/ui/window_create.c config.mk + $(OBJECT) +build/lib/libui.a: build/lib/ui/window_create.o +-include build/lib/ui/window_create.d +build/lib/ui/window_delete.o: lib/ui/window_delete.c config.mk + $(OBJECT) +build/lib/libui.a: build/lib/ui/window_delete.o +-include build/lib/ui/window_delete.d +build/lib/ui/window_hide.o: lib/ui/window_hide.c config.mk + $(OBJECT) +build/lib/libui.a: build/lib/ui/window_hide.o +-include build/lib/ui/window_hide.d +build/lib/ui/window_show.o: lib/ui/window_show.c config.mk + $(OBJECT) +build/lib/libui.a: build/lib/ui/window_show.o +-include build/lib/ui/window_show.d +build/lib/libui.a: + $(ARCHIVE) +libs: build/lib/libui.a +build/bin/dial.o: bin/dial.c + $(OBJECT) +build/bin/dial: build/bin/dial.o + $(BINARY) +bins: build/bin/dial +build/bin/edit.o: bin/edit.c + $(OBJECT) +build/bin/edit: build/bin/edit.o + $(BINARY) +bins: build/bin/edit +build/bin/init.o: bin/init.c + $(OBJECT) +build/bin/init: build/bin/init.o + $(BINARY) +bins: build/bin/init +build/bin/listen.o: bin/listen.c + $(OBJECT) +build/bin/listen: build/bin/listen.o + $(BINARY) +bins: build/bin/listen +build/bin/pick.o: bin/pick.c + $(OBJECT) +build/bin/pick: build/bin/pick.o + $(BINARY) +bins: build/bin/pick +build/bin/screenlock.o: bin/screenlock.c + $(OBJECT) +build/bin/screenlock: build/bin/screenlock.o + $(BINARY) +bins: build/bin/screenlock +build/bin/shell.o: bin/shell.c + $(OBJECT) +build/bin/shell: build/bin/shell.o + $(BINARY) +bins: build/bin/shell +build/bin/winmgr.o: bin/winmgr.c + $(OBJECT) +build/bin/winmgr: build/bin/winmgr.o + $(BINARY) +bins: build/bin/winmgr -- 2.55.0