You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

763 lines
29 KiB

# Copyright (c) 2015-present, Facebook, Inc.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
.PHONY: default
default: infer
ROOT_DIR = .
include $(ROOT_DIR)/Makefile.config
ORIG_SHELL_BUILD_MODE = $(BUILD_MODE)
[build] switch to 4.05.0+flambda by default Summary: With flambda (`-O3`), compilation time is ~5x slower, but the backend is ~25% faster! To mitigate the atrocious compilation times, introduce a new `opt` build mode in the jbuilder files. - build in "opt" mode by default from the toplevel (so that install scripts and external users get the fastest infer by default), in "default" mode by default from infer/src (since the latter is only called directly by infer devs, for faster builds) - `make byte` is as fast as before in any mode - `make test` will build "opt" by default, which is very slow. Solution for testing (or building the models) locally: `make BUILD_MODE=default test`. - You can even change the default locally with `export BUILD_MODE=default`. The benchmarks are to be taken with a sizable pinch of salt because I ran them only once and other stuff could be running in the background. That said, the perf win is consistent across all projects, with 15-20% win in wallclock time and around 25% win in total CPU time, ~9% win in sys time, and ~25% fewer minor allocations, and ~5-10% fewer overall allocations. This is only for the backend; the capture is by and large unaffected (either the same or a tad faster within noise range). Here are the results running on OpenSSL 1.0.2d on osx (12 cores, 32G RAM) === base infer binary: 26193088 bytes compile time: 40s capture: ```lang=text real 1m7.513s user 3m11.437s sys 0m55.236s ``` analysis: ```lang=text real 5m41.580s user 61m37.855s sys 1m12.870s ``` Memory profile: ```lang=json { ... "minor_gb": 0.1534719169139862, "promoted_gb": 0.0038930922746658325, "major_gb": 0.4546157643198967, "allocated_gb": 0.6041945889592171, "minor_collections": 78, "major_collections": 23, "compactions": 7, "top_heap_gb": 0.07388687133789062, "stack_kb": 0.3984375, "minor_heap_kb": 8192.0, ... } ``` === flambda with stock options (no `-Oclassic`, just the same flags as base) Exactly the same as base. === flambda `-O3` infer binary: 56870376 bytes (2.17x bigger) compile time: 191s (4.78x slower) capture is the same as base: ```lang=text real 1m9.203s user 3m12.242s sys 0m58.905s ``` analysis is ~20% wallclock time faster, ~25% CPU time faster: ```lang=text real 4m32.656s user 46m43.987s sys 1m2.424s ``` memory usage is a bit lower too: ```lang=json { ... "minor_gb": 0.11583046615123749, // 75% of previous "promoted_gb": 0.00363825261592865, // 93% of previous "major_gb": 0.45415670424699783, // about same "allocated_gb": 0.5663489177823067, // 94% of previous "minor_collections": 73, "major_collections": 22, "compactions": 7, "top_heap_gb": 0.07165145874023438, "stack_kb": 0.3359375, "minor_heap_kb": 8192.0, ... } ``` === flambda `-O2` Not nearly as exciting as `-O3`, but the compilation cost is still quite high: infer: 37826856 bytes compilation of infer: 100s Capture and analysis timings are mostly the same as base. Reviewed By: jberdine Differential Revision: D4867979 fbshipit-source-id: 99230b7
7 years ago
# override this for faster builds (but slower infer)
BUILD_MODE ?= opt
MAKE_SOURCE = $(MAKE) -C $(SRC_DIR) INFER_BUILD_DIR=_build/$(BUILD_MODE)
[make] s/ocamlbuild/jbuilder/g Summary: Use jbuilder to build infer instead of ocamlbuild. This is mainly to get faster builds: ``` times in 10ms, ±differences measured in speedups, 4 cores | | ocb total | jb | ±total | ocb user | jb | ±user | ocb cpu | jb | ±cpu | ocb sys | jb | ±sys | |-----------------------------------+-----------+------+--------+----------+------+-------+---------+-----+------+---------+------+------| | byte from scratch | 6428 | 2456 | 2.62 | 7743 | 6662 | 1.16 | 138 | 331 | 2.40 | 1184 | 1477 | 0.80 | | native from scratch | 9841 | 4289 | 2.29 | 9530 | 8834 | 1.08 | 110 | 245 | 2.23 | 1373 | 1712 | 0.80 | | byte after native | 29578 | 1602 | 18.46 | 4514 | 4640 | 0.97 | 170 | 325 | 1.91 | 543 | 576 | 0.94 | | change infer.ml byte | 344 | 282 | 1.22 | 292 | 215 | 1.36 | 96 | 99 | 1.03 | 040 | 066 | 0.61 | | change infer.ml native | 837 | 223 | 3.75 | 789 | 174 | 4.53 | 98 | 99 | 1.01 | 036 | 47 | 0.77 | | change Config.ml byte | 451 | 339 | 1.33 | 382 | 336 | 1.14 | 97 | 122 | 1.26 | 056 | 80 | 0.70 | | change Config.ml native | 4024 | 1760 | 2.29 | 4585 | 4225 | 1.09 | 127 | 276 | 2.17 | 559 | 644 | 0.87 | | change cFrontend_config.ml byte | 348 | 643 | 0.54 | 297 | 330 | 0.90 | 96 | 67 | 0.70 | 038 | 102 | 0.37 | | change cFrontend_config.ml native | 1480 | 584 | 2.53 | 1435 | 906 | 1.58 | 106 | 185 | 1.75 | 136 | 178 | 0.76 | #+TBLFM: $4=$2/$3;f2::$7=$5/$6;f2::$10=$9/$8;f2::$13=$11/$12;f2 50 cores | | ocb total | jb | ±total | ocb user | jb | ±user | ocb cpu | jb | ±cpu | ocb sys | jb | ±sys | |---------------------+-----------+------+--------+----------+------+-------+---------+----+------+---------+------+------| | byte from scratch | 9114 | 2061 | 4.42 | 9334 | 5133 | 1.82 | | | 0/0 | 2566 | 1726 | 1.49 | | native from scratch | 13481 | 3967 | 3.40 | 12291 | 7608 | 1.62 | | | 0/0 | 3003 | 2100 | 1.43 | | byte after native | 3467 | 1476 | 2.35 | 5067 | 3912 | 1.30 | | | 0/0 | 971 | 801 | 1.21 | #+TBLFM: $4=$2/$3;f2::$7=$5/$6;f2::$10=$9/$8;f2::$13=$11/$12;f2 ``` Menu: 1. Write a jbuild file, autogenerated from jbuild.in because we need to fill in some information at build-time (really, at configure time, but TODO), such as whether or not clang is enabled. 2. Nuke lots of stuff from infer/src/Makefile that is now in the jbuild file 3. The jbuild file lives in infer/src/ so it can see all the sources. If we put it somewhere else, eg, infer/, then `jbuilder` scans too many files (all irrelevant) and takes 2.5s to start instead of .8s. Adding irrelevant directories to jbuild-ignore does not help. 4. jbuilder does not support subdirectories, so resort to listing all the source files in the generated jbuild (only source directories need to be manually listed in jbuild.in though). Still, the generated .merlin is wrong and makes merlin find source files in _build, so manually tune it to get good merlin support. We also lose some of merlin for unit tests as it cannot see their build artefacts anymore. 5. checkCopyright gets its own jbuild because it's standalone. Also, remove some deprecation warnings in checkCopyright due to the new version of Core from a while ago. 6. Drop less-used Makefile features (they had regressed anyway) such as building individual modules. Also, building mod_dep.pdf now takes all the source files available so they better build (before, it would only take the source files from the config, eg with or without clang) (that's pretty minor). 7. The toplevel is now built as a custom toplevel because that was easier. It should soon be even easier: https://github.com/janestreet/jbuilder/issues/210 8. Move BUILTINS.mli to BUILTINS.ml because jbuilder is not happy about interface files without implementations. In particular, I did not try to migrate too much of the Makefile logic to jbuilder, more can be done in the future. Reviewed By: jberdine Differential Revision: D5573661 fbshipit-source-id: 4ca6d8f
7 years ago
ifneq ($(UTOP),no)
BUILD_SYSTEMS_TESTS += infertop
[make] s/ocamlbuild/jbuilder/g Summary: Use jbuilder to build infer instead of ocamlbuild. This is mainly to get faster builds: ``` times in 10ms, ±differences measured in speedups, 4 cores | | ocb total | jb | ±total | ocb user | jb | ±user | ocb cpu | jb | ±cpu | ocb sys | jb | ±sys | |-----------------------------------+-----------+------+--------+----------+------+-------+---------+-----+------+---------+------+------| | byte from scratch | 6428 | 2456 | 2.62 | 7743 | 6662 | 1.16 | 138 | 331 | 2.40 | 1184 | 1477 | 0.80 | | native from scratch | 9841 | 4289 | 2.29 | 9530 | 8834 | 1.08 | 110 | 245 | 2.23 | 1373 | 1712 | 0.80 | | byte after native | 29578 | 1602 | 18.46 | 4514 | 4640 | 0.97 | 170 | 325 | 1.91 | 543 | 576 | 0.94 | | change infer.ml byte | 344 | 282 | 1.22 | 292 | 215 | 1.36 | 96 | 99 | 1.03 | 040 | 066 | 0.61 | | change infer.ml native | 837 | 223 | 3.75 | 789 | 174 | 4.53 | 98 | 99 | 1.01 | 036 | 47 | 0.77 | | change Config.ml byte | 451 | 339 | 1.33 | 382 | 336 | 1.14 | 97 | 122 | 1.26 | 056 | 80 | 0.70 | | change Config.ml native | 4024 | 1760 | 2.29 | 4585 | 4225 | 1.09 | 127 | 276 | 2.17 | 559 | 644 | 0.87 | | change cFrontend_config.ml byte | 348 | 643 | 0.54 | 297 | 330 | 0.90 | 96 | 67 | 0.70 | 038 | 102 | 0.37 | | change cFrontend_config.ml native | 1480 | 584 | 2.53 | 1435 | 906 | 1.58 | 106 | 185 | 1.75 | 136 | 178 | 0.76 | #+TBLFM: $4=$2/$3;f2::$7=$5/$6;f2::$10=$9/$8;f2::$13=$11/$12;f2 50 cores | | ocb total | jb | ±total | ocb user | jb | ±user | ocb cpu | jb | ±cpu | ocb sys | jb | ±sys | |---------------------+-----------+------+--------+----------+------+-------+---------+----+------+---------+------+------| | byte from scratch | 9114 | 2061 | 4.42 | 9334 | 5133 | 1.82 | | | 0/0 | 2566 | 1726 | 1.49 | | native from scratch | 13481 | 3967 | 3.40 | 12291 | 7608 | 1.62 | | | 0/0 | 3003 | 2100 | 1.43 | | byte after native | 3467 | 1476 | 2.35 | 5067 | 3912 | 1.30 | | | 0/0 | 971 | 801 | 1.21 | #+TBLFM: $4=$2/$3;f2::$7=$5/$6;f2::$10=$9/$8;f2::$13=$11/$12;f2 ``` Menu: 1. Write a jbuild file, autogenerated from jbuild.in because we need to fill in some information at build-time (really, at configure time, but TODO), such as whether or not clang is enabled. 2. Nuke lots of stuff from infer/src/Makefile that is now in the jbuild file 3. The jbuild file lives in infer/src/ so it can see all the sources. If we put it somewhere else, eg, infer/, then `jbuilder` scans too many files (all irrelevant) and takes 2.5s to start instead of .8s. Adding irrelevant directories to jbuild-ignore does not help. 4. jbuilder does not support subdirectories, so resort to listing all the source files in the generated jbuild (only source directories need to be manually listed in jbuild.in though). Still, the generated .merlin is wrong and makes merlin find source files in _build, so manually tune it to get good merlin support. We also lose some of merlin for unit tests as it cannot see their build artefacts anymore. 5. checkCopyright gets its own jbuild because it's standalone. Also, remove some deprecation warnings in checkCopyright due to the new version of Core from a while ago. 6. Drop less-used Makefile features (they had regressed anyway) such as building individual modules. Also, building mod_dep.pdf now takes all the source files available so they better build (before, it would only take the source files from the config, eg with or without clang) (that's pretty minor). 7. The toplevel is now built as a custom toplevel because that was easier. It should soon be even easier: https://github.com/janestreet/jbuilder/issues/210 8. Move BUILTINS.mli to BUILTINS.ml because jbuilder is not happy about interface files without implementations. In particular, I did not try to migrate too much of the Makefile logic to jbuilder, more can be done in the future. Reviewed By: jberdine Differential Revision: D5573661 fbshipit-source-id: 4ca6d8f
7 years ago
endif
ifeq ($(BUILD_C_ANALYZERS),yes)
BUILD_SYSTEMS_TESTS += \
assembly \
ck_analytics ck_imports \
clang_compilation_db_escaped clang_compilation_db_relpath \
clang_multiple_files \
clang_translation \
clang_unknown_ext \
clang_with_blacklisted_flags \
clang_with_E_flag \
clang_with_M_flag \
clang_with_MD_flag \
deduplicate_template_warnings \
delete_results_dir \
diff \
diff_gen_build_script \
fail_on_issue \
j1 \
linters \
project_root_rel \
reactive \
run_hidden_linters \
tracebugs \
uninit \
utf8_in_procname \
DIRECT_TESTS += \
c_biabduction c_bufferoverrun c_errors c_frontend c_performance c_uninit \
cpp_bufferoverrun cpp_errors cpp_frontend cpp_liveness cpp_ownership cpp_quandary \
cpp_racerd cpp_siof cpp_uninit cpp_nullable cpp_conflicts cpp_linters-for-test-only \
ifneq ($(BUCK),no)
BUILD_SYSTEMS_TESTS += buck-clang-db buck_flavors buck_flavors_run buck_flavors_deterministic
endif
ifneq ($(CMAKE),no)
BUILD_SYSTEMS_TESTS += clang_compilation_db cmake inferconfig
endif
ifneq ($(NDKBUILD),no)
BUILD_SYSTEMS_TESTS += ndk_build
endif
ifneq ($(PYTHON_lxml),no)
BUILD_SYSTEMS_TESTS += results_xml
endif
ifneq ($(XCODE_SELECT),no)
BUILD_SYSTEMS_TESTS += xcodebuild_no_xcpretty objc_getters_setters objc_missing_fld
DIRECT_TESTS += \
objc_frontend objc_errors objc_linters objc_ioslints objcpp_errors objcpp_nullable \
objcpp_frontend objcpp_linters objc_linters-for-test-only objcpp_linters-for-test-only \
objc_linters-def-folder objc_nullable objc_liveness objcpp_liveness objc_uninit
ifneq ($(XCPRETTY),no)
BUILD_SYSTEMS_TESTS += xcodebuild
endif
endif # XCODE_SELECT
endif # BUILD_C_ANALYZERS
ifeq ($(BUILD_JAVA_ANALYZERS),yes)
BUILD_SYSTEMS_TESTS += \
differential_interesting_paths_filter \
differential_skip_anonymous_class_renamings \
differential_skip_duplicated_types_on_filenames \
differential_skip_duplicated_types_on_filenames_with_renamings \
gradle \
java_test_determinator \
javac \
resource_leak_exception_lines \
racerd_dedup
DIRECT_TESTS += \
java_checkers java_eradicate java_infer java_lab java_tracing java_quandary \
java_racerd java_stability java_crashcontext java_starvation java_performance
ifneq ($(ANT),no)
BUILD_SYSTEMS_TESTS += ant
endif
ifneq ($(BUCK),no)
BUILD_SYSTEMS_TESTS += buck genrule buck_javac_jar
# Introduce the dependency only if the two tests are going to be built in parallel, so that they do
# not run in parallel (otherwise Buck has a bad time). This works by checking if one of the main
# testing targets was passed as a goal on the command line.
ifneq ($(filter build_systems_tests config_tests test test-replace,${MAKECMDGOALS}),)
build_genrule_print: build_buck_print
build_genrule_replace: build_buck_replace
build_genrule_test: build_buck_test
direct_java_racerd_path_stability_test: direct_java_racerd_test
endif
endif
ifneq ($(MVN),no)
BUILD_SYSTEMS_TESTS += mvn
endif
endif
ifeq ($(BUILD_C_ANALYZERS)+$(BUILD_JAVA_ANALYZERS),yes+yes)
BUILD_SYSTEMS_TESTS += make utf8_in_pwd waf
# the waf test and the make test run the same `make` command; use the same trick as for
# "build_buck_test" to prevent make from running them in parallel
ifneq ($(filter build_systems_tests config_tests test test-replace,${MAKECMDGOALS}),)
build_waf_replace: build_make_replace
build_waf_print: build_make_print
build_waf_test: build_make_test
endif
endif
ifeq ($(IS_INFER_RELEASE),no)
configure: configure.ac $(wildcard m4/*.m4)
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
# rerun ./autogen.sh in case of failure as the failure may be due to needing to rerun
# ./configure
$(QUIET)($(call silent_on_success,Generate ./configure,./autogen.sh)) || \
./autogen.sh
Makefile.autoconf: configure Makefile.autoconf.in
# rerun ./configure with the flags that were used last time it was run (if available)
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
# retry in case of failure as the failure may be due to needing to rerun ./configure
$(QUIET)($(call silent_on_success,Running\
./configure $(shell ./config.status --config || true),\
./configure $(shell ./config.status --config || true))) || \
./configure $(shell ./config.status --config || true)
endif
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
.PHONY: fb-setup
fb-setup:
$(QUIET)$(call silent_on_success,Facebook setup,\
$(MAKE) -C facebook setup)
OCAMLFORMAT_EXE?=ocamlformat
.PHONY: fmt
fmt:
parallel $(OCAMLFORMAT_EXE) -i ::: $$(git diff --name-only --diff-filter=ACMRU $$(git merge-base origin/master HEAD) | grep "\.mli\?$$")
DUNE_ML:=$(shell find * -name 'dune*.in' | grep -v workspace | grep -v sledge)
.PHONY: fmt_dune
fmt_dune:
parallel $(OCAMLFORMAT_EXE) -i ::: $(DUNE_ML)
SRC_ML:=$(shell find * \( -name _build -or -name facebook-clang-plugins -or -path facebook/dependencies -or -path sledge/llvm \) -not -prune -or -type f -and -name '*'.ml -or -name '*'.mli 2>/dev/null)
.PHONY: fmt_all
fmt_all:
parallel $(OCAMLFORMAT_EXE) -i ::: $(SRC_ML) $(DUNE_ML)
# pre-building these avoids race conditions when building, eg src_build and test_build in parallel
.PHONY: src_build_common
src_build_common:
$(QUIET)$(call silent_on_success,Generating source dependencies,\
[build] switch to 4.05.0+flambda by default Summary: With flambda (`-O3`), compilation time is ~5x slower, but the backend is ~25% faster! To mitigate the atrocious compilation times, introduce a new `opt` build mode in the jbuilder files. - build in "opt" mode by default from the toplevel (so that install scripts and external users get the fastest infer by default), in "default" mode by default from infer/src (since the latter is only called directly by infer devs, for faster builds) - `make byte` is as fast as before in any mode - `make test` will build "opt" by default, which is very slow. Solution for testing (or building the models) locally: `make BUILD_MODE=default test`. - You can even change the default locally with `export BUILD_MODE=default`. The benchmarks are to be taken with a sizable pinch of salt because I ran them only once and other stuff could be running in the background. That said, the perf win is consistent across all projects, with 15-20% win in wallclock time and around 25% win in total CPU time, ~9% win in sys time, and ~25% fewer minor allocations, and ~5-10% fewer overall allocations. This is only for the backend; the capture is by and large unaffected (either the same or a tad faster within noise range). Here are the results running on OpenSSL 1.0.2d on osx (12 cores, 32G RAM) === base infer binary: 26193088 bytes compile time: 40s capture: ```lang=text real 1m7.513s user 3m11.437s sys 0m55.236s ``` analysis: ```lang=text real 5m41.580s user 61m37.855s sys 1m12.870s ``` Memory profile: ```lang=json { ... "minor_gb": 0.1534719169139862, "promoted_gb": 0.0038930922746658325, "major_gb": 0.4546157643198967, "allocated_gb": 0.6041945889592171, "minor_collections": 78, "major_collections": 23, "compactions": 7, "top_heap_gb": 0.07388687133789062, "stack_kb": 0.3984375, "minor_heap_kb": 8192.0, ... } ``` === flambda with stock options (no `-Oclassic`, just the same flags as base) Exactly the same as base. === flambda `-O3` infer binary: 56870376 bytes (2.17x bigger) compile time: 191s (4.78x slower) capture is the same as base: ```lang=text real 1m9.203s user 3m12.242s sys 0m58.905s ``` analysis is ~20% wallclock time faster, ~25% CPU time faster: ```lang=text real 4m32.656s user 46m43.987s sys 1m2.424s ``` memory usage is a bit lower too: ```lang=json { ... "minor_gb": 0.11583046615123749, // 75% of previous "promoted_gb": 0.00363825261592865, // 93% of previous "major_gb": 0.45415670424699783, // about same "allocated_gb": 0.5663489177823067, // 94% of previous "minor_collections": 73, "major_collections": 22, "compactions": 7, "top_heap_gb": 0.07165145874023438, "stack_kb": 0.3359375, "minor_heap_kb": 8192.0, ... } ``` === flambda `-O2` Not nearly as exciting as `-O3`, but the compilation cost is still quite high: infer: 37826856 bytes compilation of infer: 100s Capture and analysis timings are mostly the same as base. Reviewed By: jberdine Differential Revision: D4867979 fbshipit-source-id: 99230b7
7 years ago
$(MAKE_SOURCE) src_build_common)
.PHONY: src_build
src_build: src_build_common
$(QUIET)$(call silent_on_success,Building native($(BUILD_MODE)) Infer,\
[build] switch to 4.05.0+flambda by default Summary: With flambda (`-O3`), compilation time is ~5x slower, but the backend is ~25% faster! To mitigate the atrocious compilation times, introduce a new `opt` build mode in the jbuilder files. - build in "opt" mode by default from the toplevel (so that install scripts and external users get the fastest infer by default), in "default" mode by default from infer/src (since the latter is only called directly by infer devs, for faster builds) - `make byte` is as fast as before in any mode - `make test` will build "opt" by default, which is very slow. Solution for testing (or building the models) locally: `make BUILD_MODE=default test`. - You can even change the default locally with `export BUILD_MODE=default`. The benchmarks are to be taken with a sizable pinch of salt because I ran them only once and other stuff could be running in the background. That said, the perf win is consistent across all projects, with 15-20% win in wallclock time and around 25% win in total CPU time, ~9% win in sys time, and ~25% fewer minor allocations, and ~5-10% fewer overall allocations. This is only for the backend; the capture is by and large unaffected (either the same or a tad faster within noise range). Here are the results running on OpenSSL 1.0.2d on osx (12 cores, 32G RAM) === base infer binary: 26193088 bytes compile time: 40s capture: ```lang=text real 1m7.513s user 3m11.437s sys 0m55.236s ``` analysis: ```lang=text real 5m41.580s user 61m37.855s sys 1m12.870s ``` Memory profile: ```lang=json { ... "minor_gb": 0.1534719169139862, "promoted_gb": 0.0038930922746658325, "major_gb": 0.4546157643198967, "allocated_gb": 0.6041945889592171, "minor_collections": 78, "major_collections": 23, "compactions": 7, "top_heap_gb": 0.07388687133789062, "stack_kb": 0.3984375, "minor_heap_kb": 8192.0, ... } ``` === flambda with stock options (no `-Oclassic`, just the same flags as base) Exactly the same as base. === flambda `-O3` infer binary: 56870376 bytes (2.17x bigger) compile time: 191s (4.78x slower) capture is the same as base: ```lang=text real 1m9.203s user 3m12.242s sys 0m58.905s ``` analysis is ~20% wallclock time faster, ~25% CPU time faster: ```lang=text real 4m32.656s user 46m43.987s sys 1m2.424s ``` memory usage is a bit lower too: ```lang=json { ... "minor_gb": 0.11583046615123749, // 75% of previous "promoted_gb": 0.00363825261592865, // 93% of previous "major_gb": 0.45415670424699783, // about same "allocated_gb": 0.5663489177823067, // 94% of previous "minor_collections": 73, "major_collections": 22, "compactions": 7, "top_heap_gb": 0.07165145874023438, "stack_kb": 0.3359375, "minor_heap_kb": 8192.0, ... } ``` === flambda `-O2` Not nearly as exciting as `-O3`, but the compilation cost is still quite high: infer: 37826856 bytes compilation of infer: 100s Capture and analysis timings are mostly the same as base. Reviewed By: jberdine Differential Revision: D4867979 fbshipit-source-id: 99230b7
7 years ago
$(MAKE_SOURCE) infer)
.PHONY: byte
byte: src_build_common
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(QUIET)$(call silent_on_success,Building byte Infer,\
[build] switch to 4.05.0+flambda by default Summary: With flambda (`-O3`), compilation time is ~5x slower, but the backend is ~25% faster! To mitigate the atrocious compilation times, introduce a new `opt` build mode in the jbuilder files. - build in "opt" mode by default from the toplevel (so that install scripts and external users get the fastest infer by default), in "default" mode by default from infer/src (since the latter is only called directly by infer devs, for faster builds) - `make byte` is as fast as before in any mode - `make test` will build "opt" by default, which is very slow. Solution for testing (or building the models) locally: `make BUILD_MODE=default test`. - You can even change the default locally with `export BUILD_MODE=default`. The benchmarks are to be taken with a sizable pinch of salt because I ran them only once and other stuff could be running in the background. That said, the perf win is consistent across all projects, with 15-20% win in wallclock time and around 25% win in total CPU time, ~9% win in sys time, and ~25% fewer minor allocations, and ~5-10% fewer overall allocations. This is only for the backend; the capture is by and large unaffected (either the same or a tad faster within noise range). Here are the results running on OpenSSL 1.0.2d on osx (12 cores, 32G RAM) === base infer binary: 26193088 bytes compile time: 40s capture: ```lang=text real 1m7.513s user 3m11.437s sys 0m55.236s ``` analysis: ```lang=text real 5m41.580s user 61m37.855s sys 1m12.870s ``` Memory profile: ```lang=json { ... "minor_gb": 0.1534719169139862, "promoted_gb": 0.0038930922746658325, "major_gb": 0.4546157643198967, "allocated_gb": 0.6041945889592171, "minor_collections": 78, "major_collections": 23, "compactions": 7, "top_heap_gb": 0.07388687133789062, "stack_kb": 0.3984375, "minor_heap_kb": 8192.0, ... } ``` === flambda with stock options (no `-Oclassic`, just the same flags as base) Exactly the same as base. === flambda `-O3` infer binary: 56870376 bytes (2.17x bigger) compile time: 191s (4.78x slower) capture is the same as base: ```lang=text real 1m9.203s user 3m12.242s sys 0m58.905s ``` analysis is ~20% wallclock time faster, ~25% CPU time faster: ```lang=text real 4m32.656s user 46m43.987s sys 1m2.424s ``` memory usage is a bit lower too: ```lang=json { ... "minor_gb": 0.11583046615123749, // 75% of previous "promoted_gb": 0.00363825261592865, // 93% of previous "major_gb": 0.45415670424699783, // about same "allocated_gb": 0.5663489177823067, // 94% of previous "minor_collections": 73, "major_collections": 22, "compactions": 7, "top_heap_gb": 0.07165145874023438, "stack_kb": 0.3359375, "minor_heap_kb": 8192.0, ... } ``` === flambda `-O2` Not nearly as exciting as `-O3`, but the compilation cost is still quite high: infer: 37826856 bytes compilation of infer: 100s Capture and analysis timings are mostly the same as base. Reviewed By: jberdine Differential Revision: D4867979 fbshipit-source-id: 99230b7
7 years ago
$(MAKE_SOURCE) byte)
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
.PHONY: test_build
test_build: src_build_common
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(QUIET)$(call silent_on_success,Testing Infer builds without warnings,\
[build] switch to 4.05.0+flambda by default Summary: With flambda (`-O3`), compilation time is ~5x slower, but the backend is ~25% faster! To mitigate the atrocious compilation times, introduce a new `opt` build mode in the jbuilder files. - build in "opt" mode by default from the toplevel (so that install scripts and external users get the fastest infer by default), in "default" mode by default from infer/src (since the latter is only called directly by infer devs, for faster builds) - `make byte` is as fast as before in any mode - `make test` will build "opt" by default, which is very slow. Solution for testing (or building the models) locally: `make BUILD_MODE=default test`. - You can even change the default locally with `export BUILD_MODE=default`. The benchmarks are to be taken with a sizable pinch of salt because I ran them only once and other stuff could be running in the background. That said, the perf win is consistent across all projects, with 15-20% win in wallclock time and around 25% win in total CPU time, ~9% win in sys time, and ~25% fewer minor allocations, and ~5-10% fewer overall allocations. This is only for the backend; the capture is by and large unaffected (either the same or a tad faster within noise range). Here are the results running on OpenSSL 1.0.2d on osx (12 cores, 32G RAM) === base infer binary: 26193088 bytes compile time: 40s capture: ```lang=text real 1m7.513s user 3m11.437s sys 0m55.236s ``` analysis: ```lang=text real 5m41.580s user 61m37.855s sys 1m12.870s ``` Memory profile: ```lang=json { ... "minor_gb": 0.1534719169139862, "promoted_gb": 0.0038930922746658325, "major_gb": 0.4546157643198967, "allocated_gb": 0.6041945889592171, "minor_collections": 78, "major_collections": 23, "compactions": 7, "top_heap_gb": 0.07388687133789062, "stack_kb": 0.3984375, "minor_heap_kb": 8192.0, ... } ``` === flambda with stock options (no `-Oclassic`, just the same flags as base) Exactly the same as base. === flambda `-O3` infer binary: 56870376 bytes (2.17x bigger) compile time: 191s (4.78x slower) capture is the same as base: ```lang=text real 1m9.203s user 3m12.242s sys 0m58.905s ``` analysis is ~20% wallclock time faster, ~25% CPU time faster: ```lang=text real 4m32.656s user 46m43.987s sys 1m2.424s ``` memory usage is a bit lower too: ```lang=json { ... "minor_gb": 0.11583046615123749, // 75% of previous "promoted_gb": 0.00363825261592865, // 93% of previous "major_gb": 0.45415670424699783, // about same "allocated_gb": 0.5663489177823067, // 94% of previous "minor_collections": 73, "major_collections": 22, "compactions": 7, "top_heap_gb": 0.07165145874023438, "stack_kb": 0.3359375, "minor_heap_kb": 8192.0, ... } ``` === flambda `-O2` Not nearly as exciting as `-O3`, but the compilation cost is still quite high: infer: 37826856 bytes compilation of infer: 100s Capture and analysis timings are mostly the same as base. Reviewed By: jberdine Differential Revision: D4867979 fbshipit-source-id: 99230b7
7 years ago
$(MAKE_SOURCE) test)
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
# deadcode analysis: only do the deadcode detection on Facebook builds and if GNU sed is available
.PHONY: real_deadcode
real_deadcode: src_build_common
$(QUIET)$(call silent_on_success,Testing there is no dead OCaml code,\
$(MAKE) -C $(SRC_DIR)/deadcode)
.PHONY: deadcode
deadcode:
ifeq ($(IS_FACEBOOK_TREE),no)
$(QUIET)echo "Deadcode detection only works in Facebook builds, skipping"
endif
ifeq ($(GNU_SED),no)
$(QUIET)echo "Deadcode detection only works with GNU sed installed, skipping"
endif
ifeq ($(IS_FACEBOOK_TREE),yes)
ifneq ($(GNU_SED),no)
deadcode: real_deadcode
endif
endif
.PHONY: toplevel toplevel_test
toplevel toplevel_test: src_build_common
toplevel:
$(QUIET)$(call silent_on_success,Building Infer REPL,\
$(MAKE_SOURCE) toplevel)
$(QUIET)echo
$(QUIET)echo "You can now use the infer REPL:"
$(QUIET)echo " \"$(ABSOLUTE_ROOT_DIR)/scripts/infer_repl\""
toplevel_test: test_build
$(QUIET)$(call silent_on_success,Building Infer REPL (test mode),\
$(MAKE_SOURCE) BUILD_MODE=test toplevel)
ifeq ($(IS_FACEBOOK_TREE),yes)
[make] s/ocamlbuild/jbuilder/g Summary: Use jbuilder to build infer instead of ocamlbuild. This is mainly to get faster builds: ``` times in 10ms, ±differences measured in speedups, 4 cores | | ocb total | jb | ±total | ocb user | jb | ±user | ocb cpu | jb | ±cpu | ocb sys | jb | ±sys | |-----------------------------------+-----------+------+--------+----------+------+-------+---------+-----+------+---------+------+------| | byte from scratch | 6428 | 2456 | 2.62 | 7743 | 6662 | 1.16 | 138 | 331 | 2.40 | 1184 | 1477 | 0.80 | | native from scratch | 9841 | 4289 | 2.29 | 9530 | 8834 | 1.08 | 110 | 245 | 2.23 | 1373 | 1712 | 0.80 | | byte after native | 29578 | 1602 | 18.46 | 4514 | 4640 | 0.97 | 170 | 325 | 1.91 | 543 | 576 | 0.94 | | change infer.ml byte | 344 | 282 | 1.22 | 292 | 215 | 1.36 | 96 | 99 | 1.03 | 040 | 066 | 0.61 | | change infer.ml native | 837 | 223 | 3.75 | 789 | 174 | 4.53 | 98 | 99 | 1.01 | 036 | 47 | 0.77 | | change Config.ml byte | 451 | 339 | 1.33 | 382 | 336 | 1.14 | 97 | 122 | 1.26 | 056 | 80 | 0.70 | | change Config.ml native | 4024 | 1760 | 2.29 | 4585 | 4225 | 1.09 | 127 | 276 | 2.17 | 559 | 644 | 0.87 | | change cFrontend_config.ml byte | 348 | 643 | 0.54 | 297 | 330 | 0.90 | 96 | 67 | 0.70 | 038 | 102 | 0.37 | | change cFrontend_config.ml native | 1480 | 584 | 2.53 | 1435 | 906 | 1.58 | 106 | 185 | 1.75 | 136 | 178 | 0.76 | #+TBLFM: $4=$2/$3;f2::$7=$5/$6;f2::$10=$9/$8;f2::$13=$11/$12;f2 50 cores | | ocb total | jb | ±total | ocb user | jb | ±user | ocb cpu | jb | ±cpu | ocb sys | jb | ±sys | |---------------------+-----------+------+--------+----------+------+-------+---------+----+------+---------+------+------| | byte from scratch | 9114 | 2061 | 4.42 | 9334 | 5133 | 1.82 | | | 0/0 | 2566 | 1726 | 1.49 | | native from scratch | 13481 | 3967 | 3.40 | 12291 | 7608 | 1.62 | | | 0/0 | 3003 | 2100 | 1.43 | | byte after native | 3467 | 1476 | 2.35 | 5067 | 3912 | 1.30 | | | 0/0 | 971 | 801 | 1.21 | #+TBLFM: $4=$2/$3;f2::$7=$5/$6;f2::$10=$9/$8;f2::$13=$11/$12;f2 ``` Menu: 1. Write a jbuild file, autogenerated from jbuild.in because we need to fill in some information at build-time (really, at configure time, but TODO), such as whether or not clang is enabled. 2. Nuke lots of stuff from infer/src/Makefile that is now in the jbuild file 3. The jbuild file lives in infer/src/ so it can see all the sources. If we put it somewhere else, eg, infer/, then `jbuilder` scans too many files (all irrelevant) and takes 2.5s to start instead of .8s. Adding irrelevant directories to jbuild-ignore does not help. 4. jbuilder does not support subdirectories, so resort to listing all the source files in the generated jbuild (only source directories need to be manually listed in jbuild.in though). Still, the generated .merlin is wrong and makes merlin find source files in _build, so manually tune it to get good merlin support. We also lose some of merlin for unit tests as it cannot see their build artefacts anymore. 5. checkCopyright gets its own jbuild because it's standalone. Also, remove some deprecation warnings in checkCopyright due to the new version of Core from a while ago. 6. Drop less-used Makefile features (they had regressed anyway) such as building individual modules. Also, building mod_dep.pdf now takes all the source files available so they better build (before, it would only take the source files from the config, eg with or without clang) (that's pretty minor). 7. The toplevel is now built as a custom toplevel because that was easier. It should soon be even easier: https://github.com/janestreet/jbuilder/issues/210 8. Move BUILTINS.mli to BUILTINS.ml because jbuilder is not happy about interface files without implementations. In particular, I did not try to migrate too much of the Makefile logic to jbuilder, more can be done in the future. Reviewed By: jberdine Differential Revision: D5573661 fbshipit-source-id: 4ca6d8f
7 years ago
byte src_build_common src_build test_build: fb-setup
endif
ifeq ($(BUILD_C_ANALYZERS),yes)
byte src_build src_build_common test_build: clang_plugin
endif
$(INFER_COMMAND_MANUALS): src_build $(MAKEFILE_LIST)
$(QUIET)$(MKDIR_P) $(@D)
$(QUIET)$(INFER_BIN) $(patsubst infer-%.1,%,$(@F)) --help --help-format=groff > $@
$(INFER_MANUAL): src_build $(MAKEFILE_LIST)
$(QUIET)$(MKDIR_P) $(@D)
$(QUIET)$(INFER_BIN) --help --help-format=groff > $@
$(INFER_MANUALS_GZIPPED): %.gz: %
$(QUIET)$(REMOVE) $@
gzip $<
infer_models: src_build
ifeq ($(BUILD_JAVA_ANALYZERS),yes)
$(MAKE) -C $(ANNOTATIONS_DIR)
endif
$(MAKE) -C $(MODELS_DIR) all
.PHONY: infer byte_infer
infer byte_infer:
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(QUIET)$(call silent_on_success,Building Infer models,\
$(MAKE) infer_models $(INFER_MANUALS))
infer: src_build
byte_infer: byte
.PHONY: opt
opt:
$(QUIET)$(MAKE) BUILD_MODE=opt infer
.PHONY: clang_setup
clang_setup:
$(QUIET)export CC="$(CC)" CFLAGS="$(CFLAGS)"; \
export CXX="$(CXX)" CXXFLAGS="$(CXXFLAGS)"; \
export CPP="$(CPP)" LDFLAGS="$(LDFLAGS)" LIBS="$(LIBS)"; \
$(FCP_DIR)/clang/setup.sh --only-check-install || \
$(FCP_DIR)/clang/setup.sh
.PHONY: clang_plugin
clang_plugin: clang_setup
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(QUIET)$(call silent_on_success,Building clang plugin,\
$(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) \
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
CLANG_INCLUDES=$(CLANG_INCLUDES))
$(QUIET)$(call silent_on_success,Building clang plugin OCaml interface,\
$(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)" \
CPP="$(CPP)" LDFLAGS="$(LDFLAGS)" LIBS="$(LIBS)" \
LOCAL_CLANG=$(CLANG_PREFIX)/bin/clang \
CLANG_PREFIX=$(CLANG_PREFIX) \
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
CLANG_INCLUDES=$(CLANG_INCLUDES))
.PHONY: clang_plugin_test
clang_plugin_test: clang_setup
$(QUIET)$(call silent_on_success,Running clang plugin tests,\
$(MAKE) -C $(FCP_DIR)/libtooling test \
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))
.PHONY: ocaml_unit_test
ocaml_unit_test: test_build
$(QUIET)$(REMOVE_DIR) infer-out-unit-tests
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(QUIET)$(call silent_on_success,Running OCaml unit tests,\
INFER_ARGS=--results-dir^infer-out-unit-tests $(BUILD_DIR)/test/inferunit.bc)
define silence_make
$(1) 2> >(grep -v 'warning: \(ignoring old\|overriding\) \(commands\|recipe\) for target')
endef
.PHONY: $(DIRECT_TESTS:%=direct_%_test)
$(DIRECT_TESTS:%=direct_%_test): infer
$(QUIET)$(call silent_on_success,Running test: $(subst _, ,$@),\
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(call silence_make,\
$(MAKE) -C \
$(INFER_DIR)/tests/codetoanalyze/$(shell printf $@ | cut -f 2 -d _)/$(shell printf $@ | cut -f 3 -d _) \
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
test))
.PHONY: $(DIRECT_TESTS:%=direct_%_print)
$(DIRECT_TESTS:%=direct_%_print): infer
$(QUIET)$(call silent_on_success,Running: $(subst _, ,$@),\
$(call silence_make,\
$(MAKE) -C \
$(INFER_DIR)/tests/codetoanalyze/$(shell printf $@ | cut -f 2 -d _)/$(shell printf $@ | cut -f 3 -d _) \
print))
.PHONY: $(DIRECT_TESTS:%=direct_%_clean)
$(DIRECT_TESTS:%=direct_%_clean):
$(QUIET)$(call silent_on_success,Cleaning: $(subst _, ,$@),\
$(call silence_make,\
$(MAKE) -C \
$(INFER_DIR)/tests/codetoanalyze/$(shell printf $@ | cut -f 2 -d _)/$(shell printf $@ | cut -f 3 -d _) \
clean))
.PHONY: $(DIRECT_TESTS:%=direct_%_replace)
$(DIRECT_TESTS:%=direct_%_replace): infer
$(QUIET)$(call silent_on_success,Recording: $(subst _, ,$@),\
$(call silence_make,\
$(MAKE) -C \
$(INFER_DIR)/tests/codetoanalyze/$(shell printf $@ | cut -f 2 -d _)/$(shell printf $@ | cut -f 3 -d _) \
replace))
.PHONY: direct_tests
direct_tests: $(DIRECT_TESTS:%=direct_%_test)
.PHONY: $(BUILD_SYSTEMS_TESTS:%=build_%_test)
$(BUILD_SYSTEMS_TESTS:%=build_%_test): infer
$(QUIET)$(call silent_on_success,Running test: $(subst _, ,$@),\
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(call silence_make,\
$(MAKE) -C $(INFER_DIR)/tests/build_systems/$(patsubst build_%_test,%,$@) test))
.PHONY: $(BUILD_SYSTEMS_TESTS:%=build_%_print)
$(BUILD_SYSTEMS_TESTS:%=build_%_print): infer
$(QUIET)$(call silent_on_success,Running: $(subst _, ,$@),\
$(call silence_make,\
$(MAKE) -C $(INFER_DIR)/tests/build_systems/$(patsubst build_%_print,%,$@) print))
.PHONY: $(BUILD_SYSTEMS_TESTS:%=build_%_clean)
$(BUILD_SYSTEMS_TESTS:%=build_%_clean):
$(QUIET)$(call silent_on_success,Cleaning: $(subst _, ,$@),\
$(call silence_make,\
$(MAKE) -C $(INFER_DIR)/tests/build_systems/$(patsubst build_%_clean,%,$@) clean))
.PHONY: $(BUILD_SYSTEMS_TESTS:%=build_%_replace)
$(BUILD_SYSTEMS_TESTS:%=build_%_replace): infer
$(QUIET)$(call silent_on_success,Recording: $(subst _, ,$@),\
$(call silence_make,\
$(MAKE) -C $(INFER_DIR)/tests/build_systems/$(patsubst build_%_replace,%,$@) replace))
build_infertop_print build_infertop_test build_infertop_replace: toplevel_test
.PHONY: build_systems_tests
build_systems_tests: $(BUILD_SYSTEMS_TESTS:%=build_%_test)
.PHONY: endtoend_test
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
endtoend_test: $(BUILD_SYSTEMS_TESTS:%=build_%_test) $(DIRECT_TESTS:%=direct_%_test)
.PHONY: check_missing_mli
check_missing_mli:
$(QUIET)for x in $$(find $(INFER_DIR)/src -name "*.ml"); do \
test -f "$$x"i || echo Missing "$$x"i; done
.PHONY: checkCopyright
checkCopyright: src_build_common
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(QUIET)$(call silent_on_success,Building checkCopyright,\
$(MAKE) -C $(SRC_DIR) checkCopyright)
.PHONY: validate-skel
validate-skel:
ifeq ($(IS_FACEBOOK_TREE),yes)
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(QUIET)$(call silent_on_success,Validating facebook/,\
$(MAKE) -C facebook validate)
endif
.PHONY: crash_if_not_all_analyzers_enabled
crash_if_not_all_analyzers_enabled:
ifneq ($(BUILD_C_ANALYZERS)+$(BUILD_JAVA_ANALYZERS),yes+yes)
ifneq ($(BUILD_C_ANALYZERS),yes)
@echo '*** ERROR: Cannot run the full tests: the Clang analyzers are disabled.'
@echo '*** ERROR: You can run clang-only tests with:'
@echo '*** ERROR:'
@echo '*** ERROR: make config_tests'
@echo '*** ERROR:'
endif
ifneq ($(BUILD_JAVA_ANALYZERS),yes)
@echo '*** ERROR: Cannot run the full tests: the Java analyzers are disabled.'
@echo '*** ERROR: You can run Java-only tests with:'
@echo '*** ERROR:'
@echo '*** ERROR: make config_tests'
@echo '*** ERROR:'
endif
@echo '*** ERROR: To run the full set of tests, please enable all the analyzers.'
@exit 1
else
@:
endif
.PHONY: mod_dep
mod_dep: src_build_common
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(QUIET)$(call silent_on_success,Building Infer source dependency graph,\
$(MAKE) -C $(SRC_DIR) mod_dep.dot)
.PHONY: config_tests
config_tests: test_build ocaml_unit_test endtoend_test checkCopyright validate-skel mod_dep
ifneq ($(filter config_tests test,${MAKECMDGOALS}),)
test_build: src_build
checkCopyright: src_build test_build
endif
.PHONY: test
test: crash_if_not_all_analyzers_enabled config_tests
ifeq (,$(findstring s,$(MAKEFLAGS)))
[tests] awesomize make output Summary: Hide the output of all the toplevel `make` actions and print messages instead, as if we had a better build system than Makefiles. When a command fails, print its stdout and stderr and prefix it with bold red letters. Also display timing information. ``` $ make -j 4 test [17:39:18][27290] Facebook setup... [17:39:18][27363] Building checkCopyright... [17:39:18][27443] Validating facebook/... [ 0s][27363] SUCCESS Building checkCopyright [ 0s][27290] SUCCESS Facebook setup [17:39:18][27863] Building clang plugin... [ 0s][27443] SUCCESS Validating facebook/ [ 0s][27863] SUCCESS Building clang plugin [17:39:18][27898] Building clang plugin OCaml interface... [ 0s][27898] SUCCESS Building clang plugin OCaml interface [17:39:18][27974] Testing Infer builds without warnings... [17:39:18][28033] Building native Infer... [ 12s][27974] SUCCESS Testing Infer builds without warnings [17:39:30][28998] Testing Infer toplevel builds... [ 6s][28998] SUCCESS Testing Infer toplevel builds [17:39:36][31417] Running OCaml unit tests... [17:39:36][31456] Testing infer OCaml REPL... [ 6s][31417] SUCCESS Running OCaml unit tests [ 9s][31456] SUCCESS Testing infer OCaml REPL [ 92s][28033] SUCCESS Building native Infer [17:40:50][ 2170] Building Java annotations... [ 0s][ 2170] SUCCESS Building Java annotations [17:40:50][ 2186] Building Infer models... [ 11s][ 2186] SUCCESS Building Infer models [17:41:01][ 2803] Running build assembly test... [17:41:01][ 2861] Running build ck analytics test... [17:41:01][ 2941] Running build ck imports test... [17:41:01][ 3035] Running build clang compilation db escaped test... [ 1s][ 3035] SUCCESS Running build clang compilation db escaped test [17:41:02][ 3139] Running build clang compilation db relpath test... [ 3s][ 2861] SUCCESS Running build ck analytics test [17:41:04][ 3296] Running build clang multiple files test... [*ERROR**][2803] *** ERROR Running build assembly test [*ERROR**][2803] *** command: ( make INTERACTIVE=1 -C /home/jul/infer/infer/tests/build_systems/assembly test 2> >(grep -v warning: (ignoring old|overriding) (commands|recipe) for target) ; exit 0) [*ERROR**][2803] *** CWD: /home/jul/infer [*ERROR**][2803] *** stdout: [*ERROR**][2803] make[1]: Entering directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] *** inner Testing infer/clang in build_systems/assembly [*ERROR**][2803] *** inner command: /home/jul/infer/infer/bin/infer --results-dir infer-out --dump-duplicate-symbols --report-custom-error --developer-mode --project-root ../codetoanalyze --no-failures-allowed -a infer -- clang -c ../codetoanalyze/example.S ../codetoanalyze/hello.c [*ERROR**][2803] *** inner CWD: /home/jul/infer/infer/tests/build_systems/assembly [*ERROR**][2803] Capturing in make/cc mode... [*ERROR**][2803] Starting analysis... [*ERROR**][2803] [*ERROR**][2803] legend: [*ERROR**][2803] "F" analyzing a file [*ERROR**][2803] "." analyzing a procedure [*ERROR**][2803] [*ERROR**][2803] Found 1 (out of 1) source files to be analyzed in /home/jul/infer/infer/tests/build_systems/assembly/infer-out [*ERROR**][2803] [*ERROR**][2803] [*ERROR**][2803] No issues found [*ERROR**][2803] [*ERROR**][2803] ../../infer.make:30: recipe for target 'test' failed [*ERROR**][2803] make[1]: Leaving directory '/home/jul/infer/infer/tests/build_systems/assembly' [*ERROR**][2803] F.--- build_systems/assembly/issues.exp 2017-03-22 16:25:44.583854270 +0000 [*ERROR**][2803] +++ build_systems/assembly/issues.exp.test 2017-03-28 17:41:04.743678254 +0100 [*ERROR**][2803] @@ -1 +0,0 @@ [*ERROR**][2803] -hello.c, test, 2, NULL_DEREFERENCE, [start of procedure test()] [*ERROR**][2803] [*ERROR**][2803] Test output (build_systems/assembly/issues.exp.test) differs from expected test output build_systems/assembly/issues.exp [*ERROR**][2803] Run the following command to replace the expected test output with the new output: [*ERROR**][2803] [*ERROR**][2803] make -C build_systems/assembly replace [*ERROR**][2803] [*ERROR**][2803] make[1]: *** [test] Error 1 [*ERROR**][2803] *** stderr: Makefile:230: recipe for target 'build_assembly_test' failed make: *** [build_assembly_test] Error 1 make: *** Waiting for unfinished jobs.... [...] ``` Reviewed By: jberdine Differential Revision: D4781857 fbshipit-source-id: cbce26d
8 years ago
$(QUIET)echo "$(TERM_INFO)ALL TESTS PASSED$(TERM_RESET)"
endif
.PHONY: quick-test
quick-test: test_build ocaml_unit_test
.PHONY: test-replace
test-replace: $(BUILD_SYSTEMS_TESTS:%=build_%_replace) $(DIRECT_TESTS:%=direct_%_replace)
.PHONY: uninstall
uninstall:
$(REMOVE_DIR) $(DESTDIR)$(libdir)/infer/
$(REMOVE) $(DESTDIR)$(bindir)/infer
$(REMOVE) $(INFER_COMMANDS:%=$(DESTDIR)$(bindir)/%)
$(REMOVE) $(foreach manual,$(INFER_MANUALS_GZIPPED),\
$(DESTDIR)$(mandir)/man1/$(notdir $(manual)))
ifeq ($(IS_FACEBOOK_TREE),yes)
$(MAKE) -C facebook uninstall
endif
.PHONY: test_clean
test_clean: $(DIRECT_TESTS:%=direct_%_clean) $(BUILD_SYSTEMS_TESTS:%=build_%_clean)
.PHONY: install
install: infer $(INFER_MANUALS_GZIPPED)
# create directory structure
test -d '$(DESTDIR)$(bindir)' || \
$(MKDIR_P) '$(DESTDIR)$(bindir)'
test -d '$(DESTDIR)$(mandir)/man1' || \
$(MKDIR_P) '$(DESTDIR)$(mandir)/man1'
test -d '$(DESTDIR)$(libdir)/infer/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/'
ifeq ($(BUILD_C_ANALYZERS),yes)
test -d '$(DESTDIR)$(libdir)/infer/facebook-clang-plugins/libtooling/build/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/facebook-clang-plugins/libtooling/build/'
find facebook-clang-plugins/clang/install/. -type d -print0 | xargs -0 -n 1 \
$(SHELL) -x -c "test -d '$(DESTDIR)$(libdir)'/infer/\$$1 || \
$(MKDIR_P) '$(DESTDIR)$(libdir)'/infer/\$$1" --
test -d '$(DESTDIR)$(libdir)/infer/infer/lib/clang_wrappers/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/lib/clang_wrappers/'
find infer/models/cpp/include -type d -print0 | xargs -0 -n 1 \
$(SHELL) -x -c "test -d '$(DESTDIR)$(libdir)'/infer/\$$1 || \
$(MKDIR_P) '$(DESTDIR)$(libdir)'/infer/\$$1" --
test -d '$(DESTDIR)$(libdir)/infer/infer/lib/linter_rules/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/lib/linter_rules/'
test -d '$(DESTDIR)$(libdir)/infer/infer/etc/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/etc'
endif
ifeq ($(BUILD_JAVA_ANALYZERS),yes)
test -d '$(DESTDIR)$(libdir)/infer/infer/lib/java/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/lib/java/'
endif
test -d '$(DESTDIR)$(libdir)/infer/infer/annotations/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/annotations/'
test -d '$(DESTDIR)$(libdir)/infer/infer/lib/wrappers/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/lib/wrappers/'
test -d '$(DESTDIR)$(libdir)/infer/infer/lib/specs/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/lib/specs/'
test -d '$(DESTDIR)$(libdir)/infer/infer/lib/python/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/lib/python/'
test -d '$(DESTDIR)$(libdir)/infer/infer/lib/python/inferlib/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/lib/python/inferlib/'
test -d '$(DESTDIR)$(libdir)/infer/infer/lib/python/inferlib/capture/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/lib/python/inferlib/capture/'
test -d '$(DESTDIR)$(libdir)/infer/infer/bin/' || \
$(MKDIR_P) '$(DESTDIR)$(libdir)/infer/infer/bin/'
# copy files
ifeq ($(BUILD_C_ANALYZERS),yes)
$(INSTALL_DATA) -C 'facebook-clang-plugins/libtooling/build/FacebookClangPlugin.dylib' \
'$(DESTDIR)$(libdir)/infer/facebook-clang-plugins/libtooling/build/FacebookClangPlugin.dylib'
# do not use "install" for symbolic links as this will copy the destination file instead
find facebook-clang-plugins/clang/install/. -not -type d -not -type l -not -name '*.a' -print0 \
| xargs -0 -I \{\} $(INSTALL_PROGRAM) -C \{\} '$(DESTDIR)$(libdir)'/infer/\{\}
# all the symlinks in clang are relative and safe to brutally copy over
find facebook-clang-plugins/clang/install/. -type l -not -name '*.a' -print0 \
| xargs -0 -I \{\} $(COPY) -a \{\} '$(DESTDIR)$(libdir)'/infer/\{\}
find infer/lib/clang_wrappers/* -print0 | xargs -0 -I \{\} \
$(INSTALL_PROGRAM) -C \{\} '$(DESTDIR)$(libdir)'/infer/\{\}
# only for files that point to infer
(cd '$(DESTDIR)$(libdir)/infer/infer/lib/wrappers/' && \
$(foreach cc,$(shell find '$(LIB_DIR)/wrappers' -type l), \
[ $(cc) -ef '$(INFER_BIN)' ] && \
$(REMOVE) '$(notdir $(cc))' && \
$(LN_S) ../../bin/infer '$(notdir $(cc))';))
find infer/lib/specs/* -print0 | xargs -0 -I \{\} \
$(INSTALL_DATA) -C \{\} '$(DESTDIR)$(libdir)'/infer/\{\}
find infer/models/cpp/include -not -type d -print0 | xargs -0 -I \{\} \
$(INSTALL_DATA) -C \{\} '$(DESTDIR)$(libdir)'/infer/\{\}
$(INSTALL_DATA) -C 'infer/lib/linter_rules/linters.al' \
'$(DESTDIR)$(libdir)/infer/infer/lib/linter_rules/linters.al'
$(INSTALL_DATA) -C 'infer/etc/clang_ast.dict' \
'$(DESTDIR)$(libdir)/infer/infer/etc/clang_ast.dict'
endif
ifeq ($(BUILD_JAVA_ANALYZERS),yes)
$(INSTALL_DATA) -C 'infer/annotations/annotations.jar' \
'$(DESTDIR)$(libdir)/infer/infer/annotations/annotations.jar'
find infer/lib/java/*.jar -print0 | xargs -0 -I \{\} \
$(INSTALL_DATA) -C \{\} '$(DESTDIR)$(libdir)'/infer/\{\}
$(INSTALL_PROGRAM) -C '$(LIB_DIR)'/wrappers/javac \
'$(DESTDIR)$(libdir)'/infer/infer/lib/wrappers/
endif
find infer/lib/python/inferlib/* -type f -print0 | xargs -0 -I \{\} \
$(INSTALL_DATA) -C \{\} '$(DESTDIR)$(libdir)'/infer/\{\}
$(INSTALL_PROGRAM) -C infer/lib/python/infer.py \
'$(DESTDIR)$(libdir)'/infer/infer/lib/python/infer.py
$(INSTALL_PROGRAM) -C infer/lib/python/inferTraceBugs \
'$(DESTDIR)$(libdir)'/infer/infer/lib/python/inferTraceBugs
$(INSTALL_PROGRAM) -C infer/lib/python/report.py \
'$(DESTDIR)$(libdir)'/infer/infer/lib/python/report.py
$(INSTALL_PROGRAM) -C '$(INFER_BIN)' '$(DESTDIR)$(libdir)'/infer/infer/bin/
(cd '$(DESTDIR)$(bindir)/' && \
$(REMOVE) infer && \
$(LN_S) '$(libdir_relative_to_bindir)'/infer/infer/bin/infer infer)
for alias in $(INFER_COMMANDS); do \
(cd '$(DESTDIR)$(bindir)'/ && \
$(REMOVE) "$$alias" && \
$(LN_S) infer "$$alias"); done
for alias in $(INFER_COMMANDS); do \
(cd '$(DESTDIR)$(libdir)'/infer/infer/bin && \
$(REMOVE) "$$alias" && \
$(LN_S) infer "$$alias"); done
$(foreach man,$(INFER_MANUALS_GZIPPED), \
$(INSTALL_DATA) -C $(man) '$(DESTDIR)$(mandir)/man1/$(notdir $(man))';)
ifeq ($(IS_FACEBOOK_TREE),yes)
ifdef DESTDIR
ifeq (,$(findstring :/,:$(DESTDIR)))
# DESTDIR is set and relative
$(MAKE) -C facebook install 'DESTDIR=../$(DESTDIR)'
else
# DESTDIR is set and absolute
$(MAKE) -C facebook install
endif
else
# DESTDIR not set
$(MAKE) -C facebook install
endif
endif
# Nuke objects built from OCaml. Useful when changing the OCaml compiler, for instance.
.PHONY: ocaml_clean
ocaml_clean:
ifeq ($(BUILD_C_ANALYZERS),yes)
$(QUIET)$(call silent_on_success,Cleaning facebook-clang-plugins OCaml build,\
$(MAKE) -C $(FCP_DIR)/clang-ocaml clean)
endif
$(QUIET)$(call silent_on_success,Cleaning infer OCaml build,\
$(MAKE) -C $(SRC_DIR) clean)
$(QUIET)$(call silent_on_success,Cleaning ocamldot,\
$(MAKE) -C $(DEPENDENCIES_DIR)/ocamldot clean)
.PHONY: clean
clean: test_clean ocaml_clean
ifeq ($(BUILD_C_ANALYZERS),yes)
$(QUIET)$(call silent_on_success,Cleaning facebook-clang-plugins C++ build,\
$(MAKE) -C $(FCP_DIR) clean)
endif
$(QUIET)$(call silent_on_success,Cleaning Java annotations,\
$(MAKE) -C $(ANNOTATIONS_DIR) clean)
$(QUIET)$(call silent_on_success,Cleaning infer models,\
$(MAKE) -C $(MODELS_DIR) clean)
ifeq ($(IS_FACEBOOK_TREE),yes)
$(QUIET)$(call silent_on_success,Cleaning facebook/,\
$(MAKE) -C facebook clean)
endif
$(QUIET)$(call silent_on_success,Removing *.o and *.o.sh,\
find $(INFER_DIR)/tests \( -name '*.o' -o -name '*.o.sh' \) -delete)
$(QUIET)$(call silent_on_success,Removing build logs,\
$(REMOVE_DIR) _build_logs $(MAN_DIR))
.PHONY: conf-clean
conf-clean: clean
$(REMOVE) $(PYTHON_DIR)/inferlib/*.pyc
$(REMOVE) $(PYTHON_DIR)/inferlib/*/*.pyc
$(REMOVE) .buckversion
$(REMOVE) Makefile.config
$(REMOVE) acinclude.m4
$(REMOVE) aclocal.m4
$(REMOVE_DIR) autom4te.cache/
$(REMOVE) config.log
$(REMOVE) config.status
$(REMOVE) configure
$(REMOVE_DIR) $(MODELS_DIR)/c/out/
$(REMOVE_DIR) $(MODELS_DIR)/cpp/out/
$(REMOVE_DIR) $(MODELS_DIR)/java/infer-out/
$(REMOVE_DIR) $(MODELS_DIR)/objc/out/
# opam package to hold infer dependencies
INFER_PKG_OPAMLOCK=infer-lock-deps
# phony because it depends on opam's internal state
.PHONY: opam.lock
opam.lock: opam
$(QUIET)if test x"$$(git status --porcelain -- opam)" != "x"; then \
echo "ERROR: Changes to 'opam' detected." 1>&2; \
echo "ERROR: Please commit or revert your changes before updating opam.lock." 1>&2; \
echo "ERROR: This is because opam.lock is generated from the HEAD commit." 1>&2; \
exit 1; \
fi
$(QUIET)$(call silent_on_success,opam update,$(OPAM) update)
$(QUIET)$(call silent_on_success,installing dependencies $(INFER_PKG_OPAMLOCK) opam package,\
OPAMSWITCH=$(OPAMSWITCH); \
$(OPAM) pin add --yes --no-action -k git $(INFER_PKG_OPAMLOCK) .#HEAD; \
$(OPAM) install --deps-only --yes $(INFER_PKG_OPAMLOCK))
$(QUIET)$(call silent_on_success,generating opam.lock,\
$(OPAM) lock --pkg $(INFER_PKG_OPAMLOCK) > opam.lock)
[make] s/ocamlbuild/jbuilder/g Summary: Use jbuilder to build infer instead of ocamlbuild. This is mainly to get faster builds: ``` times in 10ms, ±differences measured in speedups, 4 cores | | ocb total | jb | ±total | ocb user | jb | ±user | ocb cpu | jb | ±cpu | ocb sys | jb | ±sys | |-----------------------------------+-----------+------+--------+----------+------+-------+---------+-----+------+---------+------+------| | byte from scratch | 6428 | 2456 | 2.62 | 7743 | 6662 | 1.16 | 138 | 331 | 2.40 | 1184 | 1477 | 0.80 | | native from scratch | 9841 | 4289 | 2.29 | 9530 | 8834 | 1.08 | 110 | 245 | 2.23 | 1373 | 1712 | 0.80 | | byte after native | 29578 | 1602 | 18.46 | 4514 | 4640 | 0.97 | 170 | 325 | 1.91 | 543 | 576 | 0.94 | | change infer.ml byte | 344 | 282 | 1.22 | 292 | 215 | 1.36 | 96 | 99 | 1.03 | 040 | 066 | 0.61 | | change infer.ml native | 837 | 223 | 3.75 | 789 | 174 | 4.53 | 98 | 99 | 1.01 | 036 | 47 | 0.77 | | change Config.ml byte | 451 | 339 | 1.33 | 382 | 336 | 1.14 | 97 | 122 | 1.26 | 056 | 80 | 0.70 | | change Config.ml native | 4024 | 1760 | 2.29 | 4585 | 4225 | 1.09 | 127 | 276 | 2.17 | 559 | 644 | 0.87 | | change cFrontend_config.ml byte | 348 | 643 | 0.54 | 297 | 330 | 0.90 | 96 | 67 | 0.70 | 038 | 102 | 0.37 | | change cFrontend_config.ml native | 1480 | 584 | 2.53 | 1435 | 906 | 1.58 | 106 | 185 | 1.75 | 136 | 178 | 0.76 | #+TBLFM: $4=$2/$3;f2::$7=$5/$6;f2::$10=$9/$8;f2::$13=$11/$12;f2 50 cores | | ocb total | jb | ±total | ocb user | jb | ±user | ocb cpu | jb | ±cpu | ocb sys | jb | ±sys | |---------------------+-----------+------+--------+----------+------+-------+---------+----+------+---------+------+------| | byte from scratch | 9114 | 2061 | 4.42 | 9334 | 5133 | 1.82 | | | 0/0 | 2566 | 1726 | 1.49 | | native from scratch | 13481 | 3967 | 3.40 | 12291 | 7608 | 1.62 | | | 0/0 | 3003 | 2100 | 1.43 | | byte after native | 3467 | 1476 | 2.35 | 5067 | 3912 | 1.30 | | | 0/0 | 971 | 801 | 1.21 | #+TBLFM: $4=$2/$3;f2::$7=$5/$6;f2::$10=$9/$8;f2::$13=$11/$12;f2 ``` Menu: 1. Write a jbuild file, autogenerated from jbuild.in because we need to fill in some information at build-time (really, at configure time, but TODO), such as whether or not clang is enabled. 2. Nuke lots of stuff from infer/src/Makefile that is now in the jbuild file 3. The jbuild file lives in infer/src/ so it can see all the sources. If we put it somewhere else, eg, infer/, then `jbuilder` scans too many files (all irrelevant) and takes 2.5s to start instead of .8s. Adding irrelevant directories to jbuild-ignore does not help. 4. jbuilder does not support subdirectories, so resort to listing all the source files in the generated jbuild (only source directories need to be manually listed in jbuild.in though). Still, the generated .merlin is wrong and makes merlin find source files in _build, so manually tune it to get good merlin support. We also lose some of merlin for unit tests as it cannot see their build artefacts anymore. 5. checkCopyright gets its own jbuild because it's standalone. Also, remove some deprecation warnings in checkCopyright due to the new version of Core from a while ago. 6. Drop less-used Makefile features (they had regressed anyway) such as building individual modules. Also, building mod_dep.pdf now takes all the source files available so they better build (before, it would only take the source files from the config, eg with or without clang) (that's pretty minor). 7. The toplevel is now built as a custom toplevel because that was easier. It should soon be even easier: https://github.com/janestreet/jbuilder/issues/210 8. Move BUILTINS.mli to BUILTINS.ml because jbuilder is not happy about interface files without implementations. In particular, I did not try to migrate too much of the Makefile logic to jbuilder, more can be done in the future. Reviewed By: jberdine Differential Revision: D5573661 fbshipit-source-id: 4ca6d8f
7 years ago
# This is a magical version number that doesn't reinstall the world when added on top of what we
# have in opam.lock. To upgrade this version number, manually try to install several utop versions
# until you find one that doesn't recompile the world. TODO(t20828442): get rid of magic
OPAM_DEV_DEPS = ocamlformat.$$(grep version .ocamlformat | cut -d ' ' -f 2) ocp-indent merlin utop.2.2.0 webbrowser
ifneq ($(EMACS),no)
OPAM_DEV_DEPS += tuareg
endif
.PHONY: devsetup
devsetup: Makefile.autoconf
$(QUIET)[ $(OPAM) != "no" ] || (echo 'No `opam` found, aborting setup.' >&2; exit 1)
$(QUIET)$(call silent_on_success,installing $(OPAM_DEV_DEPS),\
OPAMSWITCH=$(OPAMSWITCH); $(OPAM) install --yes --no-checksum user-setup $(OPAM_DEV_DEPS))
$(QUIET)echo '$(TERM_INFO)*** Running `opam config setup -a`$(TERM_RESET)' >&2
$(QUIET)OPAMSWITCH=$(OPAMSWITCH); $(OPAM) config --yes setup -a
$(QUIET)echo '$(TERM_INFO)*** Running `opam user-setup`$(TERM_RESET)' >&2
$(QUIET)OPAMSWITCH=$(OPAMSWITCH); OPAMYES=1; $(OPAM) user-setup install
$(QUIET)if [ "$(PLATFORM)" = "Darwin" ] && [ x"$(GNU_SED)" = x"no" ]; then \
echo '$(TERM_INFO)*** Installing GNU sed$(TERM_RESET)' >&2; \
brew install gnu-sed; \
fi
$(QUIET)if [ "$(PLATFORM)" = "Darwin" ] && ! $$(parallel -h | grep -q GNU); then \
echo '$(TERM_INFO)*** Installing GNU parallel$(TERM_RESET)' >&2; \
brew install parallel; \
fi
$(QUIET)if [ ! -d "$$HOME"/.parallel ]; then mkdir "$$HOME"/.parallel; fi
$(QUIET)touch "$$HOME"/.parallel/will-cite
# expand all occurrences of "~" in PATH and MANPATH
$(QUIET)infer_repo_is_in_path=$$(echo $${PATH//\~/$$HOME} | grep -q "$(ABSOLUTE_ROOT_DIR)"/infer/bin; echo $$?); \
infer_repo_is_in_manpath=$$(echo $${MANPATH//\~/$$HOME} | grep -q "$(ABSOLUTE_ROOT_DIR)"/infer/man; echo $$?); \
shell_config_file="<could not auto-detect, please fill in yourself>"; \
if [ $$(basename "$(ORIG_SHELL)") = "bash" ]; then \
if [ "$(PLATFORM)" = "Linux" ]; then \
shell_config_file="$$HOME"/.bashrc; \
else \
shell_config_file="$$HOME"/.bash_profile; \
fi; \
elif [ $$(basename "$(ORIG_SHELL)") = "zsh" ]; then \
shell_config_file="$$HOME"/.zshrc; \
fi; \
if [ "$$infer_repo_is_in_path" != "0" ] || [ "$$infer_repo_is_in_manpath" != "0" ]; then \
echo >&2; \
echo '$(TERM_INFO)*** NOTE: `infer` is not in your PATH or MANPATH. If you are hacking on infer, you may$(TERM_RESET)' >&2; \
echo '$(TERM_INFO)*** NOTE: want to make infer executables and manuals available in your terminal. Type$(TERM_RESET)' >&2; \
echo '$(TERM_INFO)*** NOTE: the following commands to configure the current terminal and record the$(TERM_RESET)' >&2; \
printf '$(TERM_INFO)*** NOTE: changes in your shell configuration file (%s):$(TERM_RESET)\n' "$$shell_config_file">&2; \
echo >&2; \
if [ "$$infer_repo_is_in_path" != "0" ]; then \
printf '$(TERM_INFO) export PATH="%s/infer/bin":$$PATH$(TERM_RESET)\n' "$(ABSOLUTE_ROOT_DIR)" >&2; \
fi; \
if [ "$$infer_repo_is_in_manpath" != "0" ]; then \
printf '$(TERM_INFO) export MANPATH="%s/infer/man":$$MANPATH$(TERM_RESET)\n' "$(ABSOLUTE_ROOT_DIR)" >&2; \
fi; \
if [ "$$infer_repo_is_in_path" != "0" ]; then \
printf "$(TERM_INFO) echo 'export PATH=\"%s/infer/bin\":\$$PATH' >> \"$$shell_config_file\"$(TERM_RESET)\n" "$(ABSOLUTE_ROOT_DIR)" >&2; \
fi; \
if [ "$$infer_repo_is_in_manpath" != "0" ]; then \
printf "$(TERM_INFO) echo 'export MANPATH=\"%s/infer/man\":\$$MANPATH' >> \"$$shell_config_file\"$(TERM_RESET)\n" "$(ABSOLUTE_ROOT_DIR)" >&2; \
fi; \
[build] switch to 4.05.0+flambda by default Summary: With flambda (`-O3`), compilation time is ~5x slower, but the backend is ~25% faster! To mitigate the atrocious compilation times, introduce a new `opt` build mode in the jbuilder files. - build in "opt" mode by default from the toplevel (so that install scripts and external users get the fastest infer by default), in "default" mode by default from infer/src (since the latter is only called directly by infer devs, for faster builds) - `make byte` is as fast as before in any mode - `make test` will build "opt" by default, which is very slow. Solution for testing (or building the models) locally: `make BUILD_MODE=default test`. - You can even change the default locally with `export BUILD_MODE=default`. The benchmarks are to be taken with a sizable pinch of salt because I ran them only once and other stuff could be running in the background. That said, the perf win is consistent across all projects, with 15-20% win in wallclock time and around 25% win in total CPU time, ~9% win in sys time, and ~25% fewer minor allocations, and ~5-10% fewer overall allocations. This is only for the backend; the capture is by and large unaffected (either the same or a tad faster within noise range). Here are the results running on OpenSSL 1.0.2d on osx (12 cores, 32G RAM) === base infer binary: 26193088 bytes compile time: 40s capture: ```lang=text real 1m7.513s user 3m11.437s sys 0m55.236s ``` analysis: ```lang=text real 5m41.580s user 61m37.855s sys 1m12.870s ``` Memory profile: ```lang=json { ... "minor_gb": 0.1534719169139862, "promoted_gb": 0.0038930922746658325, "major_gb": 0.4546157643198967, "allocated_gb": 0.6041945889592171, "minor_collections": 78, "major_collections": 23, "compactions": 7, "top_heap_gb": 0.07388687133789062, "stack_kb": 0.3984375, "minor_heap_kb": 8192.0, ... } ``` === flambda with stock options (no `-Oclassic`, just the same flags as base) Exactly the same as base. === flambda `-O3` infer binary: 56870376 bytes (2.17x bigger) compile time: 191s (4.78x slower) capture is the same as base: ```lang=text real 1m9.203s user 3m12.242s sys 0m58.905s ``` analysis is ~20% wallclock time faster, ~25% CPU time faster: ```lang=text real 4m32.656s user 46m43.987s sys 1m2.424s ``` memory usage is a bit lower too: ```lang=json { ... "minor_gb": 0.11583046615123749, // 75% of previous "promoted_gb": 0.00363825261592865, // 93% of previous "major_gb": 0.45415670424699783, // about same "allocated_gb": 0.5663489177823067, // 94% of previous "minor_collections": 73, "major_collections": 22, "compactions": 7, "top_heap_gb": 0.07165145874023438, "stack_kb": 0.3359375, "minor_heap_kb": 8192.0, ... } ``` === flambda `-O2` Not nearly as exciting as `-O3`, but the compilation cost is still quite high: infer: 37826856 bytes compilation of infer: 100s Capture and analysis timings are mostly the same as base. Reviewed By: jberdine Differential Revision: D4867979 fbshipit-source-id: 99230b7
7 years ago
fi; \
if [ -z "$(ORIG_SHELL_BUILD_MODE)" ]; then \
[build] switch to 4.05.0+flambda by default Summary: With flambda (`-O3`), compilation time is ~5x slower, but the backend is ~25% faster! To mitigate the atrocious compilation times, introduce a new `opt` build mode in the jbuilder files. - build in "opt" mode by default from the toplevel (so that install scripts and external users get the fastest infer by default), in "default" mode by default from infer/src (since the latter is only called directly by infer devs, for faster builds) - `make byte` is as fast as before in any mode - `make test` will build "opt" by default, which is very slow. Solution for testing (or building the models) locally: `make BUILD_MODE=default test`. - You can even change the default locally with `export BUILD_MODE=default`. The benchmarks are to be taken with a sizable pinch of salt because I ran them only once and other stuff could be running in the background. That said, the perf win is consistent across all projects, with 15-20% win in wallclock time and around 25% win in total CPU time, ~9% win in sys time, and ~25% fewer minor allocations, and ~5-10% fewer overall allocations. This is only for the backend; the capture is by and large unaffected (either the same or a tad faster within noise range). Here are the results running on OpenSSL 1.0.2d on osx (12 cores, 32G RAM) === base infer binary: 26193088 bytes compile time: 40s capture: ```lang=text real 1m7.513s user 3m11.437s sys 0m55.236s ``` analysis: ```lang=text real 5m41.580s user 61m37.855s sys 1m12.870s ``` Memory profile: ```lang=json { ... "minor_gb": 0.1534719169139862, "promoted_gb": 0.0038930922746658325, "major_gb": 0.4546157643198967, "allocated_gb": 0.6041945889592171, "minor_collections": 78, "major_collections": 23, "compactions": 7, "top_heap_gb": 0.07388687133789062, "stack_kb": 0.3984375, "minor_heap_kb": 8192.0, ... } ``` === flambda with stock options (no `-Oclassic`, just the same flags as base) Exactly the same as base. === flambda `-O3` infer binary: 56870376 bytes (2.17x bigger) compile time: 191s (4.78x slower) capture is the same as base: ```lang=text real 1m9.203s user 3m12.242s sys 0m58.905s ``` analysis is ~20% wallclock time faster, ~25% CPU time faster: ```lang=text real 4m32.656s user 46m43.987s sys 1m2.424s ``` memory usage is a bit lower too: ```lang=json { ... "minor_gb": 0.11583046615123749, // 75% of previous "promoted_gb": 0.00363825261592865, // 93% of previous "major_gb": 0.45415670424699783, // about same "allocated_gb": 0.5663489177823067, // 94% of previous "minor_collections": 73, "major_collections": 22, "compactions": 7, "top_heap_gb": 0.07165145874023438, "stack_kb": 0.3359375, "minor_heap_kb": 8192.0, ... } ``` === flambda `-O2` Not nearly as exciting as `-O3`, but the compilation cost is still quite high: infer: 37826856 bytes compilation of infer: 100s Capture and analysis timings are mostly the same as base. Reviewed By: jberdine Differential Revision: D4867979 fbshipit-source-id: 99230b7
7 years ago
echo >&2; \
echo '$(TERM_INFO)*** NOTE: Set `BUILD_MODE=default` in your shell to disable flambda by default.$(TERM_RESET)' >&2; \
echo '$(TERM_INFO)*** NOTE: Compiling with flambda is ~5 times slower than without, so unless you are$(TERM_RESET)' >&2; \
echo '$(TERM_INFO)*** NOTE: testing infer on a very large project it will not be worth it. Use the$(TERM_RESET)' >&2; \
echo '$(TERM_INFO)*** NOTE: commands below to set the default build mode. You can then use `make opt`$(TERM_RESET)' >&2; \
[build] switch to 4.05.0+flambda by default Summary: With flambda (`-O3`), compilation time is ~5x slower, but the backend is ~25% faster! To mitigate the atrocious compilation times, introduce a new `opt` build mode in the jbuilder files. - build in "opt" mode by default from the toplevel (so that install scripts and external users get the fastest infer by default), in "default" mode by default from infer/src (since the latter is only called directly by infer devs, for faster builds) - `make byte` is as fast as before in any mode - `make test` will build "opt" by default, which is very slow. Solution for testing (or building the models) locally: `make BUILD_MODE=default test`. - You can even change the default locally with `export BUILD_MODE=default`. The benchmarks are to be taken with a sizable pinch of salt because I ran them only once and other stuff could be running in the background. That said, the perf win is consistent across all projects, with 15-20% win in wallclock time and around 25% win in total CPU time, ~9% win in sys time, and ~25% fewer minor allocations, and ~5-10% fewer overall allocations. This is only for the backend; the capture is by and large unaffected (either the same or a tad faster within noise range). Here are the results running on OpenSSL 1.0.2d on osx (12 cores, 32G RAM) === base infer binary: 26193088 bytes compile time: 40s capture: ```lang=text real 1m7.513s user 3m11.437s sys 0m55.236s ``` analysis: ```lang=text real 5m41.580s user 61m37.855s sys 1m12.870s ``` Memory profile: ```lang=json { ... "minor_gb": 0.1534719169139862, "promoted_gb": 0.0038930922746658325, "major_gb": 0.4546157643198967, "allocated_gb": 0.6041945889592171, "minor_collections": 78, "major_collections": 23, "compactions": 7, "top_heap_gb": 0.07388687133789062, "stack_kb": 0.3984375, "minor_heap_kb": 8192.0, ... } ``` === flambda with stock options (no `-Oclassic`, just the same flags as base) Exactly the same as base. === flambda `-O3` infer binary: 56870376 bytes (2.17x bigger) compile time: 191s (4.78x slower) capture is the same as base: ```lang=text real 1m9.203s user 3m12.242s sys 0m58.905s ``` analysis is ~20% wallclock time faster, ~25% CPU time faster: ```lang=text real 4m32.656s user 46m43.987s sys 1m2.424s ``` memory usage is a bit lower too: ```lang=json { ... "minor_gb": 0.11583046615123749, // 75% of previous "promoted_gb": 0.00363825261592865, // 93% of previous "major_gb": 0.45415670424699783, // about same "allocated_gb": 0.5663489177823067, // 94% of previous "minor_collections": 73, "major_collections": 22, "compactions": 7, "top_heap_gb": 0.07165145874023438, "stack_kb": 0.3359375, "minor_heap_kb": 8192.0, ... } ``` === flambda `-O2` Not nearly as exciting as `-O3`, but the compilation cost is still quite high: infer: 37826856 bytes compilation of infer: 100s Capture and analysis timings are mostly the same as base. Reviewed By: jberdine Differential Revision: D4867979 fbshipit-source-id: 99230b7
7 years ago
echo '$(TERM_INFO)*** NOTE: when you really do want to enable flambda.$(TERM_RESET)' >&2; \
echo >&2; \
printf "$(TERM_INFO) export BUILD_MODE=default$(TERM_RESET)\n" >&2; \
printf "$(TERM_INFO) echo 'export BUILD_MODE=default' >> \"$$shell_config_file\"$(TERM_RESET)\n" >&2; \
fi
$(QUIET)PATH=$(ORIG_SHELL_PATH); if [ "$$(ocamlc -where 2>/dev/null)" != "$$($(OCAMLC) -where)" ]; then \
echo >&2; \
echo '$(TERM_INFO)*** NOTE: The current shell is not set up for the right opam switch.$(TERM_RESET)' >&2; \
echo '$(TERM_INFO)*** NOTE: Please run:$(TERM_RESET)' >&2; \
echo >&2; \
echo '$(TERM_INFO) eval $$(opam config env)$(TERM_RESET)' >&2; \
fi
GHPAGES ?= no
.PHONY: doc
doc: src_build_common
$(QUIET)$(call silent_on_success,Generating infer documentation,\
$(MAKE_SOURCE) doc)
# do not call the browser if we are publishing the docs
ifeq ($(filter doc-publish,${MAKECMDGOALS}),)
$(QUIET)$(call silent_on_success,Opening in browser,\
browse $(SRC_DIR)/_build/$(BUILD_MODE)/_doc/_html/index.html)
$(QUIET)echo "Tip: you can generate the doc for all the opam dependencies of infer like this:"
$(QUIET)echo
$(QUIET)echo " odig odoc # takes a while, run it only when the dependencies change"
$(QUIET)echo " odig doc"
endif
.PHONY: doc-publish
doc-publish: doc $(INFER_MANUALS)
ifeq ($(GHPAGES),no)
$(QUIET)echo "$(TERM_ERROR)Please set GHPAGES to a checkout of the gh-pages branch of the GitHub repo of infer$(TERM_RESET)" >&2
$(QUIET)exit 1
endif
# sanity check to avoid cryptic error messages and potentially annoying side-effects
$(QUIET)if ! [ -d "$(GHPAGES)"/static/man ]; then \
echo "$(TERM_ERROR)ERROR: GHPAGES doesn't seem to point to a checkout of the gh-pages branch of the GitHub repo of infer:$(TERM_RESET)" >&2; \
echo "$(TERM_ERROR)ERROR: '$(GHPAGES)/static/man' not found or not a directory.$(TERM_RESET)" >&2; \
echo "$(TERM_ERROR)ERROR: Please fix this and try again.$(TERM_RESET)" >&2; \
exit 1; \
fi
$(QUIET)$(call silent_on_success,Copying man pages,\
$(REMOVE_DIR) "$(GHPAGES)"/static/man/*; \
for man in $(INFER_MANUALS); do \
groff -Thtml "$$man" > "$(GHPAGES)"/static/man/$$(basename "$$man").html; \
done)
ifeq ($(IS_FACEBOOK_TREE),no)
$(QUIET)$(call silent_on_success,Copying OCaml modules documentation,\
version=$$($(INFER_BIN) --version | head -1 | cut -d ' ' -f 3 | cut -c 2-); \
rsync -a --delete $(SRC_DIR)/_build/$(BUILD_MODE)/_doc/_html/ "$(GHPAGES)"/static/odoc/"$$version"; \
$(REMOVE) "$(GHPAGES)"/static/odoc/latest; \
$(LN_S) "$$version" "$(GHPAGES)"/static/odoc/latest)
else
$(QUIET)echo "Not an open-source tree, skipping the API docs generation"
endif
# print list of targets
.PHONY: show-targets
show-targets:
$(QUIET)$(MAKE) -pqrR . | grep --only-matching -e '^[a-zA-Z0-9][^ ]*:' | cut -d ':' -f 1 | sort