+++ /dev/null
-#include "revised.h"
-
-XConf X;
-Monitor Monitors[MAX_MONITORS] = {0};
-Client Clients[MAX_CLIENTS];
-size_t FreeClients[MAX_CLIENTS / (sizeof(size_t) * 8u)] = 0;
-
-int main(int argc, char** argv)
-{
- printf("%d\n", MAX_CLIENTS);
- printf("%f mb\n", (float)sizeof(Clients) / 1024.0 / 1024.0);
- printf("%f mb\n", (float)sizeof(FreeClients) / 1024.0 / 1024.0);
- printf("%lu + %lu = %lu (%f mb)\n",
- sizeof(X),
- sizeof(Monitors),
- sizeof(X) + sizeof(Monitors),
- ((float)sizeof(X) + (float)sizeof(Monitors)) / 1024.0 / 1024.0
- );
- return 0;
-}
BINDIR = $(OUTDIR)/bin
CC = cc
-CFLAGS = -O2 -g -Wall -Wextra -Werror
+CFLAGS = -O2 -g --std=c99 -pedantic -Wall -Wextra -Werror
CPPFLAGS = -Iinc/ -I/usr/include/freetype2
AR = ar
LDFLAGS = -Lbuild/lib/ $(LIBS)
LIBS = -la
-#LIBS = -la -lnet -lui -lX11 -lXft -lfontconfig
ARCHIVE = $(AR) $(ARFLAGS) $@ $^
-BINARY = $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LDFLAGS)
+BINARY = $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $^ $(LDFLAGS)
OBJECT = $(CC) $(CFLAGS) $(CPPFLAGS) -MMD -c -o $@ $<
--- /dev/null
+#!/bin/sh
+
+OUTDIR="$1"
+
+puts(){
+ printf "%s\n" "$@"
+}
+
+ObjectRules(){
+ target="$1"
+ while read -r source;
+ do
+ mkdir -p "$(dirname "$OUTDIR/obj/$source")"
+ puts "\$(OUTDIR)/obj/${source%.c}.o: $source config.mk"
+ printf "\t\$(OBJECT)\n"
+ puts "$target: \$(OUTDIR)/obj/${source%.c}.o"
+ printf "%sinclude %s\n" '-' "\$(OUTDIR)/obj/${source%.c}.d"
+ done
+}
+
+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 \$(OUTDIR)/$libdir/lib$libname.a"
+
+ find "$lib" -name '*.c' | ObjectRules "\$(OUTDIR)/$libdir/lib$libname.a"
+ puts "\$(OUTDIR)/$libdir/lib$libname.a:"
+ printf "\t\$(ARCHIVE)\n"
+ puts "libs: \$(OUTDIR)/$libdir/lib$libname.a"
+ done
+ puts "libs = $libs"
+
+ # Generate rules for simple binaries
+ for bin in bin/*.c; do
+ puts "\$(OUTDIR)/${bin%.c}.o: $bin"
+ printf "\t\$(OBJECT)\n"
+ puts "\$(OUTDIR)/${bin%.c}: | \$(libs)"
+ puts "\$(OUTDIR)/${bin%.c}: \$(OUTDIR)/${bin%.c}.o"
+ printf "\t\$(BINARY)\n"
+ puts "bins: \$(OUTDIR)/${bin%.c}"
+ done
+
+ # Generate rules for complex binaries
+ for bin in bin/*/ ; do
+ find "${bin%/}" -name '*.c' | ObjectRules "\$(OUTDIR)/${bin%/}"
+ puts "\$(OUTDIR)/${bin%/}: | \$(libs)"
+ printf "\t\$(BINARY)\n"
+ puts "bins: \$(OUTDIR)/${bin%/}"
+ done
+} >> rules.mk