use of com.facebook.buck.cxx.NativeLinkableInput in project buck by facebook.
the class SwiftRuntimeNativeLinkable method getNativeLinkableInput.
@Override
public NativeLinkableInput getNativeLinkableInput(CxxPlatform cxxPlatform, Linker.LinkableDepType type) throws NoSuchBuildTargetException {
NativeLinkableInput.Builder inputBuilder = NativeLinkableInput.builder();
ImmutableSet<Path> swiftRuntimePaths = type == Linker.LinkableDepType.SHARED ? ImmutableSet.of() : swiftPlatform.getSwiftStaticRuntimePaths();
// Fall back to shared if static isn't supported on this platform.
if (type == Linker.LinkableDepType.SHARED || swiftRuntimePaths.isEmpty()) {
inputBuilder.addAllArgs(StringArg.from("-Xlinker", "-rpath", "-Xlinker", "@executable_path/Frameworks", "-Xlinker", "-rpath", "-Xlinker", "@loader_path/Frameworks"));
swiftRuntimePaths = swiftPlatform.getSwiftRuntimePaths();
} else {
// Static linking requires force-loading Swift libs, since the dependency
// discovery mechanism is disabled otherwise.
inputBuilder.addAllArgs(StringArg.from("-Xlinker", "-force_load_swift_libs"));
}
for (Path swiftRuntimePath : swiftRuntimePaths) {
inputBuilder.addAllArgs(StringArg.from("-L", swiftRuntimePath.toString()));
}
return inputBuilder.build();
}
use of com.facebook.buck.cxx.NativeLinkableInput in project buck by facebook.
the class HaskellLibraryDescriptionTest method linkWhole.
@Test
public void linkWhole() throws Exception {
BuildTarget target = BuildTargetFactory.newInstance("//:rule");
HaskellLibraryBuilder builder = new HaskellLibraryBuilder(target).setLinkWhole(true);
BuildRuleResolver resolver = new BuildRuleResolver(TargetGraphFactory.newInstance(builder.build()), new DefaultTargetNodeToBuildRuleTransformer());
SourcePathResolver pathResolver = new SourcePathResolver(new SourcePathRuleFinder(resolver));
HaskellLibrary library = builder.build(resolver);
// Lookup the link whole flags.
Linker linker = CxxPlatformUtils.DEFAULT_PLATFORM.getLd().resolve(resolver);
ImmutableList<String> linkWholeFlags = FluentIterable.from(linker.linkWhole(StringArg.of("sentinel"))).transformAndConcat((input) -> Arg.stringifyList(input, pathResolver)).filter(Predicates.not("sentinel"::equals)).toList();
// Test static dep type.
NativeLinkableInput staticInput = library.getNativeLinkableInput(CxxPlatformUtils.DEFAULT_PLATFORM, Linker.LinkableDepType.STATIC);
assertThat(Arg.stringify(staticInput.getArgs(), pathResolver), hasItems(linkWholeFlags.toArray(new String[linkWholeFlags.size()])));
// Test static-pic dep type.
NativeLinkableInput staticPicInput = library.getNativeLinkableInput(CxxPlatformUtils.DEFAULT_PLATFORM, Linker.LinkableDepType.STATIC_PIC);
assertThat(Arg.stringify(staticPicInput.getArgs(), pathResolver), hasItems(linkWholeFlags.toArray(new String[linkWholeFlags.size()])));
// Test shared dep type.
NativeLinkableInput sharedInput = library.getNativeLinkableInput(CxxPlatformUtils.DEFAULT_PLATFORM, Linker.LinkableDepType.SHARED);
assertThat(Arg.stringify(sharedInput.getArgs(), pathResolver), not(hasItems(linkWholeFlags.toArray(new String[linkWholeFlags.size()]))));
}
use of com.facebook.buck.cxx.NativeLinkableInput in project buck by facebook.
the class HaskellPrebuiltLibraryDescriptionTest method sharedLibraries.
@Test
public void sharedLibraries() throws Exception {
PathSourcePath lib = new FakeSourcePath("libfoo.so");
BuildTarget target = BuildTargetFactory.newInstance("//:rule");
PrebuiltHaskellLibraryBuilder builder = new PrebuiltHaskellLibraryBuilder(target).setVersion("1.0.0").setDb(new FakeSourcePath("package.conf.d")).setSharedLibs(ImmutableMap.of("libfoo.so", lib));
TargetGraph targetGraph = TargetGraphFactory.newInstance(builder.build());
ProjectFilesystem filesystem = new FakeProjectFilesystem();
BuildRuleResolver resolver = new BuildRuleResolver(targetGraph, new DefaultTargetNodeToBuildRuleTransformer());
PrebuiltHaskellLibrary library = builder.build(resolver, filesystem, targetGraph);
NativeLinkableInput input = library.getNativeLinkableInput(CxxPlatformUtils.DEFAULT_PLATFORM, Linker.LinkableDepType.SHARED);
assertThat(RichStream.from(input.getArgs()).flatMap(a -> a.getInputs().stream()).toImmutableSet(), Matchers.contains(lib));
}
Aggregations