PROJDIR := ../../.. SOURCEDIR := $(PROJDIR)/src BUILDDIR := $(PROJDIR)/build/linux_$(DIST) TARGET = $(PROJDIR)/dist/linux_$(DIST)/labyrinth DIRS = common common/spc common/wall platforms/linux data_conversion SOURCEDIRS = $(foreach dir, $(DIRS), $(addprefix $(SOURCEDIR)/, $(dir))) TARGETDIRS = $(foreach dir, $(DIRS), $(addprefix $(BUILDDIR)/, $(dir))) INCLUDES = $(foreach dir, $(SOURCEDIRS), $(addprefix -I, $(dir))) VPATH = $(SOURCEDIRS) SOURCES = $(foreach dir,$(SOURCEDIRS),$(wildcard $(dir)/*.c)) OBJS := $(subst $(SOURCEDIR),$(BUILDDIR),$(SOURCES:.c=.o)) DEPS = $(OBJS:.o=.d) CC = gcc CFLAGS = -fpack-struct define generateRules $(1)/%.o: %.c @echo -n "Compiling " @echo $$@... | cut -d/ -f6- @$(CC) -g -fpack-struct -Wall -march=$(ARCH) $(AFLAGS) -c $$(INCLUDES) -D LARGER_SYSTEM -o $$@ $$< -MMD endef .PHONY: all clean distclean directories clean-plat distclean-plat tgz all: @make --no-print-directory directories DIST=x86-64 CC=gcc ARCH=x86-64 x86-64 # @make --no-print-directory directories DIST=x86-32 CC=i686-linux-gnu-gcc ARCH=i386 AFLAGS="-m32" x86-32 # @make --no-print-directory directories DIST=arm64 CC=aarch64-linux-gnu-gcc ARCH=armv8-a arm64 # @make --no-print-directory directories DIST=armhf CC=arm-linux-gnueabihf-gcc ARCH=armv7+fp armhf # @make --no-print-directory directories DIST=armel CC=arm-linux-gnueabi-gcc ARCH=armv6 armel $(DIST): @rm -rf $(PROJDIR)/dist/linux_$(DIST) @echo @echo Building for Linux $(DIST)... @make --no-print-directory directories $(TARGET) @echo Copying master data... @cd $(PROJDIR)/master_data && cp -rf * ../dist/linux_$(DIST) $(TARGET): $(OBJS) @echo Linking Linux $(DIST)... @$(CC) -g -fpack-struct -lncurses -march=$(ARCH) $(AFLAGS) $(OBJS) -o $(TARGET) -include $(DEPS) $(foreach targetdir, $(TARGETDIRS), $(eval $(call generateRules, $(targetdir)))) directories: @mkdir -p $(TARGETDIRS) @mkdir -p `dirname $(TARGET)` clean: @make --no-print-directory ARCH=i386 clean-plat @make --no-print-directory ARCH=x86-64 clean-plat distclean: @make --no-print-directory ARCH=i386 distclean-plat @make --no-print-directory ARCH=x86-64 distclean-plat clean-plat: @rm -rf $(BUILDDIR) distclean-plat: clean-plat @rm -rf `dirname $(TARGET)` tgz: all @echo @echo -n "Creating distribution archives: " @cd $(PROJDIR)/dist && \ REV=`svn info http://svn.ocfco.net/public/DND/ -r 'HEAD' | grep "Last Changed Rev" | egrep -o "[0-9]+"` && \ for i in x86-64 ; do \ echo -n "$$i "; \ tar -czf Labyrinth-unstable$$REV-linux_$$i.tar.gz linux_$$i; \ done; \ echo