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