diff options
author | 2018-07-19 11:37:58 -0700 | |
---|---|---|
committer | 2018-07-19 11:39:52 -0700 | |
commit | 769f72eb475cea0f4113ac49dd66dc3fda0608de (patch) | |
tree | c84325774eb00fbb7dc3c7f7a67095159bfbe9ed /src/main/java/com/google/devtools/build/lib/bazel/rules | |
parent | cfa35f3750d1ae37935bdf402a0cee306672795b (diff) |
C++: Implements Skylark cc_common.compile()/link().
Working towards #4570.
RELNOTES:none
PiperOrigin-RevId: 205274676
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/bazel/rules')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java | 4 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java | 107 |
2 files changed, 109 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java index eb8c6a9a56..620d810f61 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java @@ -19,6 +19,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSe import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcBinaryRule; import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcImportRule; import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcLibraryRule; +import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcModule; import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcTestRule; import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppRuleClasses; import com.google.devtools.build.lib.rules.core.CoreRules; @@ -27,7 +28,6 @@ import com.google.devtools.build.lib.rules.cpp.CcHostToolchainAliasRule; import com.google.devtools.build.lib.rules.cpp.CcImportRule; import com.google.devtools.build.lib.rules.cpp.CcLibcTopAlias; import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; -import com.google.devtools.build.lib.rules.cpp.CcModule; import com.google.devtools.build.lib.rules.cpp.CcToolchainAliasRule; import com.google.devtools.build.lib.rules.cpp.CcToolchainRule; import com.google.devtools.build.lib.rules.cpp.CcToolchainSuiteRule; @@ -77,7 +77,7 @@ public class CcRules implements RuleSet { builder.addRuleDefinition(new FdoProfileRule()); builder.addRuleDefinition(new FdoPrefetchHintsRule()); - builder.addSkylarkBootstrap(new CcBootstrap(new CcModule())); + builder.addSkylarkBootstrap(new CcBootstrap(new BazelCcModule())); builder.addSkylarkAccessibleTopLevels("CcCompilationInfo", CcCompilationInfo.PROVIDER); builder.addSkylarkAccessibleTopLevels("CcLinkingInfo", CcLinkingInfo.PROVIDER); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java new file mode 100644 index 0000000000..3b3d944e74 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java @@ -0,0 +1,107 @@ +// Copyright 2018 The Bazel Authors. 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. + +package com.google.devtools.build.lib.bazel.rules.cpp; + +import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.analysis.skylark.SkylarkRuleContext; +import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.CompilationInfo; +import com.google.devtools.build.lib.rules.cpp.CcCompilationInfo; +import com.google.devtools.build.lib.rules.cpp.CcCompilationOutputs; +import com.google.devtools.build.lib.rules.cpp.CcLinkParams; +import com.google.devtools.build.lib.rules.cpp.CcLinkingHelper.LinkingInfo; +import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; +import com.google.devtools.build.lib.rules.cpp.CcModule; +import com.google.devtools.build.lib.rules.cpp.CcModule.CcSkylarkInfo; +import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; +import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; +import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables; +import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.BazelCcModuleApi; +import com.google.devtools.build.lib.syntax.EvalException; +import com.google.devtools.build.lib.syntax.Runtime; +import com.google.devtools.build.lib.syntax.SkylarkList; + +/** + * A module that contains Skylark utilities for C++ support. + * + * <p>This is a work in progress. The API is guarded behind --experimental_enable_cc_skylark_api. + * The API is under development and unstable. + */ +public class BazelCcModule extends CcModule + implements BazelCcModuleApi< + CcToolchainProvider, + FeatureConfiguration, + CompilationInfo, + CcCompilationInfo, + CcCompilationOutputs, + LinkingInfo, + CcLinkingInfo, + CcToolchainVariables, + LibraryToLink, + CcLinkParams, + CcSkylarkInfo> { + + @Override + public CompilationInfo compile( + SkylarkRuleContext skylarkRuleContext, + FeatureConfiguration skylarkFeatureConfiguration, + CcToolchainProvider skylarkCcToolchainProvider, + SkylarkList<Artifact> sources, + SkylarkList<Artifact> headers, + Object skylarkIncludes, + Object skylarkCopts, + SkylarkList<CcCompilationInfo> ccCompilationInfos) + throws EvalException { + return BazelCcModule.compile( + BazelCppSemantics.INSTANCE, + skylarkRuleContext, + skylarkFeatureConfiguration, + skylarkCcToolchainProvider, + sources, + headers, + skylarkIncludes, + skylarkCopts, + /* generateNoPicOutputs= */ "conditionally", + /* generatePicOutputs= */ "conditionally", + /* skylarkAdditionalCompilationInputs= */ Runtime.NONE, + /* skylarkAdditionalIncludeScanningRoots= */ Runtime.NONE, + ccCompilationInfos, + /* purpose= */ Runtime.NONE); + } + + @Override + public LinkingInfo link( + SkylarkRuleContext skylarkRuleContext, + FeatureConfiguration skylarkFeatureConfiguration, + CcToolchainProvider skylarkCcToolchainProvider, + CcCompilationOutputs ccCompilationOutputs, + Object skylarkLinkopts, + Object dynamicLibrary, + SkylarkList<CcLinkingInfo> skylarkCcLinkingInfos, + boolean neverLink) + throws InterruptedException, EvalException { + return BazelCcModule.link( + BazelCppSemantics.INSTANCE, + skylarkRuleContext, + skylarkFeatureConfiguration, + skylarkCcToolchainProvider, + ccCompilationOutputs, + skylarkLinkopts, + /* shouldCreateStaticLibraries= */ true, + dynamicLibrary, + skylarkCcLinkingInfos, + neverLink); + } +} |