Added the zig_main project to software for zig based implementation of code for robot

This commit is contained in:
2026-05-05 20:14:04 +12:00
parent 7d752f2534
commit f21f909a71
83 changed files with 13631 additions and 0 deletions

View File

@@ -0,0 +1,158 @@
# ──────────────────────────────────────────────────────────────────────────────
# Download translate_c-standalone
# ──────────────────────────────────────────────────────────────────────────────
# Determine platform triple for translate_c-standalone naming
if(ZIG_PLATFORM STREQUAL "linux-musl")
if(ZIG_ARCH STREQUAL "aarch64")
set(TRANSLATE_C_TRIPLE "aarch64-linux-musl")
set(HASH_SUM "7d5968a41a02064d90035db95ef102fc2ab5e71a2eb48ba6cf028eb79b4ae43d")
elseif(ZIG_ARCH STREQUAL "x86_64")
set(TRANSLATE_C_TRIPLE "x86_64-linux-musl")
set(HASH_SUM "d098e2675fc6706914b6e53dd72f6536895420460f287e73e19772c979fabb84")
else()
message(FATAL_ERROR "Unsupported architecture for translate_c-standalone: ${ZIG_ARCH}")
endif()
set(ARCHIVE_EXT "tar.xz")
elseif(ZIG_PLATFORM STREQUAL "windows")
if(ZIG_ARCH STREQUAL "x86_64")
set(TRANSLATE_C_TRIPLE "x86_64-windows-gnu")
set(HASH_SUM "8e53a03ee44983eea2786c2ba028e83a816b9a993a768b3f4ca8c6e3525923e2")
else()
message(FATAL_ERROR "Unsupported architecture for translate_c-standalone: ${ZIG_ARCH}")
endif()
set(ARCHIVE_EXT "zip")
elseif(ZIG_PLATFORM STREQUAL "macos")
if(ZIG_ARCH STREQUAL "aarch64")
set(TRANSLATE_C_TRIPLE "aarch64-macos")
set(HASH_SUM "8b3d2360d09add35f764ac138e0ec497503dc3de788a01e93fd7b9923a44369c")
else()
message(FATAL_ERROR "Unsupported architecture for translate_c-standalone: ${ZIG_ARCH}")
endif()
set(ARCHIVE_EXT "tar.xz")
else()
message(FATAL_ERROR "Unsupported platform for translate_c-standalone: ${ZIG_PLATFORM}")
endif()
set(TRANSLATE_C_DIR "${CMAKE_BINARY_DIR}/translate_c-standalone")
set(TRANSLATE_C_ARCHIVE "${CMAKE_BINARY_DIR}/translate_c-standalone-${TRANSLATE_C_TRIPLE}-baseline.${ARCHIVE_EXT}")
set(TRANSLATE_C_BIN "${TRANSLATE_C_DIR}/bin")
# Download if not already extracted
if(NOT EXISTS "${TRANSLATE_C_BIN}")
set(TRANSLATE_C_URL "https://github.com/kassane/zig-espressif-bootstrap/releases/download/0.16.0-xtensa-dev/translate_c-standalone-${TRANSLATE_C_TRIPLE}-baseline.${ARCHIVE_EXT}")
message(STATUS "Downloading translate_c-standalone (${TRANSLATE_C_TRIPLE}):")
message(STATUS " => ${TRANSLATE_C_ARCHIVE}")
file(DOWNLOAD "${TRANSLATE_C_URL}" "${TRANSLATE_C_ARCHIVE}"
TLS_VERIFY ON
EXPECTED_HASH SHA256=${HASH_SUM}
STATUS download_status
LOG download_log
)
list(GET download_status 0 dl_code)
if(NOT dl_code EQUAL 0)
message(FATAL_ERROR "Download failed:\n${download_log}")
endif()
message(STATUS "Extracting ${ARCHIVE_EXT} ...")
file(MAKE_DIRECTORY "${TRANSLATE_C_DIR}")
if(HOST_OS_LOWER MATCHES "windows|win")
execute_process(
COMMAND powershell -NoProfile -ExecutionPolicy Bypass
-Command "Expand-Archive -Path '${TRANSLATE_C_ARCHIVE}' -DestinationPath '${TRANSLATE_C_DIR}' -Force"
RESULT_VARIABLE extract_result
)
else()
execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xf "${TRANSLATE_C_ARCHIVE}"
WORKING_DIRECTORY "${TRANSLATE_C_DIR}"
RESULT_VARIABLE extract_result
)
endif()
if(NOT extract_result EQUAL 0)
message(FATAL_ERROR "Extraction failed (code ${extract_result})")
endif()
file(REMOVE "${TRANSLATE_C_ARCHIVE}")
# Make executable on Unix
if(NOT HOST_OS_LOWER MATCHES "windows|win")
execute_process(
COMMAND chmod +x "${TRANSLATE_C_BIN}"
RESULT_VARIABLE chmod_result
)
if(NOT chmod_result EQUAL 0)
message(WARNING "Failed to set executable bit on translate_c-standalone")
endif()
endif()
message(STATUS "translate_c-standalone ready at: ${TRANSLATE_C_BIN}")
else()
message(STATUS "Using cached translate_c-standalone: ${TRANSLATE_C_BIN}")
endif()
set(BINDGEN "${TRANSLATE_C_BIN}/translate-c")
# ──────────────────────────────────────────────────────────────────────────────
# Helper to invoke translate-c (mirrors zig_run from zig-runner.cmake)
# ──────────────────────────────────────────────────────────────────────────────
function(bindgen_run)
cmake_parse_arguments(PARSE_ARGV 0 ARG
"VERBATIM;ALLOW_FAIL"
"WORKING_DIRECTORY;RESULT_VARIABLE;OUTPUT_VARIABLE;ERROR_VARIABLE;OUTPUT_FILE;TIMEOUT"
"COMMAND"
)
if(NOT ARG_COMMAND)
message(FATAL_ERROR "bindgen_run: COMMAND list is required")
endif()
if(NOT DEFINED ARG_WORKING_DIRECTORY)
set(ARG_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
if(NOT DEFINED ARG_TIMEOUT)
set(ARG_TIMEOUT 300)
endif()
set(extra_args)
if(ARG_VERBATIM)
list(APPEND extra_args VERBATIM)
endif()
if(ARG_OUTPUT_FILE)
list(APPEND extra_args OUTPUT_FILE "${ARG_OUTPUT_FILE}")
endif()
execute_process(
COMMAND "${BINDGEN}" ${ARG_COMMAND}
WORKING_DIRECTORY "${ARG_WORKING_DIRECTORY}"
RESULT_VARIABLE result
OUTPUT_VARIABLE output
ERROR_VARIABLE error
TIMEOUT ${ARG_TIMEOUT}
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
${extra_args}
)
if(DEFINED ARG_RESULT_VARIABLE)
set(${ARG_RESULT_VARIABLE} "${result}" PARENT_SCOPE)
endif()
if(DEFINED ARG_OUTPUT_VARIABLE)
set(${ARG_OUTPUT_VARIABLE} "${output}" PARENT_SCOPE)
endif()
if(DEFINED ARG_ERROR_VARIABLE)
set(${ARG_ERROR_VARIABLE} "${error}" PARENT_SCOPE)
endif()
if(NOT ARG_ALLOW_FAIL)
if(result MATCHES "timeout")
message(FATAL_ERROR
"translate-c timed out after ${ARG_TIMEOUT}s — Aro deadlock on stub headers (issue #61)\n"
" Command: ${BINDGEN} ${ARG_COMMAND}\n"
"--- stderr ---\n${error}")
elseif(NOT result EQUAL 0)
message(FATAL_ERROR
"translate-c failed (code ${result}):\n"
" ${BINDGEN} ${ARG_COMMAND}\n"
"--- stderr ---\n${error}")
endif()
endif()
endfunction()