Skip to content

Commit 91b0580

Browse files
committed
Added flag_values for free_threading argument to point to correct paths of the headers and the library.
1 parent 9c3d303 commit 91b0580

File tree

4 files changed

+44
-12
lines changed

4 files changed

+44
-12
lines changed

python/config_settings/BUILD.bazel

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,13 @@ string_flag(
169169
define_pypi_internal_flags(
170170
name = "define_pypi_internal_flags",
171171
)
172+
173+
string_flag(
174+
name = "free_threading",
175+
build_setting_default = "",
176+
values = [
177+
"yes",
178+
"no",
179+
],
180+
visibility = ["//visibility:public"],
181+
)

python/private/hermetic_runtime_repo_setup.bzl

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ def define_hermetic_runtime_toolchain_impl(
2727
extra_files_glob_exclude,
2828
python_version,
2929
python_bin,
30-
coverage_tool):
30+
coverage_tool,
31+
free_threading = False):
3132
"""Define a toolchain implementation for a python-build-standalone repo.
3233
3334
It expected this macro is called in the top-level package of an extracted
@@ -44,13 +45,17 @@ def define_hermetic_runtime_toolchain_impl(
4445
python_version: {type}`str` The Python version, in `major.minor.micro`
4546
format.
4647
python_bin: {type}`str` The path to the Python binary within the
47-
repositoroy.
48+
repository.
4849
coverage_tool: {type}`str` optional target to the coverage tool to
4950
use.
51+
free_threading: {type}`bool` optional free-threading support.
52+
Default, False.
5053
"""
5154
_ = name # @unused
5255
version_info = semver(python_version)
5356
version_dict = version_info.to_dict()
57+
version_dict["ft_postfix"] = "t" if free_threading else ""
58+
5459
native.filegroup(
5560
name = "files",
5661
srcs = native.glob(
@@ -67,19 +72,19 @@ def define_hermetic_runtime_toolchain_impl(
6772
"**/* *", # Bazel does not support spaces in file names.
6873
# Unused shared libraries. `python` executable and the `:libpython` target
6974
# depend on `libpython{python_version}.so.1.0`.
70-
"lib/libpython{major}.{minor}.so".format(**version_dict),
75+
"lib/libpython{major}.{minor}{ft_postfix}.so".format(**version_dict),
7176
# static libraries
7277
"lib/**/*.a",
7378
# tests for the standard libraries.
74-
"lib/python{major}.{minor}/**/test/**".format(**version_dict),
75-
"lib/python{major}.{minor}/**/tests/**".format(**version_dict),
79+
"lib/python{major}.{minor}{ft_postfix}/**/test/**".format(**version_dict),
80+
"lib/python{major}.{minor}{ft_postfix}/**/tests/**".format(**version_dict),
7681
"**/__pycache__/*.pyc.*", # During pyc creation, temp files named *.pyc.NNN are created
7782
] + extra_files_glob_exclude,
7883
),
7984
)
8085
cc_import(
8186
name = "interface",
82-
interface_library = "libs/python{major}{minor}.lib".format(**version_dict),
87+
interface_library = "libs/python{major}{minor}{ft_postfix}.lib".format(**version_dict),
8388
system_provided = True,
8489
)
8590

@@ -96,7 +101,7 @@ def define_hermetic_runtime_toolchain_impl(
96101
hdrs = [":includes"],
97102
includes = [
98103
"include",
99-
"include/python{major}.{minor}".format(**version_dict),
104+
"include/python{major}.{minor}{ft_postfix}".format(**version_dict),
100105
"include/python{major}.{minor}m".format(**version_dict),
101106
],
102107
)
@@ -105,11 +110,11 @@ def define_hermetic_runtime_toolchain_impl(
105110
hdrs = [":includes"],
106111
srcs = select({
107112
"@platforms//os:linux": [
108-
"lib/libpython{major}.{minor}.so".format(**version_dict),
109-
"lib/libpython{major}.{minor}.so.1.0".format(**version_dict),
113+
"lib/libpython{major}.{minor}{ft_postfix}.so".format(**version_dict),
114+
"lib/libpython{major}.{minor}{ft_postfix}.so.1.0".format(**version_dict),
110115
],
111-
"@platforms//os:macos": ["lib/libpython{major}.{minor}.dylib".format(**version_dict)],
112-
"@platforms//os:windows": ["python3.dll", "libs/python{major}{minor}.lib".format(**version_dict)],
116+
"@platforms//os:macos": ["lib/libpython{major}.{minor}{ft_postfix}.dylib".format(**version_dict)],
117+
"@platforms//os:windows": ["python3.dll", "libs/python{major}{minor}{ft_postfix}.lib".format(**version_dict)],
113118
}),
114119
)
115120

python/private/python_register_toolchains.bzl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,12 @@ def python_register_toolchains(
129129
)],
130130
)
131131

132+
flag_values = tool_versions[python_version].get("flag_values", None)
133+
free_threading_label = str(Label("//python/config_settings:free_threading"))
134+
free_threading = False
135+
if flag_values:
136+
free_threading = flag_values.get(free_threading_label, False) == "yes"
137+
132138
python_repository(
133139
name = "{name}_{platform}".format(
134140
name = name,
@@ -143,6 +149,7 @@ def python_register_toolchains(
143149
urls = urls,
144150
strip_prefix = strip_prefix,
145151
coverage_tool = coverage_tool,
152+
free_threading = free_threading,
146153
**kwargs
147154
)
148155
if register_toolchains:

python/private/python_repository.bzl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ def _python_repository_impl(rctx):
6868
urls = rctx.attr.urls or [rctx.attr.url]
6969
auth = get_auth(rctx, urls)
7070

71+
# TODO: get free_threading from flag_values
72+
free_threading = rctx.attr.free_threading
73+
7174
if release_filename.endswith(".zst"):
7275
rctx.download(
7376
url = urls,
@@ -130,7 +133,8 @@ def _python_repository_impl(rctx):
130133
if "windows" in platform:
131134
distutils_path = "Lib/distutils/distutils.cfg"
132135
else:
133-
distutils_path = "lib/python{}/distutils/distutils.cfg".format(python_short_version)
136+
ft_postfix = "t" if free_threading else ""
137+
distutils_path = "lib/python{}{}/distutils/distutils.cfg".format(python_short_version, ft_postfix)
134138
if rctx.attr.distutils:
135139
rctx.file(distutils_path, rctx.read(rctx.attr.distutils))
136140
elif rctx.attr.distutils_content:
@@ -255,13 +259,15 @@ define_hermetic_runtime_toolchain_impl(
255259
python_version = {python_version},
256260
python_bin = {python_bin},
257261
coverage_tool = {coverage_tool},
262+
free_threading = {free_threading},
258263
)
259264
""".format(
260265
extra_files_glob_exclude = render.list(glob_exclude),
261266
extra_files_glob_include = render.list(glob_include),
262267
python_bin = render.str(python_bin),
263268
python_version = render.str(rctx.attr.python_version),
264269
coverage_tool = render.str(coverage_tool),
270+
free_threading = free_threading,
265271
)
266272
rctx.delete("python")
267273
rctx.symlink(python_bin, "python")
@@ -321,6 +327,10 @@ For more information see {attr}`py_runtime.coverage_tool`.
321327
"Either distutils or distutils_content can be specified, but not both.",
322328
mandatory = False,
323329
),
330+
"free_threading": attr.bool(
331+
doc = "TODO",
332+
default = False,
333+
),
324334
"ignore_root_user_error": attr.bool(
325335
default = False,
326336
doc = "Whether the check for root should be ignored or not. This causes cache misses with .pyc files.",

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy