Enable lld for windows
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.a' to lld when linking libFoo.dll. Add libFoo.a as an implicit output to the 'ld' build rule. Rewrite the shared libraries for a library/binary to use the import library instead of the DLL. As a side-effect, this also (correctly) uses the AdbWinApi.a that's alongside development/host/windows/prebuilt/usb/AdbWinApi.dll Test: Run Windows tests (go/android-llvm-windows-testing) and check absence of regressions. Change-Id: I15a178589aa6882caa6e7e38650cc6ef48109764
This commit is contained in:
@@ -347,9 +347,10 @@ func (library *libraryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Fla
|
||||
)
|
||||
}
|
||||
} else {
|
||||
f = append(f,
|
||||
"-shared",
|
||||
"-Wl,-soname,"+libName+flags.Toolchain.ShlibSuffix())
|
||||
f = append(f, "-shared")
|
||||
if !ctx.Windows() {
|
||||
f = append(f, "-Wl,-soname,"+libName+flags.Toolchain.ShlibSuffix())
|
||||
}
|
||||
}
|
||||
|
||||
flags.LdFlags = append(f, flags.LdFlags...)
|
||||
@@ -673,6 +674,14 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext,
|
||||
outputFile := android.PathForModuleOut(ctx, fileName)
|
||||
ret := outputFile
|
||||
|
||||
var implicitOutputs android.WritablePaths
|
||||
if ctx.Windows() {
|
||||
importLibraryPath := android.PathForModuleOut(ctx, pathtools.ReplaceExtension(fileName, "a"))
|
||||
|
||||
flags.LdFlags = append(flags.LdFlags, "-Wl,--out-implib="+importLibraryPath.String())
|
||||
implicitOutputs = append(implicitOutputs, importLibraryPath)
|
||||
}
|
||||
|
||||
builderFlags := flagsToBuilderFlags(flags)
|
||||
|
||||
// Optimize out relinking against shared libraries whose interface hasn't changed by
|
||||
@@ -724,7 +733,7 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext,
|
||||
|
||||
TransformObjToDynamicBinary(ctx, objs.objFiles, sharedLibs,
|
||||
deps.StaticLibs, deps.LateStaticLibs, deps.WholeStaticLibs,
|
||||
linkerDeps, deps.CrtBegin, deps.CrtEnd, false, builderFlags, outputFile)
|
||||
linkerDeps, deps.CrtBegin, deps.CrtEnd, false, builderFlags, outputFile, implicitOutputs)
|
||||
|
||||
objs.coverageFiles = append(objs.coverageFiles, deps.StaticLibObjs.coverageFiles...)
|
||||
objs.coverageFiles = append(objs.coverageFiles, deps.WholeStaticLibObjs.coverageFiles...)
|
||||
|
Reference in New Issue
Block a user