diff options
author | 2017-11-14 01:45:02 -0800 | |
---|---|---|
committer | 2017-11-14 01:47:03 -0800 | |
commit | 9cc954a8c1e1f5134c4b6701588cd226e9e52707 (patch) | |
tree | f91f1c8dc695c6249d25a7e9b189f4c28ebef29e /src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java | |
parent | 4260c30a03a9b83d48a5e8690aca19cd80be4c38 (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.java | 17 |
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) { |