generated from sirlilpanda/kicad-project-template-actionless
Added the zig_main project to software for zig based implementation of code for robot
This commit is contained in:
158
software/zig_main/cmake/bindgen-standalone.cmake
Normal file
158
software/zig_main/cmake/bindgen-standalone.cmake
Normal 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()
|
||||
Reference in New Issue
Block a user