try cc_shared_library impl
diff --git a/python/private/cc/py_extension_macro.bzl b/python/private/cc/py_extension_macro.bzl
index 04bd146..8c4cc36 100644
--- a/python/private/cc/py_extension_macro.bzl
+++ b/python/private/cc/py_extension_macro.bzl
@@ -1,7 +1,12 @@
 """Wrapper macro for the py_extension rule."""
 
+load("@rules_cc//cc:cc_shared_library.bzl", "cc_shared_library")
 load("//python/private:util.bzl", "add_tag")
-load(":py_extension_rule.bzl", _py_extension = "py_extension")
+load(
+    ":py_extension_rule.bzl",
+    _py_extension = "py_extension",
+    ##_py_extension_csl_rule = "py_extension_csl",
+)
 
 def py_extension(**kwargs):
     """A macro that calls the py_extension rule and adds a tag.
@@ -10,4 +15,19 @@
         **kwargs: Additional arguments to pass to the rule.
     """
     add_tag(kwargs, "@rules_python//python/cc:py_extension")
-    _py_extension(**kwargs)
+
+    use_csl = kwargs.pop("use_csl", False)
+    if use_csl:
+        _py_extension_csl(**kwargs)
+    else:
+        _py_extension(**kwargs)
+
+def _py_extension_csl(*, name, module_name = None, **kwargs):
+    if not module_name:
+        module_name = name
+
+    cc_shared_library(
+        name = name,
+        shared_lib_name = module_name + ".so",
+        **kwargs
+    )
diff --git a/tests/cc/py_extension/BUILD.bazel b/tests/cc/py_extension/BUILD.bazel
index b68dbef..e88690b 100644
--- a/tests/cc/py_extension/BUILD.bazel
+++ b/tests/cc/py_extension/BUILD.bazel
@@ -1,4 +1,4 @@
-load("@rules_cc//cc:defs.bzl", "cc_library")
+load("@rules_cc//cc:cc_library.bzl", "cc_library")
 load("//python:py_test.bzl", "py_test")
 
 # buildifier: disable=bzl-visibility
@@ -28,6 +28,22 @@
     ],
 )
 
+py_extension(
+    name = "ext_csl_shared",
+    dynamic_deps = [
+        ":add_one_shared",
+    ],
+    exports_filter = [
+        "//tests/cc/py_extension:ext_shared_impl",
+        ":ext_shared_impl",
+    ],
+    module_name = "ext_shared",
+    use_csl = True,
+    deps = [
+        ":ext_shared_impl",
+    ],
+)
+
 cc_library(
     name = "ext_shared_impl",
     srcs = ["ext_shared.c"],
@@ -37,10 +53,10 @@
         "-fvisibility=hidden",
     ],
     deps = [
-        ":add_one_headers",
+        #":add_one_headers",
         # todo: if we put this here, we statically link add_one into the
         # extension.
-        #":add_one_impl",
+        ":add_one_impl",
         "@rules_python//python/cc:current_py_cc_headers",
     ],
 )
@@ -51,14 +67,29 @@
     hdrs = ["static_dep.h"],
 )
 
+cc_shared_library(
+    name = "add_one_shared",
+    deps = [":add_one_impl"],
+)
+
 cc_library(
     name = "add_one_headers",
     hdrs = ["add_one.h"],
 )
 
 cc_library(
-    name = "add_one",
+    name = "add_one_impl",
     srcs = ["add_one.c"],
+    deps = [
+        ":add_one_headers",
+        ":add_one_helper",
+    ],
+)
+
+cc_library(
+    name = "add_one_helper",
+    srcs = ["add_one_helper.c"],
+    hdrs = ["add_one_helper.h"],
 )
 
 py_test(
diff --git a/tests/cc/py_extension/add_one.c b/tests/cc/py_extension/add_one.c
index c83da4e..7da8f67 100644
--- a/tests/cc/py_extension/add_one.c
+++ b/tests/cc/py_extension/add_one.c
@@ -1,3 +1,7 @@
+
+#include "add_one_helper.h"
+
 int add_one(int x) {
+    x = add_one_helper(x);
     return x + 1;
 }
diff --git a/tests/cc/py_extension/add_one_helper.c b/tests/cc/py_extension/add_one_helper.c
new file mode 100644
index 0000000..21d19a5
--- /dev/null
+++ b/tests/cc/py_extension/add_one_helper.c
@@ -0,0 +1,7 @@
+
+
+#include "add_one_helper.h"
+
+int add_one_helper(int i) {
+  return i + 1;
+}
diff --git a/tests/cc/py_extension/add_one_helper.h b/tests/cc/py_extension/add_one_helper.h
new file mode 100644
index 0000000..5524d30
--- /dev/null
+++ b/tests/cc/py_extension/add_one_helper.h
@@ -0,0 +1,2 @@
+
+int add_one_helper(int i);