gecko-dev/build/moz.configure/clang_plugin.configure

118 lines
3.4 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")
set_define("MOZ_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 []),
)