From b9e90946797c46f13ee0d0236f03c31eda266a44 Mon Sep 17 00:00:00 2001 From: Austin Schuh Date: Sat, 16 Aug 2025 23:06:40 -0700 Subject: [PATCH 1/5] [bazel] Use script based python bootstrapping This fixes issues found building AOS with import paths --- .bazelrc | 3 +++ hal/generate_nanopb.py | 5 ++--- wpimath/generate_nanopb.py | 4 ++-- wpiutil/generate_nanopb.py | 5 ++--- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.bazelrc b/.bazelrc index bedd56544a2..ec1cb754a3c 100644 --- a/.bazelrc +++ b/.bazelrc @@ -72,3 +72,6 @@ common:ci --repo_env="WPI_PUBLISH_CLASSIFIER_FILTER=headers,sources,linuxsystemc # Instead, skip the cross transition for ARM on x86, and the reverse on x86. common:ci_windows_x86 --repo_env="WPI_PUBLISH_CLASSIFIER_FILTER=headers,sources,linuxsystemcore,linuxsystemcoredebug,linuxsystemcorestatic,linuxsystemcorestaticdebug,linuxx86-64,linuxx86-64debug,linuxx86-64static,linuxx86-64staticdebug,osxuniversal,osxuniversaldebug,osxuniversalstatic,osxuniversalstaticdebug,windowsx86-64,windowsx86-64debug,windowsx86-64static,windowsx86-64staticdebug" common:ci_windows_arm --repo_env="WPI_PUBLISH_CLASSIFIER_FILTER=headers,sources,linuxsystemcore,linuxsystemcoredebug,linuxsystemcorestatic,linuxsystemcorestaticdebug,linuxx86-64,linuxx86-64debug,linuxx86-64static,linuxx86-64staticdebug,osxuniversal,osxuniversaldebug,osxuniversalstatic,osxuniversalstaticdebug,windowsarm64,windowsarm64debug,windowsarm64static,windowsarm64staticdebug" + +build --@rules_python//python/config_settings:bootstrap_impl=script +build --@rules_python//python/config_settings:venvs_use_declare_symlink=no diff --git a/hal/generate_nanopb.py b/hal/generate_nanopb.py index 47e9898f750..680ffe84538 100644 --- a/hal/generate_nanopb.py +++ b/hal/generate_nanopb.py @@ -19,9 +19,8 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): proto_files = proto_dir.glob("*.proto") for path in proto_files: absolute_filename = path.absolute() - subprocess.run( + subprocess.check_call( [ - sys.executable, nanopb, f"-I{absolute_filename.parent}", f"-D{output_directory.absolute()}", @@ -29,7 +28,7 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): "-e.npb", absolute_filename, ], - check=True, + env={"TMPDIR": os.environ["TMPDIR"]}, ) java_files = (output_directory).glob("*") for java_file in java_files: diff --git a/wpimath/generate_nanopb.py b/wpimath/generate_nanopb.py index d8bf6d5b776..a2c39d5b1af 100755 --- a/wpimath/generate_nanopb.py +++ b/wpimath/generate_nanopb.py @@ -21,14 +21,14 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): absolute_filename = path.absolute() subprocess.check_call( [ - sys.executable, nanopb, f"-I{absolute_filename.parent}", f"-D{output_directory.absolute()}", "-S.cpp", "-e.npb", absolute_filename, - ] + ], + env={"TMPDIR": os.environ["TMPDIR"]}, ) java_files = (output_directory).glob("*") for java_file in java_files: diff --git a/wpiutil/generate_nanopb.py b/wpiutil/generate_nanopb.py index f514b5d2b6f..265ffe72c25 100755 --- a/wpiutil/generate_nanopb.py +++ b/wpiutil/generate_nanopb.py @@ -19,9 +19,8 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): proto_files = proto_dir.glob("*.proto") for path in proto_files: absolute_filename = path.absolute() - subprocess.run( + subprocess.check_call( [ - sys.executable, nanopb, f"-I{absolute_filename.parent}", f"-D{output_directory.absolute()}", @@ -29,7 +28,7 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): "-e.npb", absolute_filename, ], - check=True, + env={"TMPDIR": os.environ["TMPDIR"]}, ) java_files = (output_directory).glob("*") for java_file in java_files: From 16984c7168e65ceac3309e3de65d04cd65469cff Mon Sep 17 00:00:00 2001 From: Austin Schuh Date: Sun, 17 Aug 2025 13:52:28 -0700 Subject: [PATCH 2/5] Make it work for both bazel and not --- hal/generate_nanopb.py | 4 +++- wpimath/generate_nanopb.py | 4 +++- wpiutil/generate_nanopb.py | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/hal/generate_nanopb.py b/hal/generate_nanopb.py index 680ffe84538..8aaebb5774d 100644 --- a/hal/generate_nanopb.py +++ b/hal/generate_nanopb.py @@ -17,6 +17,8 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): os.makedirs(output_directory.absolute()) proto_files = proto_dir.glob("*.proto") + env = {x: os.environ[x] for x in ["TMPDIR", "PATH"] if x in os.environ} + for path in proto_files: absolute_filename = path.absolute() subprocess.check_call( @@ -28,7 +30,7 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): "-e.npb", absolute_filename, ], - env={"TMPDIR": os.environ["TMPDIR"]}, + env=env, ) java_files = (output_directory).glob("*") for java_file in java_files: diff --git a/wpimath/generate_nanopb.py b/wpimath/generate_nanopb.py index a2c39d5b1af..4b318d12b6c 100755 --- a/wpimath/generate_nanopb.py +++ b/wpimath/generate_nanopb.py @@ -17,6 +17,8 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): os.makedirs(output_directory.absolute()) proto_files = proto_dir.glob("*.proto") + env = {x: os.environ[x] for x in ["TMPDIR", "PATH"] if x in os.environ} + for path in proto_files: absolute_filename = path.absolute() subprocess.check_call( @@ -28,7 +30,7 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): "-e.npb", absolute_filename, ], - env={"TMPDIR": os.environ["TMPDIR"]}, + env=env, ) java_files = (output_directory).glob("*") for java_file in java_files: diff --git a/wpiutil/generate_nanopb.py b/wpiutil/generate_nanopb.py index 265ffe72c25..7c94ad9b3e9 100755 --- a/wpiutil/generate_nanopb.py +++ b/wpiutil/generate_nanopb.py @@ -17,6 +17,8 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): os.makedirs(output_directory.absolute()) proto_files = proto_dir.glob("*.proto") + env = {x: os.environ[x] for x in ["TMPDIR", "PATH"] if x in os.environ} + for path in proto_files: absolute_filename = path.absolute() subprocess.check_call( @@ -28,7 +30,7 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): "-e.npb", absolute_filename, ], - env={"TMPDIR": os.environ["TMPDIR"]}, + env=env, ) java_files = (output_directory).glob("*") for java_file in java_files: From ab1d5ef6ab44425672afa2dcb85f8bcba31019ce Mon Sep 17 00:00:00 2001 From: Austin Schuh Date: Sun, 17 Aug 2025 13:56:31 -0700 Subject: [PATCH 3/5] Run under python for python scripts --- hal/generate_nanopb.py | 1 + wpimath/generate_nanopb.py | 1 + wpiutil/generate_nanopb.py | 1 + 3 files changed, 3 insertions(+) diff --git a/hal/generate_nanopb.py b/hal/generate_nanopb.py index 8aaebb5774d..379e33ffaea 100644 --- a/hal/generate_nanopb.py +++ b/hal/generate_nanopb.py @@ -22,6 +22,7 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): for path in proto_files: absolute_filename = path.absolute() subprocess.check_call( + ([sys.executable] if nanopb.endswith(".py") else []) + [ nanopb, f"-I{absolute_filename.parent}", diff --git a/wpimath/generate_nanopb.py b/wpimath/generate_nanopb.py index 4b318d12b6c..476d40f0241 100755 --- a/wpimath/generate_nanopb.py +++ b/wpimath/generate_nanopb.py @@ -22,6 +22,7 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): for path in proto_files: absolute_filename = path.absolute() subprocess.check_call( + ([sys.executable] if nanopb.endswith(".py") else []) + [ nanopb, f"-I{absolute_filename.parent}", diff --git a/wpiutil/generate_nanopb.py b/wpiutil/generate_nanopb.py index 7c94ad9b3e9..f23e7ddaf81 100755 --- a/wpiutil/generate_nanopb.py +++ b/wpiutil/generate_nanopb.py @@ -22,6 +22,7 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): for path in proto_files: absolute_filename = path.absolute() subprocess.check_call( + ([sys.executable] if nanopb.endswith(".py") else []) + [ nanopb, f"-I{absolute_filename.parent}", From 3ec6197bb07da72a48697c79017c014d5d301c43 Mon Sep 17 00:00:00 2001 From: Austin Schuh Date: Sun, 17 Aug 2025 14:00:20 -0700 Subject: [PATCH 4/5] format --- hal/generate_nanopb.py | 4 ++-- wpimath/generate_nanopb.py | 4 ++-- wpiutil/generate_nanopb.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hal/generate_nanopb.py b/hal/generate_nanopb.py index 379e33ffaea..07ca5453c1c 100644 --- a/hal/generate_nanopb.py +++ b/hal/generate_nanopb.py @@ -22,8 +22,8 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): for path in proto_files: absolute_filename = path.absolute() subprocess.check_call( - ([sys.executable] if nanopb.endswith(".py") else []) + - [ + ([sys.executable] if nanopb.endswith(".py") else []) + + [ nanopb, f"-I{absolute_filename.parent}", f"-D{output_directory.absolute()}", diff --git a/wpimath/generate_nanopb.py b/wpimath/generate_nanopb.py index 476d40f0241..4d77d0c50bc 100755 --- a/wpimath/generate_nanopb.py +++ b/wpimath/generate_nanopb.py @@ -22,8 +22,8 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): for path in proto_files: absolute_filename = path.absolute() subprocess.check_call( - ([sys.executable] if nanopb.endswith(".py") else []) + - [ + ([sys.executable] if nanopb.endswith(".py") else []) + + [ nanopb, f"-I{absolute_filename.parent}", f"-D{output_directory.absolute()}", diff --git a/wpiutil/generate_nanopb.py b/wpiutil/generate_nanopb.py index f23e7ddaf81..3140587de41 100755 --- a/wpiutil/generate_nanopb.py +++ b/wpiutil/generate_nanopb.py @@ -22,8 +22,8 @@ def generate_nanopb(nanopb: Path, output_directory: Path, proto_dir: Path): for path in proto_files: absolute_filename = path.absolute() subprocess.check_call( - ([sys.executable] if nanopb.endswith(".py") else []) + - [ + ([sys.executable] if nanopb.endswith(".py") else []) + + [ nanopb, f"-I{absolute_filename.parent}", f"-D{output_directory.absolute()}", From 37a93b2b0ec80e90baf9c5a7d691400ee35a2971 Mon Sep 17 00:00:00 2001 From: Austin Schuh Date: Sun, 17 Aug 2025 16:55:14 -0700 Subject: [PATCH 5/5] Upgrade dependencies --- WORKSPACE | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index ddcfe205018..0403be5939d 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -42,18 +42,18 @@ http_archive( http_archive( name = "rules_pkg", - sha256 = "cad05f864a32799f6f9022891de91ac78f30e0fa07dc68abac92a628121b5b11", + sha256 = "b7215c636f22c1849f1c3142c72f4b954bb12bb8dcf3cbe229ae6e69cc6479db", urls = [ - "https://github.com/bazelbuild/rules_pkg/releases/download/1.0.0/rules_pkg-1.0.0.tar.gz", + "https://github.com/bazelbuild/rules_pkg/releases/download/1.1.0/rules_pkg-1.1.0.tar.gz", ], ) # Rules Python http_archive( name = "rules_python", - sha256 = "9f9f3b300a9264e4c77999312ce663be5dee9a56e361a1f6fe7ec60e1beef9a3", - strip_prefix = "rules_python-1.4.1", - url = "https://github.com/bazel-contrib/rules_python/releases/download/1.4.1/rules_python-1.4.1.tar.gz", + sha256 = "0a1cefefb4a7b550fb0b43f54df67d6da95b7ba352637669e46c987f69986f6a", + strip_prefix = "rules_python-1.5.3", + url = "https://github.com/bazel-contrib/rules_python/releases/download/1.5.3/rules_python-1.5.3.tar.gz", ) # Download Extra java rules