diff options
author | Colin Cross <ccross@android.com> | 2015-07-21 15:36:08 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2015-07-21 16:07:36 -0700 |
commit | 65b44b0646b490903fe5c70fc7e0bc038d439b31 (patch) | |
tree | 333ef7f86f99dafda15b49678370c69f5e49e543 /Makefile.ckati | |
parent | f479d54a50e287c4d287787f67e843f1be6a1936 (diff) | |
download | kati-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.ckati | 78 |
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 |