You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When using the built-in cxx_python_extension rule and the default system_python_toolchain, Buck2 fails during analysis because the rule references a field (extension_linker_flags) that the standard Python toolchain does not define. This leads to a type error (NoneType vs. list) whenever cxx_python_extension tries to read extension_linker_flags.
Steps to reproduce
Create a minimal BUCK2 project with a simple cxx_python_extension target and the default “system” Python toolchain:
In toolchains//BUCK (or wherever the system python toolchain is declared), define:
system_python_toolchain(
name = "python",
# no ex
tension_linker_flags param, just the defaults
)
Run buck2 build //path/to:my_python_extension.
Observed behavior
Buck2 fails with an error similar to:
Value `None` of type `NoneType` does not match the type annotation `list` for argument `extra_link_flags`
--> prelude/python/cxx_python_extension.bzl:XXX
It points to python_toolchain.extension_linker_flags being None when cxx_python_extension tries to assign it to extra_link_flags.
If we try to fix this by passing extension_linker_flags = [] into system_python_toolchain, Buck2 immediately complains:
Found extension_linker_flags extra named parameter(s) for call to system_python_toolchain
indicating that system_python_toolchain does not accept or define that parameter.
Expected behavior
According to Buck2’s documentation, a simple cxx_python_extension target should “just work” out of the box with no special configuration. The rule’s reference to extension_linker_flags should either:
Be optional (and default to an empty list) if not defined in the Python toolchain, or
Be included as a recognized parameter in system_python_toolchain.
Additional context
Buck2 version: (please fill in or “latest stable at time of writing”).
Platform: e.g. Ubuntu 22.04, macOS 13.x, etc.
The mismatch between cxx_python_extension.bzl (which uses python_toolchain.extension_linker_flags) and system_python_toolchain (which does not define that field) breaks the default usage scenario.
Workarounds include creating a custom Python toolchain that defines extension_linker_flags, or patching cxx_python_extension to default to an empty list if the field is None.
Proposed fix
Option A: Update cxx_python_extension to handle None gracefully, e.g.:
extra_link_flags = python_toolchain.extension_linker_flags or []
Option B: Modify system_python_toolchain so it always provides (or allows specifying) extension_linker_flags, defaulting to [].
Option C: Remove or conditionally skip the code that references extension_linker_flags if it’s not set.
Thank you for taking a look at this!
The text was updated successfully, but these errors were encountered:
Summary
When using the built-in cxx_python_extension rule and the default system_python_toolchain, Buck2 fails during analysis because the rule references a field (extension_linker_flags) that the standard Python toolchain does not define. This leads to a type error (NoneType vs. list) whenever cxx_python_extension tries to read extension_linker_flags.
Steps to reproduce
Create a minimal BUCK2 project with a simple cxx_python_extension target and the default “system” Python toolchain:
In toolchains//BUCK (or wherever the system python toolchain is declared), define:
Run buck2 build //path/to:my_python_extension.
Observed behavior
Buck2 fails with an error similar to:
If we try to fix this by passing extension_linker_flags = [] into system_python_toolchain, Buck2 immediately complains:
Found
extension_linker_flags
extra named parameter(s) for call to system_python_toolchainindicating that system_python_toolchain does not accept or define that parameter.
Expected behavior
According to Buck2’s documentation, a simple cxx_python_extension target should “just work” out of the box with no special configuration. The rule’s reference to extension_linker_flags should either:
Be optional (and default to an empty list) if not defined in the Python toolchain, or
Be included as a recognized parameter in system_python_toolchain.
Additional context
Buck2 version: (please fill in or “latest stable at time of writing”).
Platform: e.g. Ubuntu 22.04, macOS 13.x, etc.
The mismatch between cxx_python_extension.bzl (which uses python_toolchain.extension_linker_flags) and system_python_toolchain (which does not define that field) breaks the default usage scenario.
Workarounds include creating a custom Python toolchain that defines extension_linker_flags, or patching cxx_python_extension to default to an empty list if the field is None.
Proposed fix
Option A: Update cxx_python_extension to handle None gracefully, e.g.:
extra_link_flags = python_toolchain.extension_linker_flags or []
Option B: Modify system_python_toolchain so it always provides (or allows specifying) extension_linker_flags, defaulting to [].
Option C: Remove or conditionally skip the code that references extension_linker_flags if it’s not set.
Thank you for taking a look at this!
The text was updated successfully, but these errors were encountered: