aboutsummaryrefslogtreecommitdiff
path: root/Makefile.ckati
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2015-07-21 15:36:08 -0700
committerColin Cross <ccross@android.com>2015-07-21 16:07:36 -0700
commit65b44b0646b490903fe5c70fc7e0bc038d439b31 (patch)
tree333ef7f86f99dafda15b49678370c69f5e49e543 /Makefile.ckati
parentf479d54a50e287c4d287787f67e843f1be6a1936 (diff)
downloadkati-65b44b0646b490903fe5c70fc7e0bc038d439b31.tar.gz
[C++] Allow overriding the Makefile paths
Allow Makefile.ckati to be included by another Makefile that set KATI_CXX, KATI_INTERMEDIATES_PATH, and KATI_BIN_PATH. Allows the kati build to be embedded into the Android build.
Diffstat (limited to 'Makefile.ckati')
-rw-r--r--Makefile.ckati78
1 files changed, 56 insertions, 22 deletions
diff --git a/Makefile.ckati b/Makefile.ckati
index 79be4d5..cb407d4 100644
--- a/Makefile.ckati
+++ b/Makefile.ckati
@@ -12,9 +12,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+# Find source file location from path to this Makefile
+KATI_SRC_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))
+
+# Set defaults if they weren't set by the including Makefile
KATI_CXX ?= $(CXX)
+KATI_LD ?= $(CXX)
+KATI_INTERMEDIATES_PATH ?= .
+KATI_BIN_PATH ?= .
-KATI_CXX_SRCS:= \
+KATI_CXX_SRCS := \
ast.cc \
command.cc \
dep.cc \
@@ -38,38 +45,65 @@ KATI_CXX_SRCS:= \
symtab.cc \
timeutil.cc \
value.cc \
- var.cc \
+ var.cc
+
+KATI_CXX_GENERATED_SRCS := \
version.cc
-KATI_CXX_TEST_SRCS:= \
- $(wildcard *_test.cc)
-KATI_CXX_OBJS:=$(KATI_CXX_SRCS:.cc=.o)
-KATI_CXX_TEST_OBJS:=$(KATI_CXX_TEST_SRCS:.cc=.o)
-KATI_CXX_ALL_OBJS:=$(KATI_CXX_SRCS:.cc=.o) $(KATI_CXX_TEST_SRCS:.cc=.o)
-KATI_CXX_TEST_EXES:=$(KATI_CXX_TEST_OBJS:.o=)
-KATI_CXXFLAGS:=-g -W -Wall -MMD
-KATI_CXXFLAGS+=-O -DNOLOG
-#KATI_CXXFLAGS+=-pg
-
-ckati: $(KATI_CXX_OBJS)
- $(KATI_CXX) -std=c++11 $(KATI_CXXFLAGS) -o $@ $(KATI_CXX_OBJS)
-
-$(KATI_CXX_ALL_OBJS): %.o: %.cc
+
+KATI_CXX_SRCS := $(addprefix $(KATI_SRC_PATH)/,$(KATI_CXX_SRCS))
+KATI_CXX_TEST_SRCS:= $(wildcard $(KATI_SRC_PATH)/*_test.cc)
+
+KATI_CXX_OBJS := $(patsubst $(KATI_SRC_PATH)/%.cc,$(KATI_INTERMEDIATES_PATH)/%.o,\
+ $(KATI_CXX_SRCS))
+KATI_CXX_GENERATED_OBJS := $(patsubst %.cc,$(KATI_INTERMEDIATES_PATH)/%.o,\
+ $(KATI_CXX_GENERATED_SRCS))
+KATI_CXX_TEST_OBJS := $(patsubst $(KATI_SRC_PATH)/%.cc,$(KATI_INTERMEDIATES_PATH)/%.o,\
+ $(KATI_CXX_TEST_SRCS))
+
+KATI_CXX_TEST_EXES := $(patsubst $(KATI_INTERMEDIATES_PATH)/%.o,$(KATI_BIN_PATH)/%,\
+ $(KATI_CXX_TEST_OBJS))
+
+KATI_CXXFLAGS := -g -W -Wall -MMD -MP
+KATI_CXXFLAGS += -O -DNOLOG
+#KATI_CXXFLAGS += -pg
+
+# Rule to build ckati into KATI_BIN_PATH
+$(KATI_BIN_PATH)/ckati: $(KATI_CXX_OBJS) $(KATI_CXX_GENERATED_OBJS)
+ @mkdir -p $(dir $@)
+ $(KATI_LD) -std=c++11 $(KATI_CXXFLAGS) -o $@ $^
+
+# Rule to build normal source files into object files in KATI_INTERMEDIATES_PATH
+$(KATI_CXX_OBJS) $(KATI_CXX_TEST_OBJS): $(KATI_INTERMEDIATES_PATH)/%.o: $(KATI_SRC_PATH)/%.cc
+ @mkdir -p $(dir $@)
+ $(KATI_CXX) -c -std=c++11 $(KATI_CXXFLAGS) -o $@ $<
+
+# Rule to build generated source files into object files in KATI_INTERMEDIATES_PATH
+$(KATI_CXX_GENERATED_OBJS): $(KATI_INTERMEDIATES_PATH)/%.o: $(KATI_INTERMEDIATES_PATH)/%.cc
+ @mkdir -p $(dir $@)
$(KATI_CXX) -c -std=c++11 $(KATI_CXXFLAGS) -o $@ $<
ckati_tests: $(KATI_CXX_TEST_EXES)
-$(KATI_CXX_TEST_EXES): $(filter-out main.o,$(KATI_CXX_OBJS))
-$(KATI_CXX_TEST_EXES): %: %.o
- $(KATI_CXX) $^ -o $@
+# Rule to build tests using *_test.cc and all normal *.cc files except main.cc
+$(KATI_CXX_TEST_EXES): $(filter-out $(KATI_INTERMEDIATES_PATH)/main.o,$(KATI_CXX_OBJS)) $(KATI_CXX_GENERATED_OBJS)
+$(KATI_CXX_TEST_EXES): $(KATI_BIN_PATH)/%: $(KATI_INTERMEDIATES_PATH)/%.o
+ $(KATI_LD) $^ -o $@
-version.cc: .git/HEAD .git/index
+# Rule to generate version.cc
+KATI_GIT_DIR := $(shell cd $(KATI_SRC_PATH) && git rev-parse --show-toplevel)
+$(KATI_INTERMEDIATES_PATH)/version.cc: $(KATI_GIT_DIR)/.git/HEAD $(KATI_GIT_DIR)/.git/index
+ @mkdir -p $(dir $@)
echo '// +build ignore' > $@
echo >> $@
echo 'const char* kGitVersion = "$(shell git rev-parse HEAD)";' >> $@
ckati_clean:
- rm -rf ckati *.o *.d $(KATI_CXX_TEST_EXES) version.cc
+ rm -rf $(KATI_INTERMEDIATES_PATH)/ckati
+ rm -rf $(KATI_INTERMEDIATES_PATH)/*.o
+ rm -rf $(KATI_INTERMEDIATES_PATH)/*.d
+ rm -rf $(KATI_INTERMEDIATES_PATH)/version.cc
+ rm -rf $(KATI_CXX_TEST_EXES)
.PHONY: ckati_clean
--include *.d
+-include $(KATI_INTERMEDIATES_PATH)/*.d