aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
diff options
context:
space:
mode:
authorGravatar Yun Peng <pcloudy@google.com>2017-11-14 01:45:02 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-14 01:47:03 -0800
commit9cc954a8c1e1f5134c4b6701588cd226e9e52707 (patch)
treef91f1c8dc695c6249d25a7e9b189f4c28ebef29e /src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
parent4260c30a03a9b83d48a5e8690aca19cd80be4c38 (diff)
Add win_def_file attribute to cc rules.
RELNOTES[NEW]: Users can use win_def_file attribute to specify a DEF file for exporting symbols when build a shared library on Windows. Change-Id: Ifa28d8b7b24eaefcefc9640d8dc56fd2931e9688 PiperOrigin-RevId: 175651203
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index c271d19354..e836f999b6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -293,7 +293,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
CppLinkAction.symbolCountsFileName(binaryPath)));
}
- Artifact defFile = null;
+ Artifact generatedDefFile = null;
Artifact interfaceLibrary = null;
if (isLinkShared(ruleContext)) {
linkActionBuilder.setLibraryIdentifier(CcLinkingOutputs.libraryIdentifierOf(binary));
@@ -308,15 +308,20 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
objectFiles.addAll(library.getObjectFiles());
}
}
- defFile =
+ generatedDefFile =
CppHelper.createDefFileActions(
ruleContext,
ccToolchain.getDefParserTool(),
objectFiles.build(),
binary.getFilename());
- if (CppHelper.shouldUseDefFile(featureConfiguration)) {
- linkActionBuilder.setDefFile(defFile);
+ if (CppHelper.shouldUseGeneratedDefFile(ruleContext, featureConfiguration)) {
+ linkActionBuilder.setDefFile(generatedDefFile);
+ }
+
+ Artifact customDefFile = common.getWinDefFile();
+ if (customDefFile != null) {
+ linkActionBuilder.setDefFile(customDefFile);
}
// If we are using a toolchain supporting interface library and targeting Windows, we build
@@ -485,8 +490,8 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
ruleBuilder.addOutputGroup("pdb_file", pdbFile);
}
- if (defFile != null) {
- ruleBuilder.addOutputGroup("def_file", defFile);
+ if (generatedDefFile != null) {
+ ruleBuilder.addOutputGroup("def_file", generatedDefFile);
}
if (interfaceLibrary != null) {