Skip to content

Commit

Permalink
[make] make infer/src/Makefile less phony
Browse files Browse the repository at this point in the history
Reviewed By: jberdine

Differential Revision: D4319515

fbshipit-source-id: 607022c
  • Loading branch information
jvillard authored and Facebook Github Bot committed Dec 14, 2016
1 parent 475f37e commit bce1a1f
Show file tree
Hide file tree
Showing 21 changed files with 195 additions and 178 deletions.
7 changes: 0 additions & 7 deletions .gitignore
Expand Up @@ -80,7 +80,6 @@ buck-out/
/infer/bin/InferUnit
/infer/bin/Typeprop
/infer/bin/infer
/infer/bin/inferTraceBugs
/infer/src/base/Version.ml
/infer/models/java/models/
/infer/models/java/models.jar
Expand All @@ -93,12 +92,6 @@ buck-out/
/infer/lib/specs/cpp_models
/infer/lib/specs/objc_models
/infer/lib/specs/clean_models
/infer/lib/wrappers/c++
/infer/lib/wrappers/cc
/infer/lib/wrappers/clang
/infer/lib/wrappers/clang++
/infer/lib/wrappers/g++
/infer/lib/wrappers/gcc
/scripts/checkCopyright
/infer/etc/clang_ast.dict
/infer/src/toplevel.mlpack
Expand Down
112 changes: 41 additions & 71 deletions Makefile
Expand Up @@ -38,63 +38,43 @@ DIRECT_TESTS += objc_frontend_test objc_errors_test objc_linters_test objcpp_fro
endif

.PHONY: all
all: infer inferTraceBugs

# executable names that should point to InferClang to trigger capture
INFERCLANG_WRAPPERS_BASENAMES = c++ cc clang clang++ g++ gcc
INFERCLANG_WRAPPERS_PATHS = $(foreach cc,$(INFERCLANG_WRAPPERS_BASENAMES),$(LIB_DIR)/wrappers/$(cc))

$(INFERCLANG_WRAPPERS_PATHS): Makefile
$(REMOVE) $@ && \
cd $(@D) && \
$(LN_S) ../../bin/InferClang $(@F)

$(BIN_DIR):
$(MKDIR_P) $@

$(INFERTRACEBUGS_BIN_RELPATH): Makefile $(BIN_DIR)
$(REMOVE) $@ && \
cd $(@D) && \
$(LN_S) ../lib/python/$(@F) $(@F)
all: infer

.PHONY: src_build
src_build:
ifeq ($(IS_FACEBOOK_TREE),yes)
$(MAKE) -C facebook
@$(MAKE) -C facebook
endif
$(MAKE) -C $(SRC_DIR) infer
@$(MAKE) -C $(SRC_DIR) infer
ifeq ($(BUILD_C_ANALYZERS),yes)
src_build: clang_plugin
endif

.PHONY: infer
infer: src_build
ifeq ($(BUILD_JAVA_ANALYZERS),yes)
$(MAKE) -C $(ANNOTATIONS_DIR)
endif
$(MAKE) -C $(MODELS_DIR) all
ifeq ($(BUILD_C_ANALYZERS),yes)
infer: $(INFERCLANG_WRAPPERS_PATHS)
@$(MAKE) -C $(ANNOTATIONS_DIR)
endif
@$(MAKE) -C $(MODELS_DIR) all

.PHONY: clang_setup
clang_setup:
export CC="$(CC)" CFLAGS="$(CFLAGS)"; \
@export CC="$(CC)" CFLAGS="$(CFLAGS)"; \
export CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)"; \
export CPP="$(CPP)" LDFLAGS="$(LDFLAGS)" LIBS="$(LIBS)"; \
$(FCP_DIR)/clang/setup.sh $(INFER_FCP_SETUP_OPTS)
$(FCP_DIR)/clang/setup.sh $(INFER_FCP_SETUP_OPTS) > /dev/null

.PHONY: clang_plugin
clang_plugin: clang_setup
ifeq ($(IS_RELEASE_TREE),no)
$(MAKE) -C $(FCP_DIR)/libtooling all \
@$(MAKE) -C $(FCP_DIR)/libtooling all \
CC=$(CC) CXX=$(CXX) \
CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" \
CPP="$(CPP)" LDFLAGS="$(LDFLAGS)" LIBS="$(LIBS)" \
LOCAL_CLANG=$(CLANG_PREFIX)/bin/clang \
CLANG_PREFIX=$(CLANG_PREFIX) \
CLANG_INCLUDES=$(CLANG_INCLUDES)
$(MAKE) -C $(FCP_DIR)/clang-ocaml all \
@$(MAKE) -C $(FCP_DIR)/clang-ocaml all \
build/clang_ast_proj.ml build/clang_ast_proj.mli \
CC=$(CC) CXX=$(CXX) \
CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" \
Expand All @@ -104,29 +84,16 @@ ifeq ($(IS_RELEASE_TREE),no)
CLANG_INCLUDES=$(CLANG_INCLUDES)
endif

