Revert "Revert "Enable lld for windows""
This reverts commit 61166dc047
.
One difference from the earlier change is that import libraries are now
using the '.lib' extension instead of '.a' to prevent clash with
AdbWinApi.a.
Bug: http://b/110800681
The following flags that the binutils linkers support are not
available in lld for Windows:
-soname
--no-undefined
-rpath
Windows also uses "import libraries", which are stub libraries used only
for linking. The binutils linkers accepted a DLL and treated them as an
import library. But lld issues the following error:
lld-link: error: ...DLL: bad file type. Did you specify a DLL instead
of an import library?
To resolve this, pass '-out-implib=libFoo.lib' to lld when linking
libFoo.dll to get lld to generate an import library. Add libFoo.lib as
an implicit output to the 'ld' build rule.
Rewrite the shared libraries when building a library/binary to use the
import library instead of the DLL. As a side-effect, this also uses the
newly-created AdbWinApi.lib that's alongside
development/host/windows/prebuilt/usb/AdbWinApi.dll
Test: Run Windows tests (go/android-llvm-windows-testing) and check
absence of regressions. Also check that the following commands pass:
$ adb.exe devices
$ fastboot.exe devices
Change-Id: I34e07d345e0207086ac8e8ea12525d8c322b20fd
This commit is contained in:
@@ -26,6 +26,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
"github.com/google/blueprint/pathtools"
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/cc/config"
|
||||
@@ -596,7 +597,7 @@ func transformDarwinObjToStaticLib(ctx android.ModuleContext, objFiles android.P
|
||||
// and shared libraries, to a shared library (.so) or dynamic executable
|
||||
func TransformObjToDynamicBinary(ctx android.ModuleContext,
|
||||
objFiles, sharedLibs, staticLibs, lateStaticLibs, wholeStaticLibs, deps android.Paths,
|
||||
crtBegin, crtEnd android.OptionalPath, groupLate bool, flags builderFlags, outputFile android.WritablePath) {
|
||||
crtBegin, crtEnd android.OptionalPath, groupLate bool, flags builderFlags, outputFile android.WritablePath, implicitOutputs android.WritablePaths) {
|
||||
|
||||
ldCmd := "${config.ClangBin}/clang++"
|
||||
|
||||
@@ -633,7 +634,11 @@ func TransformObjToDynamicBinary(ctx android.ModuleContext,
|
||||
}
|
||||
|
||||
for _, lib := range sharedLibs {
|
||||
libFlagsList = append(libFlagsList, lib.String())
|
||||
libFile := lib.String()
|
||||
if ctx.Windows() {
|
||||
libFile = pathtools.ReplaceExtension(libFile, "lib")
|
||||
}
|
||||
libFlagsList = append(libFlagsList, libFile)
|
||||
}
|
||||
|
||||
deps = append(deps, staticLibs...)
|
||||
@@ -644,11 +649,12 @@ func TransformObjToDynamicBinary(ctx android.ModuleContext,
|
||||
}
|
||||
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: ld,
|
||||
Description: "link " + outputFile.Base(),
|
||||
Output: outputFile,
|
||||
Inputs: objFiles,
|
||||
Implicits: deps,
|
||||
Rule: ld,
|
||||
Description: "link " + outputFile.Base(),
|
||||
Output: outputFile,
|
||||
ImplicitOutputs: implicitOutputs,
|
||||
Inputs: objFiles,
|
||||
Implicits: deps,
|
||||
Args: map[string]string{
|
||||
"ldCmd": ldCmd,
|
||||
"crtBegin": crtBegin.String(),
|
||||
|
Reference in New Issue
Block a user