Add BUILD files for IMU board
Change-Id: I5437972c594ecd3ebeb24d9b9b96f2801b405021
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/.bazelrc b/.bazelrc
index d53360f..9ff6c55 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -31,6 +31,8 @@
build:cortex-m4f --platform_suffix=-cortex-m4f
build:rp2040 --platforms=//tools/platforms:rp2040
build:rp2040 --platform_suffix=-rp2040
+build:cortex-m4f-imu --platforms=//tools/platforms:cortex-m4f-imu
+build:cortex-m4f-imu --platform_suffix=-cortex-m4f-imu
build:asan --copt -fsanitize=address
build:asan --linkopt -fsanitize=address --linkopt -ldl
diff --git a/WORKSPACE b/WORKSPACE
index 3b2eb57..7809594 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -351,6 +351,7 @@
"//tools/cpp:cc-toolchain-roborio",
"//tools/cpp:cc-toolchain-cortex-m4f",
"//tools/cpp:cc-toolchain-rp2040",
+ "//tools/cpp:cc-toolchain-cortex-m4f-imu",
# Find a good way to select between these two M4F toolchains.
#"//tools/cpp:cc-toolchain-cortex-m4f-k22",
"//tools/python:python_toolchain",
diff --git a/debian/gstreamer.BUILD b/debian/gstreamer.BUILD
index a9a28ef..a8ed820 100644
--- a/debian/gstreamer.BUILD
+++ b/debian/gstreamer.BUILD
@@ -235,6 +235,7 @@
],
"arm64": [s % "aarch64-linux-gnu" if "%" in s else s for s in _common_srcs_list],
"cortex-m": [],
+ "cortex-m4f-imu": [],
"cortex-m0plus": [],
}),
hdrs = glob([
@@ -256,6 +257,7 @@
"usr/lib/aarch64-linux-gnu/glib-2.0/include",
],
"roborio": [],
+ "cortex-m4f-imu": [],
"cortex-m": [],
"cortex-m0plus": [],
}) + [
diff --git a/frc971/imu_fdcan/BUILD b/frc971/imu_fdcan/BUILD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/frc971/imu_fdcan/BUILD
diff --git a/frc971/imu_fdcan/Dual_IMU/BUILD b/frc971/imu_fdcan/Dual_IMU/BUILD
new file mode 100644
index 0000000..1f53b26
--- /dev/null
+++ b/frc971/imu_fdcan/Dual_IMU/BUILD
@@ -0,0 +1,5 @@
+filegroup(
+ name = "linker_scripts",
+ srcs = glob(["*.ld"]),
+ visibility = ["//visibility:public"],
+)
diff --git a/frc971/imu_fdcan/Dual_IMU/Core/BUILD b/frc971/imu_fdcan/Dual_IMU/Core/BUILD
new file mode 100644
index 0000000..1982395
--- /dev/null
+++ b/frc971/imu_fdcan/Dual_IMU/Core/BUILD
@@ -0,0 +1,58 @@
+load("//motors:macros.bzl", "hex_from_elf")
+load("@aspect_bazel_lib//lib:copy_file.bzl", "copy_file")
+
+copy_file(
+ name = "copy_startup",
+ src = "Startup/startup_stm32g473retx.s",
+ # Path of the output file, relative to this package.
+ out = "Startup/startup_stm32g473retx.S",
+)
+
+cc_library(
+ name = "config",
+ hdrs = ["Inc/stm32g4xx_hal_conf.h"],
+ includes = ["Inc"],
+ target_compatible_with = [
+ "@platforms//os:none",
+ "//tools/platforms/hardware:cortex-m4f-imu",
+ ],
+ visibility = ["//frc971/imu_fdcan:__subpackages__"],
+)
+
+cc_library(
+ name = "startup",
+ srcs = ["Startup/startup_stm32g473retx.S"],
+ copts = [
+ "-x assembler-with-cpp",
+ "-v",
+ ],
+ target_compatible_with = [
+ "@platforms//os:none",
+ "//tools/platforms/hardware:cortex-m4f-imu",
+ ],
+)
+
+cc_binary(
+ name = "main.elf",
+ srcs = glob([
+ "Src/*.c",
+ "Inc/*.h",
+ ]),
+ copts = [
+ "-Wno-unused-variable",
+ "-Wno-unused-but-set-variable",
+ ],
+ includes = ["Inc"],
+ deps = [
+ ":startup",
+ "//frc971/imu_fdcan/Dual_IMU/Drivers/STM32G4xx_HAL_Driver:hal_driver",
+ ],
+)
+
+hex_from_elf(
+ name = "main",
+ target_compatible_with = [
+ "@platforms//os:none",
+ "//tools/platforms/hardware:cortex-m4f-imu",
+ ],
+)
diff --git a/frc971/imu_fdcan/Dual_IMU/Core/Src/main.c b/frc971/imu_fdcan/Dual_IMU/Core/Src/main.c
index 1040fed..98b61d2 100644
--- a/frc971/imu_fdcan/Dual_IMU/Core/Src/main.c
+++ b/frc971/imu_fdcan/Dual_IMU/Core/Src/main.c
@@ -118,7 +118,6 @@
static void ReadDataTdk(void);
static void ConvertDataMurata(void);
static void ConvertDataTdk(void);
-static void ConstructCanfdPacket(uint8_t *tx); // 64 bytes
static void InitCan(FDCAN_TxHeaderTypeDef *tx_header, uint8_t id);
/* USER CODE END PFP */
@@ -1052,15 +1051,6 @@
*
*/
-static void ConstructCanfdPacket(uint8_t *tx) {
- // Clear the CAN packet
- memset(tx, 0, 64 * sizeof(*tx));
-
- // Write in the struct data
- memcpy(&tx[0], &data_murata, sizeof(data_murata));
- memcpy(&tx[sizeof(data_murata)], &data_tdk, sizeof(data_tdk));
-}
-
static void InitCan(FDCAN_TxHeaderTypeDef *tx_header, uint8_t id) {
// Initialize the Header
tx_header->Identifier = id;
diff --git a/frc971/imu_fdcan/Dual_IMU/Drivers/BUILD b/frc971/imu_fdcan/Dual_IMU/Drivers/BUILD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/frc971/imu_fdcan/Dual_IMU/Drivers/BUILD
diff --git a/frc971/imu_fdcan/Dual_IMU/Drivers/CMSIS/BUILD b/frc971/imu_fdcan/Dual_IMU/Drivers/CMSIS/BUILD
new file mode 100644
index 0000000..dfaadf6
--- /dev/null
+++ b/frc971/imu_fdcan/Dual_IMU/Drivers/CMSIS/BUILD
@@ -0,0 +1,17 @@
+cc_library(
+ name = "cmsis",
+ hdrs = glob([
+ "**/*.h",
+ ]),
+ defines = [
+ "STM32G473xx",
+ "STM32G4",
+ "USE_HAL_DRIVER",
+ ],
+ includes = [
+ "Device/ST/STM32G4xx/Include",
+ "Include",
+ ],
+ visibility = ["//frc971/imu_fdcan:__subpackages__"],
+ deps = ["//frc971/imu_fdcan/Dual_IMU/Core:config"],
+)
diff --git a/frc971/imu_fdcan/Dual_IMU/Drivers/STM32G4xx_HAL_Driver/BUILD b/frc971/imu_fdcan/Dual_IMU/Drivers/STM32G4xx_HAL_Driver/BUILD
new file mode 100644
index 0000000..c096515
--- /dev/null
+++ b/frc971/imu_fdcan/Dual_IMU/Drivers/STM32G4xx_HAL_Driver/BUILD
@@ -0,0 +1,15 @@
+cc_library(
+ name = "hal_driver",
+ srcs = glob([
+ "Src/*.c",
+ ]),
+ hdrs = glob([
+ "Inc/**/*.h",
+ ]),
+ includes = ["Inc"],
+ visibility = ["//frc971/imu_fdcan:__subpackages__"],
+ deps = [
+ "//frc971/imu_fdcan/Dual_IMU/Core:config",
+ "//frc971/imu_fdcan/Dual_IMU/Drivers/CMSIS:cmsis",
+ ],
+)
diff --git a/tools/BUILD b/tools/BUILD
index 98e1348..cd98255 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -50,6 +50,11 @@
constraint_values = ["@//tools/platforms/hardware:cortex_m0plus"],
)
+config_setting(
+ name = "cpu_cortex-m4f-imu",
+ constraint_values = ["@//tools/platforms/hardware:cortex-m4f-imu"],
+)
+
# TODO(phil): Re-enable this with proper support.
#config_setting(
# name = "cpu_cortex_m4f_k22",
diff --git a/tools/build_rules/select.bzl b/tools/build_rules/select.bzl
index af18e38..25f6bd6 100644
--- a/tools/build_rules/select.bzl
+++ b/tools/build_rules/select.bzl
@@ -9,6 +9,7 @@
"arm64",
"cortex-m",
"cortex-m0plus",
+ "cortex-m4f-imu",
]
"""All of the CPUs we know about."""
@@ -33,6 +34,7 @@
new_values["roborio"] = values["arm"]
new_values["cortex-m"] = values["arm"]
new_values["cortex-m0plus"] = values["arm"]
+ new_values["cortex-m4f-imu"] = values["arm"]
values = new_values
elif "arm32" in values:
if "arm64" not in values:
@@ -44,6 +46,7 @@
new_values["roborio"] = values["arm32"]
new_values["cortex-m"] = values["arm32"]
new_values["cortex-m0plus"] = values["arm32"]
+ new_values["cortex-m4f-imu"] = values["arm32"]
values = new_values
for cpu in all_cpus:
if cpu not in values:
@@ -60,6 +63,7 @@
"@//tools:cpu_arm64": values["arm64"],
"@//tools:cpu_cortex_m4f": values["cortex-m"],
"@//tools:cpu_cortex_m0plus": values["cortex-m0plus"],
+ "@//tools:cpu_cortex-m4f-imu": values["cortex-m4f-imu"],
# TODO(phil): Support this properly.
#"@//tools:cpu_cortex_m4f_k22": values["cortex-m"],
})
@@ -82,6 +86,7 @@
"@//tools:cpu_roborio": values["32"],
"@//tools:cpu_cortex_m4f": values["32"],
"@//tools:cpu_cortex_m0plus": values["32"],
+ "@//tools:cpu_cortex-m4f-imu": values["32"],
# TODO(phil): Support this properly.
#"@//tools:cpu_cortex_m4f_k22": values["32"],
})
diff --git a/tools/ci/buildkite.yaml b/tools/ci/buildkite.yaml
index 00016b2..7b17c8a 100644
--- a/tools/ci/buildkite.yaml
+++ b/tools/ci/buildkite.yaml
@@ -44,6 +44,11 @@
agents:
queue: "build-no-gpu"
+ - label: "imu"
+ commands:
+ - tools/ci/clean-disk.sh
+ - tools/bazel ${STARTUP} --output_base=../common_output_base build ${COMMON} --config=cortex-m4f-imu ${M4F_TARGETS}
+
- label: "rp2040"
commands:
- tools/ci/clean-disk.sh
diff --git a/tools/cpp/BUILD b/tools/cpp/BUILD
index 5c36559..5b43edc 100644
--- a/tools/cpp/BUILD
+++ b/tools/cpp/BUILD
@@ -16,6 +16,7 @@
"cortex-m4f",
"cortex-m4f-k22",
"rp2040",
+ "cortex-m4f-imu",
"roborio",
]
]
@@ -32,6 +33,7 @@
"//tools:has_asan": [],
"//tools:has_tsan": [],
"//tools:cpu_cortex_m4f": [],
+ "//tools:cpu_cortex-m4f-imu": [],
"//tools:cpu_cortex_m0plus": [],
# TODO(phil): Support this properly.
#"//tools:cpu_cortex_m4f_k22": [],
@@ -161,6 +163,7 @@
filegroup(
name = "gcc_arm_none_eabi_linker_files",
srcs = [
+ "//frc971/imu_fdcan/Dual_IMU:linker_scripts",
"//motors/core:linkerscripts",
"//tools/cpp/gcc_arm_none_eabi:ar",
"//tools/cpp/gcc_arm_none_eabi:gcc",
@@ -206,6 +209,34 @@
)
cc_toolchain(
+ name = "cc-compiler-cortex-m4f-imu",
+ all_files = ":gcc_arm_none_eabi_none_files",
+ ar_files = ":gcc_arm_none_eabi_ar_files",
+ compiler_files = ":gcc_arm_none_eabi_compiler_files",
+ dwp_files = ":empty",
+ linker_files = ":gcc_arm_none_eabi_linker_files",
+ objcopy_files = "//tools/cpp/gcc_arm_none_eabi:objcopy",
+ strip_files = "//tools/cpp/gcc_arm_none_eabi:strip",
+ supports_param_files = 1,
+ toolchain_config = ":cortex-m4f-imu_toolchain_config",
+ toolchain_identifier = "cortex-m4f-imu",
+)
+
+toolchain(
+ name = "cc-toolchain-cortex-m4f-imu",
+ exec_compatible_with = [
+ "@platforms//os:linux",
+ "@platforms//cpu:x86_64",
+ ],
+ target_compatible_with = [
+ "@platforms//os:none",
+ "//tools/platforms/hardware:cortex-m4f-imu",
+ ],
+ toolchain = ":cc-compiler-cortex-m4f-imu",
+ toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
+)
+
+cc_toolchain(
name = "cc-compiler-cortex-m4f",
all_files = ":gcc_arm_none_eabi_none_files",
ar_files = ":gcc_arm_none_eabi_ar_files",
diff --git a/tools/cpp/toolchain_config.bzl b/tools/cpp/toolchain_config.bzl
index 5e320cd..6c37962 100644
--- a/tools/cpp/toolchain_config.bzl
+++ b/tools/cpp/toolchain_config.bzl
@@ -13,6 +13,8 @@
def _impl(ctx):
if ctx.attr.cpu == "rp2040":
toolchain_identifier = "rp2040"
+ elif ctx.attr.cpu == "cortex-m4f-imu":
+ toolchain_identifier = "cortex-m4f-imu"
elif ctx.attr.cpu == "cortex-m4f":
toolchain_identifier = "cortex-m4f"
elif ctx.attr.cpu == "cortex-m4f-k22":
@@ -23,6 +25,7 @@
fail("Unreachable")
if (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22"):
host_system_name = "local"
@@ -33,6 +36,8 @@
if ctx.attr.cpu == "rp2040":
target_system_name = "rp2040"
+ elif ctx.attr.cpu == "cortex-m4f-imu":
+ target_system_name = "cortex-m4f-imu"
elif ctx.attr.cpu == "cortex-m4f":
target_system_name = "cortex-m4f"
elif ctx.attr.cpu == "cortex-m4f-k22":
@@ -44,6 +49,8 @@
if ctx.attr.cpu == "rp2040":
target_cpu = "rp2040"
+ elif ctx.attr.cpu == "cortex-m4f-imu":
+ target_cpu = "cortex-m4f-imu"
elif ctx.attr.cpu == "cortex-m4f":
target_cpu = "cortex-m4f"
elif ctx.attr.cpu == "cortex-m4f-k22":
@@ -55,6 +62,8 @@
if ctx.attr.cpu == "rp2040":
target_libc = "rp2040"
+ elif ctx.attr.cpu == "cortex-m4f-imu":
+ target_libc = "cortex-m4f-imu"
elif ctx.attr.cpu == "cortex-m4f":
target_libc = "cortex-m4f"
elif ctx.attr.cpu == "cortex-m4f-k22":
@@ -65,6 +74,7 @@
fail("Unreachable")
if (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22" or
ctx.attr.cpu == "roborio"):
@@ -74,6 +84,8 @@
if ctx.attr.cpu == "rp2040":
abi_version = "rp2040"
+ elif ctx.attr.cpu == "cortex-m4f-imu":
+ abi_version = "cortex-m4f-imu"
elif ctx.attr.cpu == "cortex-m4f":
abi_version = "cortex-m4f"
elif ctx.attr.cpu == "cortex-m4f-k22":
@@ -85,6 +97,8 @@
if ctx.attr.cpu == "rp2040":
abi_libc_version = "rp2040"
+ elif ctx.attr.cpu == "cortex-m4f-imu":
+ abi_libc_version = "cortex-m4f-imu"
elif ctx.attr.cpu == "cortex-m4f":
abi_libc_version = "cortex-m4f"
elif ctx.attr.cpu == "cortex-m4f-k22":
@@ -124,6 +138,7 @@
],
)
elif (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22"):
objcopy_embed_data_action = action_config(
@@ -135,6 +150,7 @@
objcopy_embed_data_action = None
if (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22" or
ctx.attr.cpu == "roborio"):
@@ -412,6 +428,91 @@
),
],
)
+ elif ctx.attr.cpu == "cortex-m4f-imu":
+ default_compile_flags_feature = feature(
+ name = "default_compile_flags",
+ enabled = True,
+ flag_sets = [
+ flag_set(
+ actions = [
+ ACTION_NAMES.assemble,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.lto_backend,
+ ACTION_NAMES.clif_match,
+ ],
+ flag_groups = [
+ flag_group(
+ flags = [
+ "-fdata-sections",
+ "-fstack-usage",
+ "--specs=nano.specs",
+ "-ffunction-sections",
+ "-D__STDC_FORMAT_MACROS",
+ "-D__STDC_CONSTANT_MACROS",
+ "-D__STDC_LIMIT_MACROS",
+ "-Wl,--gc-sections",
+ "-fstack-protector",
+ "-mcpu=cortex-m4",
+ "-mfpu=fpv4-sp-d16",
+ "-mthumb",
+ "-mfloat-abi=hard",
+ "-fno-strict-aliasing",
+ "-fmessage-length=80",
+ "-fmax-errors=20",
+ "-Wall",
+ "-Wextra",
+ "-Wpointer-arith",
+ "-Wcast-qual",
+ "-Wwrite-strings",
+ "-Wtype-limits",
+ "-Wsign-compare",
+ "-Wformat=2",
+ "-Werror",
+ "-Wstrict-aliasing=2",
+ "-Wno-misleading-indentation",
+ "-Wno-int-in-bool-context",
+ "-pipe",
+ "-fno-common",
+ "-fbuiltin",
+ "-g",
+ ],
+ ),
+ ],
+ ),
+ flag_set(
+ actions = [
+ ACTION_NAMES.assemble,
+ ACTION_NAMES.preprocess_assemble,
+ ACTION_NAMES.linkstamp_compile,
+ ACTION_NAMES.c_compile,
+ ACTION_NAMES.cpp_compile,
+ ACTION_NAMES.cpp_header_parsing,
+ ACTION_NAMES.cpp_module_compile,
+ ACTION_NAMES.cpp_module_codegen,
+ ACTION_NAMES.lto_backend,
+ ACTION_NAMES.clif_match,
+ ],
+ flag_groups = [
+ flag_group(
+ flags = [
+ "-O3",
+ "-finline-functions",
+ "-funroll-loops",
+ "-DNDEBUG",
+ "-ffunction-sections",
+ ],
+ ),
+ ],
+ with_features = [with_feature_set(features = ["opt"])],
+ ),
+ ],
+ )
else:
default_compile_flags_feature = None
@@ -432,6 +533,7 @@
],
)
elif (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22"):
dbg_feature = feature(
@@ -464,6 +566,7 @@
],
)
elif (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22"):
fastbuild_feature = feature(name = "fastbuild", implies = ["all_modes"])
@@ -521,6 +624,7 @@
implies = ["opt_post"],
)
elif (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22"):
opt_feature = feature(name = "opt", implies = ["all_modes"])
@@ -549,6 +653,7 @@
)
if (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22"):
include_paths_feature = feature(
@@ -719,6 +824,43 @@
),
],
)
+ elif ctx.attr.cpu == "cortex-m4f-imu":
+ default_link_flags_feature = feature(
+ name = "default_link_flags",
+ enabled = True,
+ flag_sets = [
+ flag_set(
+ actions = all_link_actions,
+ flag_groups = [
+ flag_group(
+ flags = [
+ "--specs=nosys.specs",
+ "-no-canonical-prefixes",
+ "-mcpu=cortex-m4",
+ "-mfpu=fpv4-sp-d16",
+ "-mthumb",
+ "-mfloat-abi=hard",
+ "-fno-strict-aliasing",
+ "--specs=nano.specs",
+ "-Wl,--start-group",
+ "-lgcc",
+ "-lstdc++",
+ "-lm",
+ "-lc",
+ "-lsupc++",
+ "-Wl,--end-group",
+ "-Tfrc971/imu_fdcan/Dual_IMU/STM32G473RETX_FLASH.ld",
+ ],
+ ),
+ ],
+ ),
+ flag_set(
+ actions = all_link_actions,
+ flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
+ with_features = [with_feature_set(features = ["opt"])],
+ ),
+ ],
+ )
elif ctx.attr.cpu == "rp2040":
default_link_flags_feature = feature(
name = "default_link_flags",
@@ -744,7 +886,7 @@
],
)
else:
- default_link_flags_feature = None
+ fail("Unreachable")
if ctx.attr.cpu == "roborio":
all_modes_feature = feature(
@@ -779,6 +921,7 @@
],
)
elif (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22"):
all_modes_feature = feature(
@@ -808,6 +951,7 @@
supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)
if (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22" or
ctx.attr.cpu == "roborio"):
@@ -1035,6 +1179,7 @@
)
if (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22"):
features = [
@@ -1080,6 +1225,7 @@
"%package(@arm_frc_linux_gnueabi_repo//arm-nilrt-linux-gnueabi/sysroot/usr/include/c++/12/backward)%",
]
elif (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22"):
cxx_builtin_include_directories = [
@@ -1144,6 +1290,7 @@
),
]
elif (ctx.attr.cpu == "rp2040" or
+ ctx.attr.cpu == "cortex-m4f-imu" or
ctx.attr.cpu == "cortex-m4f" or
ctx.attr.cpu == "cortex-m4f-k22"):
tool_paths = [
@@ -1225,7 +1372,7 @@
cc_toolchain_config = rule(
implementation = _impl,
attrs = {
- "cpu": attr.string(mandatory = True, values = ["cortex-m4f", "cortex-m4f-k22", "roborio", "rp2040"]),
+ "cpu": attr.string(mandatory = True, values = ["cortex-m4f", "cortex-m4f-k22", "roborio", "rp2040", "cortex-m4f-imu"]),
},
provides = [CcToolchainConfigInfo],
executable = True,
diff --git a/tools/platforms/BUILD b/tools/platforms/BUILD
index 599f926..6e73a8e 100644
--- a/tools/platforms/BUILD
+++ b/tools/platforms/BUILD
@@ -67,4 +67,16 @@
],
)
+platform(
+ name = "cortex-m4f-imu",
+ constraint_values = [
+ "@platforms//os:none",
+ "//tools/platforms/hardware:cortex-m4f-imu",
+ "//tools/platforms/go:lacks_support",
+ "//tools/platforms/rust:lacks_support",
+ "//tools/platforms/nodejs:lacks_support",
+ "//tools/platforms/gpu:none",
+ ],
+)
+
# TODO(phil): Create something for "cortex-m4f-k22" builds.
diff --git a/tools/platforms/hardware/BUILD b/tools/platforms/hardware/BUILD
index b33606a..93c3e27 100644
--- a/tools/platforms/hardware/BUILD
+++ b/tools/platforms/hardware/BUILD
@@ -21,6 +21,11 @@
)
constraint_value(
+ name = "cortex-m4f-imu",
+ constraint_setting = ":hardware",
+)
+
+constraint_value(
name = "cortex_m0plus",
constraint_setting = ":hardware",
)
diff --git a/y2020/vision/sift/fast_gaussian.bzl b/y2020/vision/sift/fast_gaussian.bzl
index 1c29cdb..f0896cc 100644
--- a/y2020/vision/sift/fast_gaussian.bzl
+++ b/y2020/vision/sift/fast_gaussian.bzl
@@ -40,6 +40,7 @@
"arm64": "aarch64",
"cortex-m": "cortex-m",
"cortex-m0plus": "cortex-m0plus",
+ "cortex-m4f-imu": "cortex-m4f-imu",
}),
outs = headers + objects + htmls,
# The tool doesn't support everything right now.