.PHONY: inferTraceBugs
inferTraceBugs: $(INFERTRACEBUGS_BIN_RELPATH)

.PHONY: test_this_build
test_this_build: clang_plugin
ifeq ($(IS_FACEBOOK_TREE),yes)
$(MAKE) -C facebook
endif
$(MAKE) -C $(SRC_DIR) test_build

.PHONY: test_oss_build
test_oss_build: clang_plugin
$(MAKE) -C $(SRC_DIR) EXTRA_DEPS=opensource TEST_BUILD_DIR=$(BUILD_DIR)/opensource test_build

.PHONY: test_build
test_build: test_this_build
test_build: clang_plugin
ifeq ($(IS_FACEBOOK_TREE),yes)
test_build: test_oss_build
@$(MAKE) -C facebook
endif
@$(MAKE) -C $(SRC_DIR) test_build

.PHONY: ocaml_unit_test
ocaml_unit_test: test_this_build
$(TEST_BUILD_DIR)/unit/inferunit.byte
ocaml_unit_test: test_build
$(call silent_on_success,$(TEST_BUILD_DIR)/unit/inferunit.byte)

DIRECT_TESTS_REPLACE = $(patsubst %_frontend_test,%_frontend_replace,$(filter %_frontend_test,$(DIRECT_TESTS)))

Expand All @@ -138,15 +105,15 @@ define gen_direct_test_rule
$(1): infer
($(MAKE) -C \
$(INFER_DIR)/tests/codetoanalyze/$(shell printf $(1) | cut -f 1 -d _)/$(shell printf $(1) | cut -f 2 -d _) \
$(shell printf $(1) | cut -f 3 -d _) \
test \
3>&1 1>&2- 2>&3- ) \
| grep -v "warning: ignoring old commands for target" \
| grep -v "warning: overriding commands for target" \
; exit $$$${PIPESTATUS[0]}

.PHONY: $(1)_clean
$(1)_clean:
$(MAKE) -C \
@$(MAKE) -C \
$(INFER_DIR)/tests/codetoanalyze/$(shell printf $(1) | cut -f 1 -d _)/$(shell printf $(1) | cut -f 2 -d _) \
clean
endef
Expand All @@ -161,11 +128,15 @@ direct_tests: $(DIRECT_TESTS)
define gen_build_system_test_rule
.PHONY: build_$(1)_test
build_$(1)_test: infer
$(MAKE) -C $(INFER_DIR)/tests/build_systems/$(1) test
@($(MAKE) -C $(INFER_DIR)/tests/build_systems/$(1) test \
3>&1 1>&2- 2>&3- ) \
| grep -v "warning: ignoring old commands for target" \
| grep -v "warning: overriding commands for target" \
; exit $$$${PIPESTATUS[0]}

.PHONY: build_$(1)_clean
build_$(1)_clean:
$(MAKE) -C $(INFER_DIR)/tests/build_systems/$(1) clean
@$(MAKE) -C $(INFER_DIR)/tests/build_systems/$(1) clean
endef

$(foreach test,$(BUILD_SYSTEMS_TESTS), $(eval $(call gen_build_system_test_rule,$(test))))
Expand Down Expand Up @@ -199,17 +170,17 @@ check_missing_mli:
test -f "$$x"i || echo Missing "$$x"i; done

.PHONY: toplevel
toplevel: infer
$(MAKE) -C $(SRC_DIR) toplevel
toplevel: clang_plugin
@$(MAKE) -C $(SRC_DIR) toplevel

.PHONY: inferScriptMode_test
inferScriptMode_test: toplevel
inferScriptMode_test: test_build
$(call silent_on_success,\
INFER_REPL_BINARY=ocaml $(SCRIPT_DIR)/infer_repl $(INFER_DIR)/tests/repl/infer_batch_script.ml)

.PHONY: checkCopyright
checkCopyright:
$(MAKE) -C $(SRC_DIR) checkCopyright
@$(MAKE) -C $(SRC_DIR) checkCopyright

.PHONY: run-test
run-test: test_build ocaml_unit_test buck_test inferTraceBugs_test inferScriptMode_test checkCopyright
Expand All @@ -224,7 +195,7 @@ else
endif

.PHONY: quick-test
quick-test: test_this_build ocaml_unit_test
quick-test: test_build ocaml_unit_test

.PHONY: test-replace
test-replace:
Expand All @@ -239,15 +210,14 @@ test-replace:
.PHONY: uninstall
uninstall:
$(REMOVE_DIR) $(DESTDIR)$(libdir)/infer/
$(REMOVE) $(DESTDIR)$(bindir)/inferTraceBugs
$(REMOVE) $(DESTDIR)$(bindir)/infer

