This build process is intended to be run on ARM64 silicon and not x86. An x86 machine however can be patched to run this by running the docker_arm64_qemu.bash script contained in this directory.
Caveat: When running on x86, the process will take an 8x performance hit. This means that a build will take about 8x longer to run than an arm counterpart. Even a low spec ARM64 mac as of writing this will outstrip a 16 core desktop by hours.
To run a cross build, use the following steps.
- Install docker and add your user to the
docker
group to enable sudoless access to docker. - Make sure python3 is installed and up to date. All scripts use stdlib functionality so no addtional packages are needed.
- Run the builder script by invoking
python3 cross_build.py
. This will walk the user through a configuration menu to set up the build. This may take hours to complete the build. - For subsequent re-runs the
-p
flag can be used. This will used the saved settings from the last run. These settings are saved to/tmp/cross_build_cf.yaml
. The settings file can be copied to a permanent directory and passed in via the argument--cfg <path/to/cfg/file>
to support pre-configured re-runs.
To generate new profiles more easily, the use of rosinstall generator
is recommended. It is a tool created for reos development to walk dependency trees automatically between ros pkgs. Here is an example command to build up to the client libraries RCLCPP and RCLPY rosinstall_generator --rosdistro humble --format repos --deps rclcpp rclpy
. The output of the command will be the text of the .repos
file. The .pkgs
and .meta
files can be copied and customized based on other required dependencies.
This is a stripped down version of ROS that simply goes up to rclcpp and rclpy
This is a stripped down version of ROS almost ready for vehicle use
This is the default ros2.repos made publicly availiable on github from the ros2
repository: https://github.com/ros2/ros2/tree/humble-release
This was generated with the following rosdep command below. Addtionally micro_ros_agent
, micro_ros_msgs
, and micro_xrce_dds_agent
were addded to the .repos
file manually. rosinstall_generator --rosdistro humble --format repos --deps action_msgs action_tutorials_cpp action_tutorials_interfaces action_tutorials_py actionlib_msgs ament_cmake ament_cmake_auto ament_cmake_copyright ament_cmake_core ament_cmake_cppcheck ament_cmake_cpplint ament_cmake_export_definitions ament_cmake_export_dependencies ament_cmake_export_include_directories ament_cmake_export_interfaces ament_cmake_export_libraries ament_cmake_export_link_flags ament_cmake_export_targets ament_cmake_flake8 ament_cmake_gen_version_h ament_cmake_gmock ament_cmake_gtest ament_cmake_include_directories ament_cmake_libraries ament_cmake_lint_cmake ament_cmake_pep257 ament_cmake_pytest ament_cmake_python ament_cmake_ros ament_cmake_target_dependencies ament_cmake_test ament_cmake_uncrustify ament_cmake_version ament_cmake_xmllint ament_copyright ament_cppcheck ament_cpplint ament_flake8 ament_index_cpp ament_index_python ament_lint ament_lint_auto ament_lint_cmake ament_lint_common ament_package ament_pep257 ament_uncrustify ament_xmllint angles behaviortree_cpp_v3 builtin_interfaces camera_calibration_parsers camera_info_manager class_loader common_interfaces composition composition_interfaces console_bridge_vendor control_msgs control_toolbox cv_bridge depthimage_to_laserscan diagnostic_aggregator diagnostic_msgs diagnostic_updater domain_coordinator eigen3_cmake_module fastrtps_cmake_module geographic_msgs geometry2 geometry_msgs image_geometry image_proc image_publisher image_transport interactive_markers joint_state_publisher kdl_parser keyboard_handler laser_geometry launch launch_msgs launch_ros launch_service launch_xml launch_yaml libcurl_vendor libstatistics_collector libyaml_vendor lifecycle lifecycle_msgs map_msgs message_filters micro_ros_setup nav_msgs orocos_kdl_vendor osrf_pycommon pcl_conversions pcl_msgs pendulum_control pendulum_msgs pluginlib pybind11_vendor python_cmake_module rcl rcl_action rcl_interfaces rcl_lifecycle rcl_logging_interface rcl_logging_spdlog rcl_yaml_param_parser rclcpp rclcpp_action rclcpp_components rclcpp_lifecycle rclpy rcpputils rcutils resource_retriever rmw rmw_dds_common rmw_fastrtps_cpp rmw_fastrtps_shared_cpp rmw_implementation rmw_implementation_cmake robot_localization robot_state_publisher ros2action ros2bag ros2cli ros2cli_common_extensions ros2component ros2doctor ros2interface ros2launch ros2lifecycle ros2multicast ros2node ros2param ros2pkg ros2run ros2service ros2topic ros_environment ros_workspace rosbag2 rosbag2_compression rosbag2_compression_zstd rosbag2_cpp rosbag2_interfaces rosbag2_py rosbag2_storage rosbag2_storage_default_plugins rosbag2_transport rosgraph_msgs rosidl_adapter rosidl_cli rosidl_cmake rosidl_default_generators rosidl_default_runtime rosidl_generator_c rosidl_generator_cpp rosidl_generator_py rosidl_parser rosidl_runtime_c rosidl_runtime_cpp rosidl_runtime_py rosidl_typesupport_c rosidl_typesupport_cpp rosidl_typesupport_fastrtps_c rosidl_typesupport_fastrtps_cpp rosidl_typesupport_interface rosidl_typesupport_introspection_c rosidl_typesupport_introspection_cpp rpyutils sensor_msgs sensor_msgs_py shape_msgs shared_queues_vendor spdlog_vendor sqlite3_vendor sros2 sros2_cmake statistics_msgs std_msgs std_srvs stereo_msgs tango_icons_vendor teleop_twist_joy teleop_twist_keyboard tf2 tf2_bullet tf2_eigen tf2_eigen_kdl tf2_geometry_msgs tf2_kdl tf2_msgs tf2_py tf2_ros tf2_ros_py tf2_sensor_msgs tf2_tools tf_transformations tinyxml2_vendor tinyxml_vendor tlsf tlsf_cpp topic_monitor tracetools tracetools_image_pipeline trajectory_msgs uncrustify_vendor unique_identifier_msgs urdf urdf_parser_plugin vision_msgs visualization_msgs xacro yaml_cpp_vendor zstd_vendor compressed_depth_image_transport compressed_image_transport image_transport_plugins