private <A extends Arg> BuildRule createExtensionBuildRule( BuildRuleParams params, BuildRuleResolver ruleResolver, PythonPlatform pythonPlatform, CxxPlatform cxxPlatform, A args) throws NoSuchBuildTargetException { SourcePathResolver pathResolver = new SourcePathResolver(ruleResolver); String extensionName = getExtensionName(params.getBuildTarget()); Path extensionPath = getExtensionPath( params.getProjectFilesystem(), params.getBuildTarget(), pythonPlatform.getFlavor(), cxxPlatform.getFlavor()); return CxxLinkableEnhancer.createCxxLinkableBuildRule( cxxBuckConfig, cxxPlatform, params, ruleResolver, pathResolver, getExtensionTarget( params.getBuildTarget(), pythonPlatform.getFlavor(), cxxPlatform.getFlavor()), Linker.LinkType.SHARED, Optional.of(extensionName), extensionPath, Linker.LinkableDepType.SHARED, FluentIterable.from(params.getDeps()).filter(NativeLinkable.class), args.cxxRuntimeType, Optional.<SourcePath>absent(), ImmutableSet.<BuildTarget>of(), NativeLinkableInput.builder() .setArgs(getExtensionArgs(params, ruleResolver, pathResolver, cxxPlatform, args)) .setFrameworks(args.frameworks.or(ImmutableSortedSet.<FrameworkPath>of())) .setLibraries(args.libraries.or(ImmutableSortedSet.<FrameworkPath>of())) .build()); }