.PHONY: test_clean
test_clean: $(foreach test,$(DIRECT_TESTS),$(test)_clean) \
$(foreach test,$(BUILD_SYSTEMS_TESTS),build_$(test)_clean)

.PHONY: install
install: infer inferTraceBugs
install: infer
# create directory structure
test -d $(DESTDIR)$(bindir) || \
$(MKDIR_P) $(DESTDIR)$(bindir)
Expand Down Expand Up @@ -300,10 +270,12 @@ ifeq ($(BUILD_C_ANALYZERS),yes)
@for i in $$(find infer/lib/clang_wrappers/*); do \
$(INSTALL_PROGRAM) -C $$i $(DESTDIR)$(libdir)/infer/$$i; \
done
# only for files that point to InferClang
(cd $(DESTDIR)$(libdir)/infer/infer/lib/wrappers/ && \
$(REMOVE) $(INFERCLANG_WRAPPERS_BASENAMES) && \
$(foreach cc,$(INFERCLANG_WRAPPERS_BASENAMES), \
$(LN_S) ../../bin/InferClang $(cc);))
$(foreach cc,$(shell find $(LIB_DIR)/wrappers -type l), \
[ $(cc) -ef $(INFERCLANG_BIN) ] && \
$(REMOVE) $(notdir $(cc)) && \
$(LN_S) ../../bin/InferClang $(notdir $(cc));))
@for i in $$(find infer/lib/specs/*); do \
$(INSTALL_DATA) -C $$i $(DESTDIR)$(libdir)/infer/$$i; \
done
Expand Down Expand Up @@ -349,26 +321,24 @@ endif
$(LN_S) $(libdir)/infer/infer/lib/python/inferTraceBugs inferTraceBugs)

ifeq ($(IS_FACEBOOK_TREE),yes)
$(MAKE) -C facebook install
@$(MAKE) -C facebook install
endif

.PHONY: clean
clean: test_clean
ifeq ($(IS_RELEASE_TREE),no)
ifeq ($(BUILD_C_ANALYZERS),yes)
$(MAKE) -C $(FCP_DIR) clean
$(MAKE) -C $(FCP_DIR)/clang-ocaml clean
$(REMOVE) $(INFERCLANG_WRAPPERS_PATHS)
@$(MAKE) -C $(FCP_DIR) clean
@$(MAKE) -C $(FCP_DIR)/clang-ocaml clean
endif
endif
$(MAKE) -C $(SRC_DIR) clean
$(MAKE) -C $(ANNOTATIONS_DIR) clean
$(MAKE) -C $(MODELS_DIR) clean
$(REMOVE) $(INFERTRACEBUGS_BIN_RELPATH)
@$(MAKE) -C $(SRC_DIR) clean
@$(MAKE) -C $(ANNOTATIONS_DIR) clean
@$(MAKE) -C $(MODELS_DIR) clean
ifeq ($(IS_FACEBOOK_TREE),yes)
$(MAKE) -C facebook clean
@$(MAKE) -C facebook clean
endif
$(MAKE) -C $(DEPENDENCIES_DIR)/ocamldot clean
@$(MAKE) -C $(DEPENDENCIES_DIR)/ocamldot clean
find $(INFER_DIR)/tests -name '*.o' -or -name '*.o.sh' -delete

.PHONY: conf-clean
Expand Down
2 changes: 1 addition & 1 deletion Makefile.config.in
Expand Up @@ -61,7 +61,7 @@ REMOVE = rm -vf
REMOVE_DIR = rm -rvf
RSYNC_A = rsync -aq
endif
COPY = cp -f -p
COPY = cp -f
COPY_DIR = cp -Rf

ABSOLUTE_ROOT_DIR = $(shell cd $(ROOT_DIR) && pwd)
Expand Down
1 change: 1 addition & 0 deletions infer/bin/inferTraceBugs
1 change: 1 addition & 0 deletions infer/lib/wrappers/c++
1 change: 1 addition & 0 deletions infer/lib/wrappers/cc
1 change: 1 addition & 0 deletions infer/lib/wrappers/clang
1 change: 1 addition & 0 deletions infer/lib/wrappers/clang++
1 change: 1 addition & 0 deletions infer/lib/wrappers/g++
1 change: 1 addition & 0 deletions infer/lib/wrappers/gcc
20 changes: 10 additions & 10 deletions infer/models/Makefile
Expand Up @@ -26,24 +26,24 @@ ifeq ($(BUILD_JAVA_ANALYZERS),yes)
all: java
endif

.PHONY: java clang clean $(CLANG_SUBDIRS)
.PHONY: java clang clean clean_specs $(CLANG_SUBDIRS)

clean_specs:
$(REMOVE) $(SPECS_LIB_DIR)/*.specs

$(CLANG_SUBDIRS):
$(MAKE) -C $@ install
@$(MAKE) -C $@ install

clang: clean_specs
$(MAKE) $(CLANG_SUBDIRS)
clang:
@$(MAKE) $(CLANG_SUBDIRS)

java: clean_specs
$(MAKE) -C $@ install
java:
@$(MAKE) -C $@ install

clean: clean_specs
$(MAKE) -C $(JAVA_MODELS_DIR) clean
$(MAKE) -C $(C_MODELS_DIR) clean
$(MAKE) -C $(CPP_MODELS_DIR) clean
@$(MAKE) -C $(JAVA_MODELS_DIR) clean
@$(MAKE) -C $(C_MODELS_DIR) clean
@$(MAKE) -C $(CPP_MODELS_DIR) clean
ifneq (no, $(XCODE_SELECT))
$(MAKE) -C $(OBJC_MODELS_DIR) clean
@$(MAKE) -C $(OBJC_MODELS_DIR) clean
endif
20 changes: 12 additions & 8 deletions infer/models/c/Makefile
Expand Up @@ -10,20 +10,24 @@ include $(ROOT_DIR)/Makefile.config

C_MODELS_FILE = $(SPECS_LIB_DIR)/c_models
C_MODELS_SOURCES = $(shell find src/ -name "*.c")
INFER_RESULTS = out/report.json

all: $(C_MODELS_FILE)
all: install

$(C_MODELS_FILE): $(C_MODELS_SOURCES) $(CLANG_DEPS)
$(INFER_RESULTS): $(C_MODELS_SOURCES) $(CLANG_DEPS)
# make clean in src/ in case $(CLANG_DEPS) have changed
$(MAKE) -C src clean
$(INFER_BIN) -o out/ --models-mode --no-failures-allowed -- $(MAKE) -C src
touch $(C_MODELS_FILE)
@$(MAKE) -C src clean
$(INFER_BIN) -o $(@D) --models-mode --no-failures-allowed -- $(MAKE) -C src

$(C_MODELS_FILE): $(INFER_RESULTS)
@$(INSTALL_DATA) $(dir $(INFER_RESULTS))/specs/*.specs $(SPECS_LIB_DIR)
@touch $@

install: $(C_MODELS_FILE)
$(INSTALL_DATA) -C out/specs/*.specs $(SPECS_LIB_DIR)

clean:
@rm -f $(C_MODELS_FILE)
$(MAKE) -C src clean
$(REMOVE) $(C_MODELS_FILE)
$(REMOVE_DIR) $(dir $(INFER_RESULTS))
@$(MAKE) -C src clean

.PHONY: all clean install
20 changes: 12 additions & 8 deletions infer/models/cpp/Makefile
Expand Up @@ -11,20 +11,24 @@ include $(ROOT_DIR)/Makefile.config
CPP_MODELS_FILE = $(SPECS_LIB_DIR)/cpp_models
CPP_MODELS_SOURCES = $(shell find src/ -name "*.cpp")
C_MODELS_SOURCES = $(shell find src/c_src/ -name "*.c")
INFER_RESULTS = out/report.json

all: $(CPP_MODELS_FILE)
all: install

$(CPP_MODELS_FILE): $(CPP_MODELS_SOURCES) $(C_MODELS_SOURCES) $(CLANG_DEPS)
$(INFER_RESULTS): $(CPP_MODELS_SOURCES) $(C_MODELS_SOURCES) $(CLANG_DEPS)
# make clean in src/ in case $(CLANG_DEPS) have changed
$(MAKE) -C src clean
$(INFER_BIN) -o out/ --models-mode --no-failures-allowed --cxx -- $(MAKE) -C src
touch $(CPP_MODELS_FILE)
@$(MAKE) -C src clean
$(INFER_BIN) -o $(@D) --models-mode --no-failures-allowed -- $(MAKE) -C src

$(CPP_MODELS_FILE): $(INFER_RESULTS)
@$(INSTALL_DATA) $(dir $(INFER_RESULTS))/specs/*.specs $(SPECS_LIB_DIR)
@touch $@

install: $(CPP_MODELS_FILE)
$(INSTALL_DATA) -C out/specs/*.specs $(SPECS_LIB_DIR)

clean:
@rm -f $(CPP_MODELS_FILE)
$(MAKE) -C src clean
$(REMOVE) $(CPP_MODELS_FILE)
$(REMOVE_DIR) $(dir $(INFER_RESULTS))
@$(MAKE) -C src clean

.PHONY: all clean install

0 comments on commit bce1a1f

Please sign in to comment.