# [https://taskfile.dev](https://taskfile.dev) version: "3" vars: BUILD_TYPE: '{{.BUILD_TYPE | default "Release"}}' VERSION: '{{.CONAN_BUILD_VERSION | default .ENV_CONAN_BUILD_VERSION | default "0.0.0-dev"}}' # Detect System Architecture (x86_64 or aarch64) SYSTEM_ARCH: sh: arch tasks: # ============================================================================ # Core Logic (Internal) # ============================================================================ _validate_arch: internal: true silent: true desc: "Checks if the current system architecture supports the requested build" requires: vars: [EXPECTED_ARCH] cmds: - | if [ "{{.SYSTEM_ARCH}}" != "{{.EXPECTED_ARCH}}" ]; then echo "❌ ARCHITECTURE MISMATCH ERROR:" echo " - System Arch: {{.SYSTEM_ARCH}}" echo " - Expected Arch: {{.EXPECTED_ARCH}}" echo " - Task Type: Native Build" echo "" echo " You are trying to run a 'native' build for {{.EXPECTED_ARCH}} on a {{.SYSTEM_ARCH}} machine." echo " Please use the 'cross-...' task instead." exit 1 else echo "✅ Architecture match: System={{.SYSTEM_ARCH}} matches Target={{.EXPECTED_ARCH}}" fi _create: internal: true desc: "Core wrapper for conan create" requires: vars: [PROFILE_HOST, PROFILE_BUILD] cmds: - >- conan create . --profile:build {{.PROFILE_BUILD}} --profile:host {{.PROFILE_HOST}} --build=missing --version {{.VERSION}} -s build_type={{.BUILD_TYPE}} # ============================================================================ # GCC 13 (Modern) # ============================================================================ native-x64:gcc13: desc: "Build: Native x64 (GCC 13)" cmds: - task: _validate_arch vars: { EXPECTED_ARCH: "x86_64" } - task: _create vars: PROFILE_BUILD: x64_linux_gcc_13 PROFILE_HOST: x64_linux_gcc_13 native-armv8:gcc13: desc: "Build: Native ARMv8 (GCC 13)" cmds: - task: _validate_arch vars: { EXPECTED_ARCH: "aarch64" } - task: _create vars: PROFILE_BUILD: armv8_linux_gcc_13 PROFILE_HOST: armv8_linux_gcc_13 cross-armv8:gcc13: desc: "Build: Cross-Compile x64 -> ARMv8 (GCC 13)" cmds: - echo "⚠️ Cross-compiling for ARMv8 on {{.SYSTEM_ARCH}} (No arch check enforced)" - task: _create vars: PROFILE_BUILD: x64_linux_gcc_13 PROFILE_HOST: armv8_linux_gcc_13_croco # ============================================================================ # GCC 9 (Legacy) # ============================================================================ native-x64:gcc9: desc: "Build: Native x64 (GCC 9)" cmds: - task: _validate_arch vars: { EXPECTED_ARCH: "x86_64" } - task: _create vars: PROFILE_BUILD: x64_linux_gcc_9 PROFILE_HOST: x64_linux_gcc_9 native-armv8:gcc9: desc: "Build: Native ARMv8 (GCC 9)" cmds: - task: _validate_arch vars: { EXPECTED_ARCH: "aarch64" } - task: _create vars: PROFILE_BUILD: armv8_linux_gcc_9 PROFILE_HOST: armv8_linux_gcc_9 cross-armv8:gcc9: desc: "Build: Cross-Compile x64 -> ARMv8 (GCC 9)" cmds: - echo "⚠️ Cross-compiling for ARMv8 on {{.SYSTEM_ARCH}} (No arch check enforced)" - task: _create vars: PROFILE_BUILD: x64_linux_gcc_9 PROFILE_HOST: armv8_linux_gcc_9_croco # ============================================================================ # Utility Tasks # ============================================================================ clean: desc: "Clean build artifacts and conan cache for this package" cmds: - rm -rf build install colcon_build - conan remove video-to-rosbag/* -c test: desc: "Run the converter test with sample video" cmds: - >- conan install --requires=video-to-rosbag/{{.VERSION}} -g VirtualRunEnv --profile:host x64_linux_gcc_13 --profile:build x64_linux_gcc_13 -s build_type={{.BUILD_TYPE}} - source conanrun.sh && ros2 run video_to_rosbag video_to_rosbag --ros-args -p input_video:=/tmp/test.mp4 -p output_bag:=/tmp/test_bag