1 PLATFORM ?= x86_64-linux-gnu
3 BUILDDIR ?= target/$(PLATFORM)
6 CFLAGS ::= -g -std=c99 -Wall -Wextra -Wpedantic $(CFLAGS)
8 LDLIBS ::= -L/usr/local/lib -lGL -lGLEW -lglut -lassimp $(LDLIBS)
24 srcfiles ::= $(addprefix $(SRCDIR)/, $(sources))
26 objects ::= $(addprefix $(BUILDDIR)/, $(addsuffix .o, $(srcfiles)))
27 depfiles ::= $(addprefix $(BUILDDIR)/, $(addsuffix .mk, $(srcfiles)))
29 # Set executable name for the platform
30 # TODO Base this on target platform instead of host OS
31 #ifeq ($(OS),Windows_NT)
36 binary ::= $(BUILDDIR)/shadowclad #$(binext)
42 # Default rule: build executable
45 @echo "###### Linking executable..."
46 $(CC) $(LDFLAGS) -o $(binary) $^ $(LOADLIBES) $(LDLIBS)
48 # Build C translation units
49 $(objects): $(BUILDDIR)/%.c.o: %.c $(BUILDDIR)/%.c.mk
51 $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
57 # Initialise build environment
69 @LD_LIBRARY_PATH=/usr/local/lib $(binary)
80 # Generate C prerequisite makefiles
81 $(depfiles): $(BUILDDIR)/%.c.mk: %.c Makefile
83 @echo "Generating prerequisites for $<"
84 @$(CPP) -MM -MT $(BUILDDIR)/$*.c.o -MF $@ $(CPPFLAGS) $<
85 # Give the same prerequisites to the prerequisite makefile,
86 # so that it is regenerated whenever any of said prerequisites change
87 @sed -E -i 's|^([^\s:]+)([ :])|\1 $@\2|' $@
89 # Include generated C prerequisites
90 include $(foreach depfile, $(depfiles), $(shell [ -r "$(depfile)" ] && echo "$(depfile)"))
92 # Do not automatically delete generated prerequisites
93 .SECONDARY: $(depfiles)