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());
 }