# -*- 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/. HostSharedLibrary("clang-plugin") HOST_SOURCES += ["!ThirdPartyPaths.cpp"] HOST_SOURCES += [ "ArithmeticArgChecker.cpp", "AssertAssignmentChecker.cpp", "CanRunScriptChecker.cpp", "CustomAttributes.cpp", "CustomTypeAnnotation.cpp", "DanglingOnTemporaryChecker.cpp", "DiagnosticsMatcher.cpp", "ExplicitImplicitChecker.cpp", "ExplicitOperatorBoolChecker.cpp", "JSHandleRootedTypedefChecker.cpp", "KnownLiveChecker.cpp", "KungFuDeathGripChecker.cpp", "MozCheckAction.cpp", "MustOverrideChecker.cpp", "MustReturnFromCallerChecker.cpp", "NaNExprChecker.cpp", "NeedsNoVTableTypeChecker.cpp", "NoAddRefReleaseOnReturnChecker.cpp", "NoAutoTypeChecker.cpp", "NoDuplicateRefCntMemberChecker.cpp", "NoExplicitMoveConstructorChecker.cpp", "NoNewThreadsChecker.cpp", "NonMemMovableMemberChecker.cpp", "NonMemMovableTemplateArgChecker.cpp", "NonParamInsideFunctionDeclChecker.cpp", "NonTrivialTypeInFfiChecker.cpp", "NoPrincipalGetURI.cpp", "NoUsingNamespaceMozillaJavaChecker.cpp", "OverrideBaseCallChecker.cpp", "OverrideBaseCallUsageChecker.cpp", "ParamTraitsEnumChecker.cpp", "RefCountedCopyConstructorChecker.cpp", "RefCountedInsideLambdaChecker.cpp", "ScopeChecker.cpp", "SprintfLiteralChecker.cpp", "TemporaryLifetimeBoundChecker.cpp", "TrivialCtorDtorChecker.cpp", "TrivialDtorChecker.cpp", "VariableUsageHelpers.cpp", ] # Ideally, we wouldn't have compile-time choices wrt checks. bug 1617153. if CONFIG["OS_ARCH"] == "WINNT": HOST_DEFINES["TARGET_IS_WINDOWS"] = True HOST_SOURCES += [ "FopenUsageChecker.cpp", "LoadLibraryUsageChecker.cpp", ] if CONFIG["ENABLE_MOZSEARCH_PLUGIN"]: HOST_SOURCES += [ "mozsearch-plugin/FileOperations.cpp", "mozsearch-plugin/from-clangd/HeuristicResolver.cpp", "mozsearch-plugin/MozsearchIndexer.cpp", "mozsearch-plugin/StringOperations.cpp", ] GeneratedFile( "ThirdPartyPaths.cpp", script="ThirdPartyPaths.py", entry_point="generate", inputs=[ "/tools/rewriting/ThirdPartyPaths.txt", "/tools/rewriting/Generated.txt", ], ) GeneratedFile( "ThreadAllows.h", script="ThreadAllows.py", entry_point="generate_file", inputs=[ "/build/clang-plugin/ThreadAllows.txt", "/build/clang-plugin/ThreadFileAllows.txt", ], ) HOST_COMPILE_FLAGS["STL"] = [] HOST_COMPILE_FLAGS["VISIBILITY"] = [] # libc++ is required to build plugins against clang on OS X. if CONFIG["HOST_OS_ARCH"] == "Darwin": HOST_CXXFLAGS += ["-stdlib=libc++"] # As of clang 8, llvm-config doesn't output the flags used to build clang # itself, so we don't end up with -fPIC as a side effect. llvm.org/PR8220 if CONFIG["HOST_OS_ARCH"] != "WINNT": HOST_CXXFLAGS += ["-fPIC"] DIRS += [ "tests", ] include("external/sources.mozbuild") if CONFIG["ENABLE_CLANG_PLUGIN_ALPHA"]: HOST_DEFINES["MOZ_CLANG_PLUGIN_ALPHA"] = "1" include("alpha/sources.mozbuild") # In the current moz.build world, we need to override essentially every # variable to limit ourselves to what we need to build the clang plugin. if CONFIG["HOST_OS_ARCH"] == "WINNT": extra_cxxflags = ["-GR-", "-EHsc"] # Clang 14 headers enforce a requirement upon Visual Studio 2019 headers, # for support of newer C++ versions, which is necessary for clang itself, # but as of writing, it's not necessary for the plugin code, so enable # the escape hatch, at least until we generally upgrade to VS 2019. HOST_DEFINES["LLVM_FORCE_USE_OLD_TOOLCHAIN"] = True else: extra_cxxflags = ["-fno-rtti", "-fno-exceptions"] if CONFIG["LLVM_CXXFLAGS"]: HOST_COMPILE_FLAGS["HOST_CXXFLAGS"] = CONFIG["LLVM_CXXFLAGS"] + extra_cxxflags # Avoid -DDEBUG=1 on the command line, which conflicts with a #define # DEBUG(...) in llvm headers. DEFINES["DEBUG"] = False