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