# Custom GNUMakefile to rebuild nawk for the Android NDK # (C) 2011 The Android Open Source Project # yada yda yada Apache 2.0 License.... BUILD_DIR ?= /tmp/ndk-$(USER)/build-awk CC := $(HOST_CC) CFLAGS := $(CFLAGS) -O2 -I$(BUILD_DIR) -I. LDFLAGS := $(LDFLAGS) -Wl,-s BISON := bison # NATIVE_CC is to build maketab which needs to run in order # to generate proctab.c from ytab.h. Set it to host native # cc if host can run windows binary (MINGW=yes) or darwin binary # (DARWIN=yes) NATIVE_CC ?= $(CC) NATIVE_CFLAGS ?= $(CFLAGS) NATIVE_LDFLAGS ?= $(LDFLAGS) MINGW := $(strip $(WIN32)) TRY64 := $(strip $(TRY64)) ifeq ($(V),1) hide := else hide := @ endif SOURCES := \ lex.c \ b.c \ main.c \ parse.c \ lib.c \ run.c \ tran.c \ EXE := ifdef MINGW ifdef TRY64 CC := x86_64-pc-mingw32msvc-gcc else CC := i586-pc-mingw32msvc-gcc endif EXE := .exe endif PROGRAM := $(BUILD_DIR)/ndk-awk$(EXE) all: $(PROGRAM) OBJECTS := YTAB_H := $(BUILD_DIR)/ytab.h YTAB_C := $(BUILD_DIR)/ytab.c YTAB_O := $(YTAB_C:.c=.o) $(YTAB_C): awkgram.y @echo "Bison: ytab.c" $(hide)$(BISON) -o $@ --defines=$(YTAB_H) awkgram.y $(YTAB_H): $(YTAB_C) awkgram.y OBJECTS += $(YTAB_O) # $1: source file # $2: object file define build-c-file OBJECTS += $2 $2: $1 $(YTAB_H) @echo "Compile: $1" $$(hide)mkdir -p $$(dir $$@) $$(hide)$$(CC) $$(CFLAGS) -c -o $$@ $$< endef $(foreach src,$(filter %.c,$(SOURCES)),\ $(eval $(call build-c-file,$(src),$(BUILD_DIR)/$(src:%.c=%.o)))\ ) MAKETAB := $(BUILD_DIR)/maketab$(EXE) $(MAKETAB): maketab.c $(BUILD_DIR)/ytab.h @echo "Native Executable: $(notdir $@)" $(hide)$(NATIVE_CC) $(NATIVE_CFLAGS) $(NATIVE_LDFLAGS) maketab.c -o $@ PROCTAB_C := $(BUILD_DIR)/proctab.c PROCTAB_O := $(PROCTAB_C:%.c=%.o) $(eval $(call build-c-file,$(PROCTAB_C),$(PROCTAB_O))) $(PROCTAB_C): $(MAKETAB) $(YTAB_H) @echo "Gen: $(notdir $@)" $(hide)$(MAKETAB) $(YTAB_H) > $@ $(PROGRAM): $(OBJECTS) @echo "Link: $(notdir $@)" $(hide)$(CC) $(LDFLAGS) -o $@ $(OBJECTS) -lm clean: $(hide)rm -f $(OBJECTS) $(PROGRAM) $(MAKETAB) $(YTAB_C) $(YTAB_H) $(PROGTAB_C)