aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-04-29 04:44:11 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-04-30 23:14:13 +0200
commite7fe50aa727df9ef0a3d37fa258d017971035515 (patch)
tree8513a612248d4e3f9f89588d24926c4e8e7f39d9 /src/main/java/com/google/devtools/build/lib/rules/cpp
parent5f31944b8942818aaf53571c76f5c6a9a9dafc72 (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMap.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java63
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java124
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();
- }
-}