aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile91
1 files changed, 49 insertions, 42 deletions
diff --git a/Makefile b/Makefile
index 1a111cd..0f9ec16 100644
--- a/Makefile
+++ b/Makefile
@@ -1,56 +1,63 @@
-CC=gcc
-CFLAGS=-std=c17 -Wall -Werror -g
-test_framework=criterion
-
-# Directories
-bin_dir=bin
-obj_dir=obj
-src_dir=src
-test_dir=tests
-
-# Files
-src_files=$(wildcard $(src_dir)/*.c)
-obj_files=$(patsubst $(src_dir)/%.c, $(obj_dir)/%.o, $(src_files))
-test_files=$(wildcard $(test_dir)/*.c)
-test_bins=$(patsubst $(test_dir)/%.c, $(bin_dir)/%, $(test_files))
-
-# Actions
-.PHONY: all
-all: test
+proj:=dslibc
-.PHONY: test
-test: $(test_bins)
- @for test in $(test_bins); do ./$$test --verbose --jobs 1 ; done
+# COMPILER OPTIONS
+CC:=gcc
+CFLAGS:=-std=c17 -Wall -Werror -g
+
+# DIRECTORIES
+objdir:=obj
+srcdir:=src
+bindir:=bin
+testdir:=test
+
+# FILES
+srcfiles:=$(wildcard $(srcdir)/*.c)
+objfiles=$(patsubst $(srcdir)/%.c,$(objdir)/%.o, $(srcfiles))
+objfiles:=$(filter-out $(objdir)/main.o, $(objfiles))
+testfiles:=$(wildcard $(testdir)/*tests.c)
+
+bin:=$(bindir)/$(proj)
+testbins:=$(patsubst $(testdir)/%.c,$(bindir)/%, $(testfiles))
+
+# TARGETS
+
+.PHONY: build
+build: $(objdir) $(bindir) $(bin)
.PHONY: clean
clean:
- rm -r $(bin_dir) $(obj_dir)
+ -rm -r $(bindir) $(objdir)
+
+.PHONY: test
+test: build $(testbins)
+ @for test in $(testbins); do ./$$test; done
-.PHONY: demo
-demo: $(bin_dir)/demo
+.phony: run
+run: build
+ @$(bin)
.PHONY: info
info:
- @printf "src_files: %s\n" "$(src_files)"
- @printf "obj_files: %s\n" "$(obj_files)"
- @printf "test_files: %s\n" "$(test_files)"
- @printf "test_bins: %s\n" "$(test_bins)"
-
-# Make Directories
-$(obj_dir):
- mkdir $@
+ @echo "srcfiles: $(srcfiles)"
+ @echo "objfiles: $(objfiles)"
+ @echo "testfiles: $(testfiles)"
+ @echo "testbins: $(testbins)"
-$(bin_dir):
- mkdir $@
+# Create binary
+$(bin): $(objfiles) $(srcdir)/main.c
+ $(CC) $(CFLAGS) $^ -o $@
-# Make object files
-$(obj_dir)/%.o: $(src_files) $(obj_dir)
+# Create object files
+$(objdir)/%.o: $(srcdir)/%.c
$(CC) $(CFLAGS) -o $@ -c $<
# Make test binaries
-$(bin_dir)/%: $(bin_dir) $(test_files) $(obj_files)
- $(CC) $(CFLAGS) -o $@ -l $(test_framework) $(filter-out $<,$^)
+$(bindir)/%: $(testfiles) $(objfiles)
+ $(CC) $(CFLAGS) -o $@ -l criterion $^
-# Make demo executable
-$(bin_dir)/demo: $(bin_dir) $(obj_files) demo/main.c
- $(CC) $(CFLAGS) -o $@ $(filter-out $<,$^)
+# Create Directories
+$(objdir):
+ mkdir $@
+
+$(bindir):
+ mkdir $@