blob: 1849494c53fdaf215191cbae193cc96fe8b17caf [file] [log] [blame]
#!/usr/bin/env python3
import os
import shutil
from upstream_utils import (
get_repo_root,
clone_repo,
comment_out_invalid_includes,
walk_cwd_and_copy_if,
git_am,
)
def main():
upstream_root = clone_repo("https://github.com/RobotLocomotion/drake", "v1.6.0")
wpilib_root = get_repo_root()
wpimath = os.path.join(wpilib_root, "wpimath")
# Apply patches to upstream Git repo
os.chdir(upstream_root)
for f in [
"0001-Replace-Eigen-Dense-with-Eigen-Core.patch",
"0002-Add-WPILIB_DLLEXPORT-to-DARE-function-declarations.patch",
]:
git_am(os.path.join(wpilib_root, "upstream_utils/drake_patches", f))
# Delete old install
for d in [
"src/main/native/thirdparty/drake/src",
"src/main/native/thirdparty/drake/include",
"src/test/native/cpp/drake",
"src/test/native/include/drake",
]:
shutil.rmtree(os.path.join(wpimath, d), ignore_errors=True)
# Copy drake source files into allwpilib
src_files = walk_cwd_and_copy_if(
lambda dp, f: f
in ["drake_assert_and_throw.cc", "discrete_algebraic_riccati_equation.cc"],
os.path.join(wpimath, "src/main/native/thirdparty/drake/src"),
)
# Copy drake header files into allwpilib
include_files = walk_cwd_and_copy_if(
lambda dp, f: f
in [
"drake_assert.h",
"drake_assertion_error.h",
"is_approx_equal_abstol.h",
"never_destroyed.h",
"drake_copyable.h",
"drake_throw.h",
"discrete_algebraic_riccati_equation.h",
],
os.path.join(wpimath, "src/main/native/thirdparty/drake/include/drake"),
)
# Copy drake test source files into allwpilib
os.chdir(os.path.join(upstream_root, "math/test"))
test_src_files = walk_cwd_and_copy_if(
lambda dp, f: f == "discrete_algebraic_riccati_equation_test.cc",
os.path.join(wpimath, "src/test/native/cpp/drake"),
)
os.chdir(upstream_root)
# Copy drake test header files into allwpilib
test_include_files = walk_cwd_and_copy_if(
lambda dp, f: f == "eigen_matrix_compare.h",
os.path.join(wpimath, "src/test/native/include/drake"),
)
for f in src_files:
comment_out_invalid_includes(
f, [os.path.join(wpimath, "src/main/native/thirdparty/drake/include")]
)
for f in include_files:
comment_out_invalid_includes(
f, [os.path.join(wpimath, "src/main/native/thirdparty/drake/include")]
)
for f in test_src_files:
comment_out_invalid_includes(
f,
[
os.path.join(wpimath, "src/main/native/thirdparty/drake/include"),
os.path.join(wpimath, "src/test/native/include"),
],
)
for f in test_include_files:
comment_out_invalid_includes(
f,
[
os.path.join(wpimath, "src/main/native/thirdparty/drake/include"),
os.path.join(wpimath, "src/test/native/include"),
],
)
if __name__ == "__main__":
main()