diff options
author | Googler <noreply@google.com> | 2017-04-29 04:44:11 +0200 |
---|---|---|
committer | Vladimir Moskva <vladmos@google.com> | 2017-04-30 23:14:13 +0200 |
commit | e7fe50aa727df9ef0a3d37fa258d017971035515 (patch) | |
tree | 8513a612248d4e3f9f89588d24926c4e8e7f39d9 /src/main/java/com/google/devtools/build/lib/rules/cpp | |
parent | 5f31944b8942818aaf53571c76f5c6a9a9dafc72 (diff) |
Automated g4 rollback of commit a83a5df53ca184ad59a4a46cd9dfa747bf08007a.
*** Reason for rollback ***
This caused some build breaks.
*** Original change description ***
Custom module map for j2objc_library
PiperOrigin-RevId: 154608761
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
4 files changed, 14 insertions, 217 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java index 35b39eedea..3154b16a34 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java @@ -16,7 +16,6 @@ package com.google.devtools.build.lib.rules.cpp; import com.google.common.base.Function; import com.google.common.base.Joiner; -import com.google.common.base.Optional; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -1385,11 +1384,6 @@ public final class CcLibraryHelper { featureConfiguration.isEnabled(CppRuleClasses.HEADER_MODULES) || featureConfiguration.isEnabled(CppRuleClasses.COMPILE_ALL_MODULES); Iterable<CppModuleMap> dependentModuleMaps = collectModuleMaps(); - Optional<Artifact> umbrellaHeader = cppModuleMap.getUmbrellaHeader(); - if (umbrellaHeader.isPresent()) { - ruleContext.registerAction( - createUmbrellaHeaderAction(umbrellaHeader.get(), publicHeaders)); - } ruleContext.registerAction( createModuleMapAction(cppModuleMap, publicHeaders, dependentModuleMaps, compiled)); if (model.getGeneratesPicHeaderModule()) { @@ -1418,17 +1412,6 @@ public final class CcLibraryHelper { return contextBuilder.build(); } - private UmbrellaHeaderAction createUmbrellaHeaderAction(Artifact umbrellaHeader, - PublicHeaders publicHeaders) { - return new UmbrellaHeaderAction( - ruleContext.getActionOwner(), - umbrellaHeader, - featureConfiguration.isEnabled(CppRuleClasses.ONLY_DOTH_HEADERS_IN_MODULE_MAPS) - ? Iterables.filter(publicHeaders.getModuleMapHeaders(), CppFileTypes.MODULE_MAP_HEADER) - : publicHeaders.getModuleMapHeaders(), - additionalExportedHeaders); - } - private CppModuleMapAction createModuleMapAction( CppModuleMap moduleMap, PublicHeaders publicHeaders, diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMap.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMap.java index 2d52c5acd8..aa365d4b1b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMap.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMap.java @@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.rules.cpp; -import com.google.common.base.Optional; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; @@ -25,15 +24,9 @@ public final class CppModuleMap { // NOTE: If you add a field here, you'll likely need to update CppModuleMapAction.computeKey(). private final Artifact artifact; private final String name; - private final Optional<Artifact> umbrellaHeader; public CppModuleMap(Artifact artifact, String name) { - this(artifact, null, name); - } - - public CppModuleMap(Artifact artifact, Artifact umbrellaHeader, String name) { this.artifact = artifact; - this.umbrellaHeader = Optional.fromNullable(umbrellaHeader); this.name = name; } @@ -45,28 +38,8 @@ public final class CppModuleMap { return name; } - /** - * Returns an optional umbrella header artifact. The headers declared in module maps are compiled - * using the #import directives which are incompatible with J2ObjC segmented headers. The headers - * generated by J2ObjC need to be compiled using the #include directives. We can #include all the - * headers in an umbrella header and then delcare the umbrella header in the module map. - */ - public Optional<Artifact> getUmbrellaHeader() { - return umbrellaHeader; - } - @Override public String toString() { return name + "@" + artifact; } - - /** - * Specifies whether to generate an umbrella header. - */ - public enum UmbrellaHeaderStrategy { - /** Generate an umbrella header. */ - GENERATE, - /** Do not generate an umbrella header. */ - DO_NOT_GENERATE - } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java index 652700f5a0..a99751a8b1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.cpp; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Optional; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; @@ -101,7 +100,6 @@ public final class CppModuleMapAction extends AbstractFileWriteAction { StringBuilder content = new StringBuilder(); PathFragment fragment = cppModuleMap.getArtifact().getExecPath(); int segmentsToExecPath = fragment.segmentCount() - 1; - Optional<Artifact> umbrellaHeader = cppModuleMap.getUmbrellaHeader(); // For details about the different header types, see: // http://clang.llvm.org/docs/Modules.html#header-declaration @@ -110,46 +108,22 @@ public final class CppModuleMapAction extends AbstractFileWriteAction { content.append(" export *\n"); HashSet<PathFragment> deduper = new HashSet<>(); - if (umbrellaHeader.isPresent()) { + for (Artifact artifact : expandedHeaders(artifactExpander, publicHeaders)) { + appendHeader( + content, "", artifact.getExecPath(), leadingPeriods, /*canCompile=*/ true, deduper); + } + for (Artifact artifact : expandedHeaders(artifactExpander, privateHeaders)) { appendHeader( content, - "", - umbrellaHeader.get().getExecPath(), + "private", + artifact.getExecPath(), leadingPeriods, - /*canCompile=*/ false, - deduper, - /*isUmbrellaHeader*/ true); - } else { - for (Artifact artifact : expandedHeaders(artifactExpander, publicHeaders)) { - appendHeader( - content, - "", - artifact.getExecPath(), - leadingPeriods, - /*canCompile=*/ true, - deduper, - /*isUmbrellaHeader*/ false); - } - for (Artifact artifact : expandedHeaders(artifactExpander, privateHeaders)) { - appendHeader( - content, - "private", - artifact.getExecPath(), - leadingPeriods, - /*canCompile=*/ true, - deduper, - /*isUmbrellaHeader*/ false); - } - for (PathFragment additionalExportedHeader : additionalExportedHeaders) { - appendHeader( - content, - "", - additionalExportedHeader, - leadingPeriods, - /*canCompile*/ false, - deduper, - /*isUmbrellaHeader*/ false); - } + /*canCompile=*/ true, + deduper); + } + for (PathFragment additionalExportedHeader : additionalExportedHeaders) { + appendHeader( + content, "", additionalExportedHeader, leadingPeriods, /*canCompile*/ false, deduper); } for (CppModuleMap dep : dependencies) { content.append(" use \"").append(dep.getName()).append("\"\n"); @@ -186,16 +160,11 @@ public final class CppModuleMapAction extends AbstractFileWriteAction { } private void appendHeader(StringBuilder content, String visibilitySpecifier, PathFragment path, - String leadingPeriods, boolean canCompile, HashSet<PathFragment> deduper, - boolean isUmbrellaHeader) { + String leadingPeriods, boolean canCompile, HashSet<PathFragment> deduper) { if (deduper.contains(path)) { return; } deduper.add(path); - if (isUmbrellaHeader) { - content.append(" umbrella header \"umbrella.h\"\n"); - return; - } if (generateSubmodules) { content.append(" module \"").append(path).append("\" {\n"); content.append(" export *\n "); @@ -244,10 +213,6 @@ public final class CppModuleMapAction extends AbstractFileWriteAction { f.addPath(path); } f.addPath(cppModuleMap.getArtifact().getExecPath()); - Optional<Artifact> umbrellaHeader = cppModuleMap.getUmbrellaHeader(); - if (umbrellaHeader.isPresent()) { - f.addPath(umbrellaHeader.get().getExecPath()); - } f.addString(cppModuleMap.getName()); f.addBoolean(moduleMapHomeIsCwd); f.addBoolean(compiledModule); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java deleted file mode 100644 index 14c3a0cfaa..0000000000 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2017 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.rules.cpp; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.actions.ActionExecutionContext; -import com.google.devtools.build.lib.actions.ActionOwner; -import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander; -import com.google.devtools.build.lib.analysis.actions.AbstractFileWriteAction; -import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.util.Fingerprint; -import com.google.devtools.build.lib.vfs.PathFragment; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; - -/** - * Action for generating an umbrella header. All the headers are #included in the umbrella header. - */ -@Immutable -public final class UmbrellaHeaderAction extends AbstractFileWriteAction { - - private static final String GUID = "62ea2952-bf28-92c3-efb1-e34621646910"; - - // NOTE: If you add a field here, you'll likely need to add it to the cache key in computeKey(). - private final Artifact umbrellaHeader; - private final ImmutableList<Artifact> publicHeaders; - private final ImmutableList<PathFragment> additionalExportedHeaders; - - public UmbrellaHeaderAction( - ActionOwner owner, - Artifact umbrellaHeader, - Iterable<Artifact> publicHeaders, - Iterable<PathFragment> additionalExportedHeaders) { - super( - owner, - ImmutableList.copyOf(Iterables.filter(publicHeaders, Artifact.IS_TREE_ARTIFACT)), - umbrellaHeader, - /*makeExecutable=*/false); - this.umbrellaHeader = umbrellaHeader; - this.publicHeaders = ImmutableList.copyOf(publicHeaders); - this.additionalExportedHeaders = ImmutableList.copyOf(additionalExportedHeaders); - } - - @Override - public DeterministicWriter newDeterministicWriter(ActionExecutionContext ctx) { - final ArtifactExpander artifactExpander = ctx.getArtifactExpander(); - return new DeterministicWriter() { - @Override - public void writeOutputFile(OutputStream out) throws IOException { - StringBuilder content = new StringBuilder(); - HashSet<PathFragment> deduper = new HashSet<>(); - for (Artifact artifact : expandedHeaders(artifactExpander, publicHeaders)) { - appendHeader(content, artifact.getExecPath(), deduper); - } - for (PathFragment additionalExportedHeader : additionalExportedHeaders) { - appendHeader(content, additionalExportedHeader, deduper); - } - out.write(content.toString().getBytes(StandardCharsets.ISO_8859_1)); - } - }; - } - - private static Iterable<Artifact> expandedHeaders(ArtifactExpander artifactExpander, - Iterable<Artifact> unexpandedHeaders) { - List<Artifact> expandedHeaders = new ArrayList<>(); - for (Artifact unexpandedHeader : unexpandedHeaders) { - if (unexpandedHeader.isTreeArtifact()) { - artifactExpander.expand(unexpandedHeader, expandedHeaders); - } else { - expandedHeaders.add(unexpandedHeader); - } - } - return ImmutableList.copyOf(expandedHeaders); - } - - private void appendHeader(StringBuilder content, PathFragment path, - HashSet<PathFragment> deduper) { - if (deduper.contains(path)) { - return; - } - deduper.add(path); - // #include headers. The #import directive is incompatible with J2ObjC segmented headers. - content.append("#include \"").append(path).append("\""); - content.append("\n"); - } - - @Override - public String getMnemonic() { - return "UmbrellaHeader"; - } - - @Override - protected String computeKey() { - Fingerprint f = new Fingerprint(); - f.addString(GUID); - f.addPath(umbrellaHeader.getExecPath()); - f.addInt(publicHeaders.size()); - for (Artifact artifact : publicHeaders) { - f.addPath(artifact.getExecPath()); - } - f.addInt(additionalExportedHeaders.size()); - for (PathFragment path : additionalExportedHeaders) { - f.addPath(path); - } - return f.hexDigestAndReset(); - } -} |