1ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner# Custom GNUMakefile to rebuild nawk for the Android NDK 2ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner# (C) 2011 The Android Open Source Project 3ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner# yada yda yada Apache 2.0 License.... 4ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 5ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerBUILD_DIR ?= /tmp/ndk-$(USER)/build-awk 6ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 7ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 83b28972d8a5a108579496233266fccd69c9d2fe5Andrew HsiehCC := $(HOST_CC) 93b28972d8a5a108579496233266fccd69c9d2fe5Andrew HsiehCFLAGS := $(CFLAGS) -O2 -I$(BUILD_DIR) -I. 103b28972d8a5a108579496233266fccd69c9d2fe5Andrew HsiehLDFLAGS := $(LDFLAGS) -Wl,-s 113b28972d8a5a108579496233266fccd69c9d2fe5Andrew HsiehBISON := bison 123b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh 133b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh# NATIVE_CC is to build maketab which needs to run in order 143b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh# to generate proctab.c from ytab.h. Set it to host native 153b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh# cc if host can run windows binary (MINGW=yes) or darwin binary 163b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh# (DARWIN=yes) 173b28972d8a5a108579496233266fccd69c9d2fe5Andrew HsiehNATIVE_CC ?= $(CC) 183b28972d8a5a108579496233266fccd69c9d2fe5Andrew HsiehNATIVE_CFLAGS ?= $(CFLAGS) 193b28972d8a5a108579496233266fccd69c9d2fe5Andrew HsiehNATIVE_LDFLAGS ?= $(LDFLAGS) 20ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 21ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerMINGW := $(strip $(WIN32)) 22d0b797fbf45f3cec923b22f93b61e86a1f867844Andrew HsiehTRY64 := $(strip $(TRY64)) 23ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 24ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerifeq ($(V),1) 25ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerhide := 26ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerelse 27ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerhide := @ 28ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerendif 29ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 30ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerSOURCES := \ 31ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner lex.c \ 32ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner b.c \ 33ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner main.c \ 34ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner parse.c \ 35ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner lib.c \ 36ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner run.c \ 37ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner tran.c \ 38ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 39ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerEXE := 40ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 41ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerifdef MINGW 42d0b797fbf45f3cec923b22f93b61e86a1f867844Andrew Hsiehifdef TRY64 43d0b797fbf45f3cec923b22f93b61e86a1f867844Andrew HsiehCC := x86_64-pc-mingw32msvc-gcc 44d0b797fbf45f3cec923b22f93b61e86a1f867844Andrew Hsiehelse 45bf3f7295a6d9cb0a09dd8d950134abe5fa271ac9Pavel ChupinCC := i586-pc-mingw32msvc-gcc 46d0b797fbf45f3cec923b22f93b61e86a1f867844Andrew Hsiehendif 47ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerEXE := .exe 48ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerendif 49ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 50ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerPROGRAM := $(BUILD_DIR)/ndk-awk$(EXE) 51ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 52ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerall: $(PROGRAM) 53ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 54ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerOBJECTS := 55ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 56ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerYTAB_H := $(BUILD_DIR)/ytab.h 57ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerYTAB_C := $(BUILD_DIR)/ytab.c 58ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerYTAB_O := $(YTAB_C:.c=.o) 59ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner$(YTAB_C): awkgram.y 60ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner @echo "Bison: ytab.c" 61ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner $(hide)$(BISON) -o $@ --defines=$(YTAB_H) awkgram.y 62ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 63ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner$(YTAB_H): $(YTAB_C) awkgram.y 64ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 65ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerOBJECTS += $(YTAB_O) 66ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 67ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner# $1: source file 68ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner# $2: object file 69ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerdefine build-c-file 70ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerOBJECTS += $2 71ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner$2: $1 $(YTAB_H) 72ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner @echo "Compile: $1" 73ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner $$(hide)mkdir -p $$(dir $$@) 74ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner $$(hide)$$(CC) $$(CFLAGS) -c -o $$@ $$< 75ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerendef 76ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 77ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner$(foreach src,$(filter %.c,$(SOURCES)),\ 78ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner $(eval $(call build-c-file,$(src),$(BUILD_DIR)/$(src:%.c=%.o)))\ 79ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner) 80ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 81ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerMAKETAB := $(BUILD_DIR)/maketab$(EXE) 82ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner$(MAKETAB): maketab.c $(BUILD_DIR)/ytab.h 833b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh @echo "Native Executable: $(notdir $@)" 843b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh $(hide)$(NATIVE_CC) $(NATIVE_CFLAGS) $(NATIVE_LDFLAGS) maketab.c -o $@ 85ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 86ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerPROCTAB_C := $(BUILD_DIR)/proctab.c 87ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David TurnerPROCTAB_O := $(PROCTAB_C:%.c=%.o) 88ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 89ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner$(eval $(call build-c-file,$(PROCTAB_C),$(PROCTAB_O))) 90ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 91ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner$(PROCTAB_C): $(MAKETAB) $(YTAB_H) 92ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner @echo "Gen: $(notdir $@)" 933b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh $(hide)$(MAKETAB) $(YTAB_H) > $@ 94ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 95ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 96ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner$(PROGRAM): $(OBJECTS) 97ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner @echo "Link: $(notdir $@)" 98ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner $(hide)$(CC) $(LDFLAGS) -o $@ $(OBJECTS) -lm 99ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner 100ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turnerclean: 101ce5707c0255040b895f1c90ac9a435d8a4b8f2d6David Turner $(hide)rm -f $(OBJECTS) $(PROGRAM) $(MAKETAB) $(YTAB_C) $(YTAB_H) $(PROGTAB_C) 102