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