Use a (mostly) hermetic Python interpreter
It still requires python to be installed on the host to run the wrapper
scripts, but it's close to being fully hermetic.
This also requires/enables the following changes, unfortunately all at
the same time:
* Use a downloaded f2py
* Use a downloaded scipy/numpy/matplotlib
* Fix a few things that don't run with the python version in their #!
* Stop using bazel-generated __init__.py files, because those interfere
with importing matplotlib nicely
Change-Id: Ife280464613d67cece9587b7d947f0b1d5466d7e
diff --git a/y2014/BUILD b/y2014/BUILD
index 9b27015..a57bb72 100644
--- a/y2014/BUILD
+++ b/y2014/BUILD
@@ -1,115 +1,121 @@
-load('//aos/downloader:downloader.bzl', 'aos_downloader')
+load("//aos/downloader:downloader.bzl", "aos_downloader")
cc_library(
- name = 'constants',
- visibility = ['//visibility:public'],
- srcs = [
- 'constants.cc',
- ],
- hdrs = [
- 'constants.h',
- ],
- deps = [
- '//aos/common/logging',
- '//aos:once',
- '//aos/common/network:team_number',
- '//aos/common:mutex',
- '//frc971/control_loops:state_feedback_loop',
- '//y2014/control_loops/drivetrain:polydrivetrain_plants',
- '//frc971:shifter_hall_effect',
- ],
+ name = "constants",
+ srcs = [
+ "constants.cc",
+ ],
+ hdrs = [
+ "constants.h",
+ ],
+ visibility = ["//visibility:public"],
+ deps = [
+ "//aos:once",
+ "//aos/common:mutex",
+ "//aos/common/logging",
+ "//aos/common/network:team_number",
+ "//frc971:shifter_hall_effect",
+ "//frc971/control_loops:state_feedback_loop",
+ "//y2014/control_loops/drivetrain:polydrivetrain_plants",
+ ],
)
cc_binary(
- name = 'joystick_reader',
- srcs = [
- 'joystick_reader.cc',
- ],
- deps = [
- ':constants',
- '//aos/input:joystick_input',
- '//aos/linux_code:init',
- '//aos/common/logging',
- '//aos/common:time',
- '//aos/common/util:log_interval',
- '//aos/common/actions:action_lib',
- '//frc971/control_loops/drivetrain:drivetrain_queue',
- '//frc971/queues:gyro',
- '//frc971/autonomous:auto_queue',
- '//y2014/control_loops/claw:claw_queue',
- '//y2014/control_loops/shooter:shooter_queue',
- '//y2014/actors:shoot_action_lib',
- ],
+ name = "joystick_reader",
+ srcs = [
+ "joystick_reader.cc",
+ ],
+ deps = [
+ ":constants",
+ "//aos/common:time",
+ "//aos/common/actions:action_lib",
+ "//aos/common/logging",
+ "//aos/common/util:log_interval",
+ "//aos/input:joystick_input",
+ "//aos/linux_code:init",
+ "//frc971/autonomous:auto_queue",
+ "//frc971/control_loops/drivetrain:drivetrain_queue",
+ "//frc971/queues:gyro",
+ "//y2014/actors:shoot_action_lib",
+ "//y2014/control_loops/claw:claw_queue",
+ "//y2014/control_loops/shooter:shooter_queue",
+ ],
)
aos_downloader(
- name = 'download',
- start_srcs = [
- ':hot_goal_reader',
- ':joystick_reader',
- ':wpilib_interface',
- '//y2014/control_loops/drivetrain:drivetrain',
- '//y2014/control_loops/claw:claw',
- '//y2014/control_loops/shooter:shooter',
- '//y2014/autonomous:auto',
- '//y2014/actors:binaries',
- '//aos:prime_start_binaries',
- ],
- srcs = [
- '//aos:prime_binaries',
- ],
- restricted_to = ['//tools:roborio'],
+ name = "download",
+ srcs = [
+ "//aos:prime_binaries",
+ ],
+ restricted_to = ["//tools:roborio"],
+ start_srcs = [
+ ":hot_goal_reader",
+ ":joystick_reader",
+ ":wpilib_interface",
+ "//y2014/control_loops/drivetrain:drivetrain",
+ "//y2014/control_loops/claw:claw",
+ "//y2014/control_loops/shooter:shooter",
+ "//y2014/autonomous:auto",
+ "//y2014/actors:binaries",
+ "//aos:prime_start_binaries",
+ ],
)
cc_binary(
- name = 'hot_goal_reader',
- srcs = [
- 'hot_goal_reader.cc',
- ],
- deps = [
- '//aos/common:time',
- '//aos/common/logging',
- '//aos/common/logging:queue_logging',
- '//aos/linux_code:init',
- '//y2014/queues:hot_goal',
- ],
+ name = "hot_goal_reader",
+ srcs = [
+ "hot_goal_reader.cc",
+ ],
+ deps = [
+ "//aos/common:time",
+ "//aos/common/logging",
+ "//aos/common/logging:queue_logging",
+ "//aos/linux_code:init",
+ "//y2014/queues:hot_goal",
+ ],
)
cc_binary(
- name = 'wpilib_interface',
- srcs = [
- 'wpilib_interface.cc',
- ],
- deps = [
- ':constants',
- '//aos/linux_code:init',
- '//aos/common:stl_mutex',
- '//aos/common/logging',
- '//third_party:wpilib',
- '//y2014/queues:auto_mode',
- '//frc971/control_loops/drivetrain:drivetrain_queue',
- '//y2014/control_loops/shooter:shooter_queue',
- '//y2014/control_loops/claw:claw_queue',
- '//aos/common/controls:control_loop',
- '//aos/common/util:log_interval',
- '//aos/common:time',
- '//aos/common/logging:queue_logging',
- '//aos/common/messages:robot_state',
- '//aos/common/util:phased_loop',
- '//aos/common/util:wrapping_counter',
- '//frc971/wpilib:joystick_sender',
- '//frc971/wpilib:loop_output_handler',
- '//frc971/wpilib:buffered_pcm',
- '//frc971/wpilib:gyro_sender',
- '//frc971/wpilib:dma_edge_counting',
- '//frc971/wpilib:interrupt_edge_counting',
- '//frc971/wpilib:wpilib_robot_base',
- '//frc971/wpilib:encoder_and_potentiometer',
- '//frc971/control_loops:queues',
- '//frc971/wpilib:logging_queue',
- '//frc971/wpilib:wpilib_interface',
- '//frc971/wpilib:pdp_fetcher',
- '//frc971/wpilib:dma',
- ],
- restricted_to = ['//tools:roborio'],
+ name = "wpilib_interface",
+ srcs = [
+ "wpilib_interface.cc",
+ ],
+ restricted_to = ["//tools:roborio"],
+ deps = [
+ ":constants",
+ "//aos/common:stl_mutex",
+ "//aos/common:time",
+ "//aos/common/controls:control_loop",
+ "//aos/common/logging",
+ "//aos/common/logging:queue_logging",
+ "//aos/common/messages:robot_state",
+ "//aos/common/util:log_interval",
+ "//aos/common/util:phased_loop",
+ "//aos/common/util:wrapping_counter",
+ "//aos/linux_code:init",
+ "//frc971/control_loops:queues",
+ "//frc971/control_loops/drivetrain:drivetrain_queue",
+ "//frc971/wpilib:buffered_pcm",
+ "//frc971/wpilib:dma",
+ "//frc971/wpilib:dma_edge_counting",
+ "//frc971/wpilib:encoder_and_potentiometer",
+ "//frc971/wpilib:gyro_sender",
+ "//frc971/wpilib:interrupt_edge_counting",
+ "//frc971/wpilib:joystick_sender",
+ "//frc971/wpilib:logging_queue",
+ "//frc971/wpilib:loop_output_handler",
+ "//frc971/wpilib:pdp_fetcher",
+ "//frc971/wpilib:wpilib_interface",
+ "//frc971/wpilib:wpilib_robot_base",
+ "//third_party:wpilib",
+ "//y2014/control_loops/claw:claw_queue",
+ "//y2014/control_loops/shooter:shooter_queue",
+ "//y2014/queues:auto_mode",
+ ],
+)
+
+py_library(
+ name = "python_init",
+ srcs = ["__init__.py"],
+ visibility = ["//visibility:public"],
)
diff --git a/y2014/__init__.py b/y2014/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/y2014/__init__.py
diff --git a/y2014/control_loops/BUILD b/y2014/control_loops/BUILD
new file mode 100644
index 0000000..995a4c7
--- /dev/null
+++ b/y2014/control_loops/BUILD
@@ -0,0 +1,6 @@
+py_library(
+ name = "python_init",
+ srcs = ["__init__.py"],
+ visibility = ["//visibility:public"],
+ deps = ["//y2014:python_init"],
+)
diff --git a/y2014/control_loops/__init__.py b/y2014/control_loops/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/y2014/control_loops/__init__.py
diff --git a/y2014/control_loops/python/BUILD b/y2014/control_loops/python/BUILD
index 00dfda1..5216eb9 100644
--- a/y2014/control_loops/python/BUILD
+++ b/y2014/control_loops/python/BUILD
@@ -1,84 +1,104 @@
-package(default_visibility = ['//y2014:__subpackages__'])
+package(default_visibility = ["//y2014:__subpackages__"])
py_binary(
- name = 'drivetrain',
- srcs = [
- 'drivetrain.py',
- ],
- deps = [
- '//external:python-gflags',
- '//external:python-glog',
- '//frc971/control_loops/python:drivetrain',
- ],
- restricted_to = ['//tools:k8'],
+ name = "drivetrain",
+ srcs = [
+ "drivetrain.py",
+ ],
+ legacy_create_init = False,
+ restricted_to = ["//tools:k8"],
+ deps = [
+ ":python_init",
+ "//external:python-gflags",
+ "//external:python-glog",
+ "//frc971/control_loops/python:drivetrain",
+ ],
)
py_binary(
- name = 'polydrivetrain',
- srcs = [
- 'polydrivetrain.py',
- 'drivetrain.py',
- ],
- deps = [
- '//external:python-gflags',
- '//external:python-glog',
- '//frc971/control_loops/python:polydrivetrain',
- ],
- restricted_to = ['//tools:k8'],
+ name = "polydrivetrain",
+ srcs = [
+ "drivetrain.py",
+ "polydrivetrain.py",
+ ],
+ legacy_create_init = False,
+ restricted_to = ["//tools:k8"],
+ deps = [
+ ":python_init",
+ "//external:python-gflags",
+ "//external:python-glog",
+ "//frc971/control_loops/python:polydrivetrain",
+ ],
)
py_library(
- name = 'polydrivetrain_lib',
- srcs = [
- 'polydrivetrain.py',
- 'drivetrain.py',
- ],
- deps = [
- '//external:python-gflags',
- '//external:python-glog',
- '//frc971/control_loops/python:controls',
- '//frc971/control_loops/python:drivetrain',
- '//frc971/control_loops/python:polydrivetrain',
- ],
- restricted_to = ['//tools:k8'],
+ name = "polydrivetrain_lib",
+ srcs = [
+ "drivetrain.py",
+ "polydrivetrain.py",
+ ],
+ restricted_to = ["//tools:k8"],
+ deps = [
+ "//external:python-gflags",
+ "//external:python-glog",
+ "//frc971/control_loops/python:controls",
+ "//frc971/control_loops/python:drivetrain",
+ "//frc971/control_loops/python:polydrivetrain",
+ ],
)
py_binary(
- name = 'claw',
- srcs = [
- 'claw.py',
- ],
- deps = [
- ':polydrivetrain_lib',
- '//external:python-gflags',
- '//external:python-glog',
- '//frc971/control_loops/python:controls',
- ],
- restricted_to = ['//tools:k8'],
+ name = "claw",
+ srcs = [
+ "claw.py",
+ ],
+ legacy_create_init = False,
+ restricted_to = ["//tools:k8"],
+ deps = [
+ ":polydrivetrain_lib",
+ ":python_init",
+ "//external:python-gflags",
+ "//external:python-glog",
+ "//frc971/control_loops/python:controls",
+ "@matplotlib",
+ ],
)
py_binary(
- name = 'shooter',
- srcs = [
- 'shooter.py',
- ],
- deps = [
- '//external:python-gflags',
- '//external:python-glog',
- '//frc971/control_loops/python:controls',
- ],
- restricted_to = ['//tools:k8'],
+ name = "shooter",
+ srcs = [
+ "shooter.py",
+ ],
+ legacy_create_init = False,
+ restricted_to = ["//tools:k8"],
+ deps = [
+ ":python_init",
+ "//external:python-gflags",
+ "//external:python-glog",
+ "//frc971/control_loops/python:controls",
+ "@matplotlib",
+ ],
)
py_binary(
- name = 'extended_lqr',
- srcs = [
- 'extended_lqr.py',
- ],
- deps = [
- '//external:python-gflags',
- '//external:python-glog',
- '//frc971/control_loops/python:controls',
- ],
- restricted_to = ['//tools:k8'],
+ name = "extended_lqr",
+ srcs = [
+ "extended_lqr.py",
+ ],
+ legacy_create_init = False,
+ restricted_to = ["//tools:k8"],
+ deps = [
+ ":python_init",
+ "//external:python-gflags",
+ "//external:python-glog",
+ "//frc971/control_loops/python:controls",
+ "@matplotlib",
+ ],
+)
+
+py_library(
+ name = "python_init",
+ srcs = ["__init__.py"],
+ visibility = ["//visibility:public"],
+ deps = ["//y2014/control_loops:python_init"],
)
diff --git a/y2014/control_loops/python/__init__.py b/y2014/control_loops/python/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/y2014/control_loops/python/__init__.py