aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-04-27 17:31:01 +0000
committerGravatar Lukacs Berki <lberki@google.com>2016-04-28 07:29:54 +0000
commit36e4c80a6f7aaa15954dcf70ec8e1ace5e6961f4 (patch)
treeb34396640b2699d389d9630c45bd7e13d4b1e4e7 /src/main/java/com/google/devtools/build
parent93fbc3e455d1a81abf6ba911550fc7954b1b7f68 (diff)
Adds an "otherFlags" field to ObjcCommon.
Adds -fno-strict-overflow for compiling all J2ObjC generated sources. RELNOTES: Fixes integer overflow in J2ObjC sources to be Java-compatible. -- MOS_MIGRATED_REVID=120929114
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java31
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java6
2 files changed, 33 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index c2547836bc..1b84341fec 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -187,6 +187,16 @@ public final class CompilationSupport {
}
}
+ /**
+ * Iterable wrapper providing strong type safety for extra compile flags.
+ */
+ static final class ExtraCompileArgs extends IterableWrapper<String> {
+ static final ExtraCompileArgs NONE = new ExtraCompileArgs();
+ ExtraCompileArgs(String... args) {
+ super(args);
+ }
+ }
+
@VisibleForTesting
static final String FILE_IN_SRCS_AND_HDRS_WARNING_FORMAT =
"File '%s' is in both srcs and hdrs.";
@@ -268,6 +278,19 @@ public final class CompilationSupport {
* @return this compilation support
*/
CompilationSupport registerCompileAndArchiveActions(ObjcCommon common) {
+ return registerCompileAndArchiveActions(common, ExtraCompileArgs.NONE);
+ }
+
+ /**
+ * Registers all actions necessary to compile this rule's sources and archive them.
+ *
+ * @param common common information about this rule and its dependencies
+ * @param extraCompileArgs args to be added to compile actions
+ * @return this compilation support
+ */
+ CompilationSupport registerCompileAndArchiveActions(
+ ObjcCommon common,
+ ExtraCompileArgs extraCompileArgs) {
if (common.getCompilationArtifacts().isPresent()) {
registerGenerateModuleMapAction(common.getCompilationArtifacts());
Optional<CppModuleMap> moduleMap;
@@ -279,6 +302,7 @@ public final class CompilationSupport {
registerCompileAndArchiveActions(
common.getCompilationArtifacts().get(),
common.getObjcProvider(),
+ extraCompileArgs,
moduleMap,
buildConfiguration.isCodeCoverageEnabled());
}
@@ -292,6 +316,7 @@ public final class CompilationSupport {
private void registerCompileAndArchiveActions(
CompilationArtifacts compilationArtifacts,
ObjcProvider objcProvider,
+ ExtraCompileArgs extraCompileArgs,
Optional<CppModuleMap> moduleMap,
boolean isCodeCoverageEnabled) {
ImmutableList.Builder<Artifact> objFiles = new ImmutableList.Builder<>();
@@ -307,7 +332,7 @@ public final class CompilationSupport {
objcProvider,
moduleMap,
compilationArtifacts,
- ImmutableList.of("-fobjc-arc"),
+ Iterables.concat(extraCompileArgs, ImmutableList.of("-fobjc-arc")),
isCodeCoverageEnabled);
}
}
@@ -320,12 +345,12 @@ public final class CompilationSupport {
objcProvider,
moduleMap,
compilationArtifacts,
- ImmutableList.of("-fno-objc-arc"),
+ Iterables.concat(extraCompileArgs, ImmutableList.of("-fno-objc-arc")),
isCodeCoverageEnabled);
}
objFiles.addAll(compilationArtifacts.getPrecompiledSrcs());
-
+
if (compilationArtifacts.hasSwiftSources()) {
registerSwiftModuleMergeAction(compilationArtifacts, objcProvider);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 5bce361311..198896ccb4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -48,6 +48,7 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
import com.google.devtools.build.lib.rules.java.JavaHelper;
import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
import com.google.devtools.build.lib.rules.java.Jvm;
+import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraCompileArgs;
import com.google.devtools.build.lib.rules.objc.J2ObjcSource.SourceType;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -62,6 +63,9 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
private final String toolsRepository;
private final BazelJ2ObjcProtoAspect bazelJ2ObjcProtoAspect;
+ private static final ExtraCompileArgs EXTRA_COMPILE_ARGS = new ExtraCompileArgs(
+ "-fno-strict-overflow");
+
public J2ObjcAspect(String toolsRepository, BazelJ2ObjcProtoAspect bazelJ2ObjcProtoAspect) {
this.toolsRepository = toolsRepository;
this.bazelJ2ObjcProtoAspect = bazelJ2ObjcProtoAspect;
@@ -162,7 +166,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
DEPENDENT_ATTRIBUTES);
new CompilationSupport(ruleContext)
- .registerCompileAndArchiveActions(common)
+ .registerCompileAndArchiveActions(common, EXTRA_COMPILE_ARGS)
.registerFullyLinkAction(common.getObjcProvider());
} else {
common = common(