// Copyright 2016 Google Inc. All rights reserved // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. cc_defaults { name: "ninja_defaults", cflags: [ "-Wall", "-Wextra", "-Wno-deprecated", "-Wno-missing-field-initializers", "-Wno-unused-parameter", "-fno-exceptions", "-fvisibility=hidden", "-DNINJA_PYTHON=\"python\"", "-DNINJA_HAVE_BROWSE", "-UNDEBUG", ], target: { linux_glibc: { cflags: ["-DUSE_PPOLL"], } } } genrule { name: "ninja_browse_py", cmd: "$(location src/inline.sh) kBrowsePy <$(in) >$(out)", tool_files: ["src/inline.sh"], srcs: ["src/browse.py"], out: ["build/browse_py.h"], } cc_library_host_static { name: "libninja", defaults: ["ninja_defaults"], generated_headers: ["ninja_browse_py"], srcs: [ "src/build.cc", "src/build_log.cc", "src/clean.cc", "src/clparser.cc", "src/debug_flags.cc", "src/depfile_parser.cc", "src/deps_log.cc", "src/disk_interface.cc", "src/dyndep.cc", "src/dyndep_parser.cc", "src/edit_distance.cc", "src/eval_env.cc", "src/graph.cc", "src/graphviz.cc", "src/lexer.cc", "src/line_printer.cc", "src/manifest_chunk_parser.cc", "src/manifest_parser.cc", "src/metrics.cc", "src/parser.cc", "src/proto.cc", "src/state.cc", "src/status.cc", "src/thread_pool.cc", "src/util.cc", "src/version.cc", "src/browse.cc", "src/subprocess-posix.cc", ], } cc_binary_host { name: "ninja", defaults: ["ninja_defaults"], srcs: ["src/ninja.cc"], static_libs: ["libninja"], // Use jemalloc for better multithreaded allocation performance. e.g. Using // jemalloc can improve the overall runtime by 10x vs the default allocator. target: { glibc: { shared_libs: ["libjemalloc5"], }, musl: { static_libs: ["libjemalloc5"], // LLVM toolchain builds use LD_LIBRARY_PATH when running ninja // to affect subprocesses of ninja, but that breaks ninja // when it uses an incompatible libc. Making ninja static avoids // the problem. static_executable: true, }, }, } cc_test_host { name: "ninja_test", defaults: ["ninja_defaults"], static_libs: ["libninja"], gtest: false, cpp_std: "gnu++17", srcs: [ "src/build_log_test.cc", "src/build_test.cc", "src/clean_test.cc", "src/clparser_test.cc", "src/depfile_parser_test.cc", "src/deps_log_test.cc", "src/disk_interface_test.cc", "src/dyndep_parser_test.cc", "src/edit_distance_test.cc", "src/graph_test.cc", "src/lexer_test.cc", "src/manifest_parser_test.cc", "src/ninja_test.cc", "src/state_test.cc", "src/status_test.cc", "src/subprocess_test.cc", "src/test.cc", "src/util_test.cc", ], } cc_test_host { name: "ninja_tests", gtest: false, defaults: ["ninja_defaults"], test_per_src: true, static_libs: ["libninja"], srcs: [ "src/build_log_perftest.cc", "src/canon_perftest.cc", "src/depfile_parser_perftest.cc", "src/hash_collision_bench.cc", "src/manifest_parser_perftest.cc", ], }