mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 21:01:08 +00:00
95a223fc8c
Differential Revision: https://phabricator.services.mozilla.com/D220688
117 lines
3.3 KiB
Python
117 lines
3.3 KiB
Python
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
|
# vim: set filetype=python:
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
|
@depends(host_library_name_info, build_environment, when="--enable-clang-plugin")
|
|
def clang_plugin_path(library_name_info, build_env):
|
|
topobjdir = build_env.topobjdir
|
|
if topobjdir.endswith("/js/src"):
|
|
topobjdir = topobjdir[:-7]
|
|
return os.path.abspath(
|
|
os.path.join(
|
|
topobjdir,
|
|
"build",
|
|
"clang-plugin",
|
|
"%sclang-plugin%s"
|
|
% (library_name_info.dll.prefix, library_name_info.dll.suffix),
|
|
)
|
|
)
|
|
|
|
|
|
set_config("CLANG_PLUGIN", clang_plugin_path)
|
|
|
|
option(
|
|
"--enable-clang-plugin-alpha",
|
|
env="ENABLE_CLANG_PLUGIN_ALPHA",
|
|
help="Enable static analysis with clang-plugin alpha checks.",
|
|
when="--enable-clang-plugin",
|
|
)
|
|
|
|
|
|
set_config("ENABLE_CLANG_PLUGIN_ALPHA", True, when="--enable-clang-plugin-alpha")
|
|
set_define("MOZ_CLANG_PLUGIN_ALPHA", True, when="--enable-clang-plugin-alpha")
|
|
|
|
|
|
option(
|
|
"--enable-mozsearch-plugin",
|
|
env="ENABLE_MOZSEARCH_PLUGIN",
|
|
help="Enable building with the mozsearch indexer plugin",
|
|
when="--enable-clang-plugin",
|
|
)
|
|
|
|
|
|
set_config("ENABLE_MOZSEARCH_PLUGIN", True, when="--enable-mozsearch-plugin")
|
|
|
|
|
|
@depends(
|
|
clang_plugin_path,
|
|
host,
|
|
llvm_config,
|
|
"--enable-mozsearch-plugin",
|
|
build_environment,
|
|
when="--enable-clang-plugin",
|
|
)
|
|
def clang_plugin_flags(
|
|
clang_plugin,
|
|
host,
|
|
llvm_config,
|
|
enable_mozsearch_plugin,
|
|
build_environment,
|
|
):
|
|
llvm_cxxflags = check_cmd_output(llvm_config, "--cxxflags").split()
|
|
llvm_ldflags = check_cmd_output(llvm_config, "--ldflags").replace("\n", " ").split()
|
|
|
|
if host.kernel == "WINNT":
|
|
# Replace any backslashes from paths with forward slash.
|
|
llvm_cxxflags = [arg.replace("\\", "/") for arg in llvm_cxxflags]
|
|
llvm_ldflags = [arg.replace("\\", "/") for arg in llvm_ldflags]
|
|
|
|
clang_plugin_flags = [
|
|
"-Xclang",
|
|
"-load",
|
|
"-Xclang",
|
|
clang_plugin,
|
|
"-Xclang",
|
|
"-add-plugin",
|
|
"-Xclang",
|
|
"moz-check",
|
|
]
|
|
|
|
if enable_mozsearch_plugin:
|
|
clang_plugin_flags.extend(
|
|
["-Xclang", "-add-plugin", "-Xclang", "mozsearch-index"]
|
|
)
|
|
# Parameters are: srcdir, outdir (path where output JSON is stored), objdir.
|
|
parameters = [
|
|
build_environment.topsrcdir,
|
|
os.path.join(build_environment.topobjdir, "mozsearch_index"),
|
|
build_environment.topobjdir,
|
|
]
|
|
for parameter in parameters:
|
|
clang_plugin_flags.extend(
|
|
["-Xclang", "-plugin-arg-mozsearch-index", "-Xclang", parameter]
|
|
)
|
|
|
|
return namespace(
|
|
plugin_flags=clang_plugin_flags,
|
|
llvm_cxxflags=llvm_cxxflags,
|
|
llvm_ldflags=llvm_ldflags,
|
|
)
|
|
|
|
|
|
set_config(
|
|
"CLANG_PLUGIN_FLAGS",
|
|
depends(clang_plugin_flags)(lambda plugin: plugin.plugin_flags if plugin else []),
|
|
)
|
|
set_config(
|
|
"LLVM_CXXFLAGS",
|
|
depends(clang_plugin_flags)(lambda plugin: plugin.llvm_cxxflags if plugin else []),
|
|
)
|
|
set_config(
|
|
"LLVM_LDFLAGS",
|
|
depends(clang_plugin_flags)(lambda plugin: plugin.llvm_ldflags if plugin else []),
|
|
)
|