]> git.mdlowis.com Git - proto/aos.git/commitdiff
added auto rule generation
authorMichael D. Lowis <mike@mdlowis.com>
Wed, 15 Dec 2021 04:30:07 +0000 (23:30 -0500)
committerMichael D. Lowis <mike@mdlowis.com>
Wed, 15 Dec 2021 04:30:07 +0000 (23:30 -0500)
Makefile
bin/rules.mk [new file with mode: 0644]
config.mk
genrules.sh
rules.mk [deleted file]

index 58addd35b1d6f19b90a7c8f3c1f7902d0849f407..5c64912b28011aa252fa1c057ecff6baaad52974 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,14 +1,16 @@
-.PHONY: all libs bins clean rules
+.PHONY: all libs bins clean
 
 all: libs bins
 
 clean:
        find build/ -type f -delete
-       
-rules:
-       ./genrules.sh
+       rm -r build/ rules.mk
 
 bins: libs
 
 include config.mk
+
+rules.mk:
+       ./genrules.sh $(OUTDIR)
 include rules.mk
+include bin/rules.mk
diff --git a/bin/rules.mk b/bin/rules.mk
new file mode 100644 (file)
index 0000000..a4af44e
--- /dev/null
@@ -0,0 +1,3 @@
+$(BINDIR)/dial:       LIBS += -lnet
+$(BINDIR)/listen:     LIBS += -lnet
+$(BINDIR)/screenlock: LIBS += -lnet -lui -lX11 -lXft -lfontconfig
index 9f5b5a57d8dfc49a7b69a1f51e8adcef55201129..cf179ab1199a67e10c6722c7bfc6c4ab0d4241a6 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -1,4 +1,6 @@
-MAKEFLAGS = -j8
+MAKEFLAGS = -j
+OUTDIR = build
+BINDIR = $(OUTDIR)/bin
 
 CC = cc
 CFLAGS = -g -Wall -Wextra -Werror
@@ -7,8 +9,10 @@ CPPFLAGS = -Iinc/ -I/usr/include/freetype2
 AR = ar
 ARFLAGS = rs
 
-LDFLAGS = -Lbuild/lib/ -la -lnet -lui -lX11 -lXft -lfontconfig
+LDFLAGS = -Lbuild/lib/ $(LIBS)
+LIBS = -la
+#LIBS = -la -lnet -lui -lX11 -lXft -lfontconfig
 
 ARCHIVE = $(AR) $(ARFLAGS) $@ $^
 BINARY  = $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
-OBJECT  = $(CC) $(CFLAGS) $(CPPFLAGS) -MMD -c -o $@ $< 
+OBJECT  = $(CC) $(CFLAGS) $(CPPFLAGS) -MMD -c -o $@ $<
index 28e91f6eaa5ecba670258de63d8b72f80c3cf338..6a58c6d2c841c91a05fc89d6a45bb651d1d65346 100755 (executable)
@@ -1,35 +1,37 @@
 #!/bin/sh
 
-rm -rf build/
+OUTDIR="$1"
+
 printf "" > rules.mk
 libs=""
 {
+    mkdir -p "$OUTDIR/bin/"
+    mkdir -p "$OUTDIR/lib/"
+
     # Generate rules for all libraries
     for lib in lib/*; do
         libdir="$(dirname "$lib")"
         libname="$(basename "$lib")"
-        libs="$libs build/$libdir/lib$libname.a"
+        libs="$libs \$(OUTDIR)/$libdir/lib$libname.a"
+        mkdir -p "$OUTDIR/$lib/"
         for f in "$lib"/*; do
-            mkdir -p "build/$(dirname "$f")"
-            printf "%s\n" "build/${f%.c}.o: $f config.mk"
+            printf "%s\n" "\$(OUTDIR)/${f%.c}.o: $f config.mk"
             printf "\t\$(OBJECT)\n"
-            printf "%s\n" "build/$libdir/lib$libname.a: build/${f%.c}.o"
-            printf "%sinclude %s\n" '-' "build/${f%.c}.d"
+            printf "%s\n" "\$(OUTDIR)/$libdir/lib$libname.a: \$(OUTDIR)/${f%.c}.o"
+            printf "%sinclude %s\n" '-' "\$(OUTDIR)/${f%.c}.d"
         done
-        printf "%s\n"   "build/$libdir/lib$libname.a:"
+        printf "%s\n"   "\$(OUTDIR)/$libdir/lib$libname.a:"
         printf "\t\$(ARCHIVE)\n"
-        printf "%s\n"   "libs: build/$libdir/lib$libname.a"
-        mkdir -p "build/$libdir/"
+        printf "%s\n"  "libs: \$(OUTDIR)/$libdir/lib$libname.a"
     done
-    printf "libs = %s\n" "$libs" 
+    printf "libs = %s\n" "$libs"
 
     # Generate rules for simple binaries
     for bin in bin/*.c; do
-        mkdir -p "build/bin/"
-        printf "%s\n" "build/${bin%.c}.o: $bin"
+        printf "%s\n" "\$(OUTDIR)/${bin%.c}.o: $bin"
         printf "\t\$(OBJECT)\n"
-        printf "%s\n" "build/${bin%.c}: build/${bin%.c}.o \$(libs)"
+        printf "%s\n" "\$(OUTDIR)/${bin%.c}: \$(OUTDIR)/${bin%.c}.o \$(libs)"
         printf "\t\$(BINARY)\n"
-        printf "%s\n" "bins: build/${bin%.c}"
+        printf "%s\n" "bins: \$(OUTDIR)/${bin%.c}"
     done
 } >> rules.mk
diff --git a/rules.mk b/rules.mk
deleted file mode 100644 (file)
index d8c04e8..0000000
--- a/rules.mk
+++ /dev/null
@@ -1,190 +0,0 @@
-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
-libs =  build/lib/liba.a build/lib/libnet.a build/lib/libui.a
-build/bin/dial.o: bin/dial.c
-       $(OBJECT)
-build/bin/dial: build/bin/dial.o $(libs)
-       $(BINARY)
-bins: build/bin/dial
-build/bin/edit.o: bin/edit.c
-       $(OBJECT)
-build/bin/edit: build/bin/edit.o $(libs)
-       $(BINARY)
-bins: build/bin/edit
-build/bin/init.o: bin/init.c
-       $(OBJECT)
-build/bin/init: build/bin/init.o $(libs)
-       $(BINARY)
-bins: build/bin/init
-build/bin/listen.o: bin/listen.c
-       $(OBJECT)
-build/bin/listen: build/bin/listen.o $(libs)
-       $(BINARY)
-bins: build/bin/listen
-build/bin/pick.o: bin/pick.c
-       $(OBJECT)
-build/bin/pick: build/bin/pick.o $(libs)
-       $(BINARY)
-bins: build/bin/pick
-build/bin/screenlock.o: bin/screenlock.c
-       $(OBJECT)
-build/bin/screenlock: build/bin/screenlock.o $(libs)
-       $(BINARY)
-bins: build/bin/screenlock
-build/bin/shell.o: bin/shell.c
-       $(OBJECT)
-build/bin/shell: build/bin/shell.o $(libs)
-       $(BINARY)
-bins: build/bin/shell
-build/bin/winmgr.o: bin/winmgr.c
-       $(OBJECT)
-build/bin/winmgr: build/bin/winmgr.o $(libs)
-       $(BINARY)
-bins: build/bin/winmgr