# ======================================================================= #
#                          ACK CONFIGURATION                              #
#                      (Edit this before building)                        #
# ======================================================================= #

# What platform to build for by default?

DEFAULT_PLATFORM = pc86

# Where should the ACK put its temporary files?

ACK_TEMP_DIR = /tmp

# Where is the ACK going to be installed, eventually?

PREFIX = /usr/local

# Where do you want to put the object files used when building?

BUILDDIR = $(ACK_TEMP_DIR)/ack-build

# What build flags do you want to use?

CFLAGS = -g
LDFLAGS = -s

# ======================================================================= #
#                         END OF CONFIGURATION                            #
# ======================================================================= #
#
# You shouldn't need to change anything below this point unless you are
# actually developing ACK.

OBJDIR = $(BUILDDIR)/obj
BINDIR = $(BUILDDIR)/bin
LIBDIR = $(BUILDDIR)/lib
INCDIR = $(BUILDDIR)/include
INSDIR = $(BUILDDIR)/staging

PLATIND = $(INSDIR)/share/ack
PLATDEP = $(INSDIR)/lib/ack

CC = gcc
AR = ar
RM = rm -f
CP = cp

hide = @

CFLAGS += \
	-I$(INCDIR) \
	-Imodules/h \
	-Ih

LDFLAGS +=

all: installables

.DELETE_ON_ERROR:

include first/core.mk

include modules/src/object/build.mk
include modules/src/alloc/build.mk
include modules/src/input/build.mk
include modules/src/idf/build.mk
include modules/src/system/build.mk
include modules/src/string/build.mk
include modules/src/print/build.mk
include modules/src/flt_arith/build.mk
include modules/src/em_code/build.mk
include modules/src/em_mes/build.mk
include modules/src/read_em/build.mk

include util/amisc/build.mk
include util/cmisc/build.mk
include util/ack/build.mk
include util/LLgen/build.mk
include util/data/build.mk
include util/opt/build.mk
include util/ncgg/build.mk
include util/arch/build.mk
include util/misc/build.mk
include util/led/build.mk
include util/topgen/build.mk
include util/ego/build.mk

include lang/cem/build.mk
include lang/basic/build.mk
include lang/pc/build.mk
include lang/m2/build.mk

include mach/proto/as/build.mk
include mach/proto/ncg/build.mk
include mach/proto/top/build.mk

include plat/linux/liblinux/build.mk

include mach/i80/build.mk
include mach/i386/build.mk
include mach/i86/build.mk
include mach/m68020/build.mk
# include mach/powerpc/build.mk

include plat/build.mk
include plat/pc86/build.mk
include plat/cpm/build.mk
include plat/linux386/build.mk
include plat/linux68k/build.mk
# include plat/linuxppc/build.mk

.PHONY: installables
installables: $(INSTALLABLES)
	@echo ""
	@echo "Build completed successfully."

.PHONY: install
install: installables
	@echo INSTALLING into $(PREFIX)
	$(hide) tar cf - -C $(INSDIR) . | tar xvf - -C $(PREFIX)

.PHONY: clean
clean:
	@echo CLEAN
	$(hide) $(RM) $(CLEANABLES)

$(INCDIR)/local.h:
	@echo LOCAL
	@mkdir -p $(dir $@)
	$(hide) echo '#define VERSION 3' > $@
	$(hide) echo '#define ACKM "$(DEFAULT_PLATFORM)"' >> $@
	$(hide) echo '#define BIGMACHINE 1' >> $@
	$(hide) echo '#define SYS_5' >> $@

$(INCDIR)/em_path.h:
	@echo EM_PATH
	@mkdir -p $(dir $@)
	$(hide) echo '#define TMP_DIR "$(ACK_TEMP_DIR)"' > $@
	$(hide) echo '#define EM_DIR "$(PREFIX)"' >> $@
	$(hide) echo '#define ACK_PATH "share/ack/descr"' >> $@

-include $(DEPENDS)