From 5d8bdd6f160fb6aab3bfb6fbec42f80266e6b460 Mon Sep 17 00:00:00 2001 From: abdulrehman Date: Tue, 15 Sep 2026 06:51:59 +0500 Subject: [PATCH 1/2] fix(build): gate host networking on bare metal --- CMakeLists.txt | 6 ++++++ common/CMakeLists.txt | 4 ++++ common/src/tools_builtin.c | 14 ++++++++++++-- framework/src/connector_modbus.c | 18 ++++++++++++++++++ framework/src/connector_mqtt.c | 18 ++++++++++++++++++ framework/src/connector_opcua.c | 18 ++++++++++++++++++ min/src/router.c | 16 ++++++++++++++-- 7 files changed, 90 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1585014..7234252 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,6 +62,12 @@ if(ANDROID) set(EAI_PLATFORM_ANDROID ON) endif() +if(CMAKE_SYSTEM_NAME STREQUAL "Generic") + set(EAI_PLATFORM_LINUX OFF) + set(EAI_PLATFORM_BAREMETAL ON) + set(EAI_BUILD_CLI OFF) +endif() + # ========== Modules ========== # Common library (shared contracts + utilities) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index caa6c9a..6148064 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -15,6 +15,10 @@ target_include_directories(eai_common PUBLIC $ ) +if(NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + target_compile_definitions(eai_common PUBLIC EAI_HAS_HOST_SOCKETS) +endif() + if(UNIX) target_link_libraries(eai_common PUBLIC m) endif() diff --git a/common/src/tools_builtin.c b/common/src/tools_builtin.c index a6411e0..07373f5 100644 --- a/common/src/tools_builtin.c +++ b/common/src/tools_builtin.c @@ -9,14 +9,14 @@ #include #include -#ifdef _WIN32 +#if defined(EAI_HAS_HOST_SOCKETS) && defined(_WIN32) #include #include #pragma comment(lib, "ws2_32.lib") typedef SOCKET sock_t; #define SOCK_INVALID INVALID_SOCKET #define sock_close closesocket -#else +#elif defined(EAI_HAS_HOST_SOCKETS) #include #include #include @@ -121,6 +121,7 @@ eai_status_t eai_tool_device_read_sensor_register(eai_tool_registry_t *reg) /* ========== http.get ========== */ +#ifdef EAI_HAS_HOST_SOCKETS static eai_status_t tool_http_get_exec(const eai_kv_t *args, int arg_count, eai_tool_result_t *result) { @@ -279,6 +280,13 @@ eai_status_t eai_tool_http_get_register(eai_tool_registry_t *reg) tool.exec = tool_http_get_exec; return eai_tool_register(reg, &tool); } +#else +eai_status_t eai_tool_http_get_register(eai_tool_registry_t *reg) +{ + (void)reg; + return EAI_ERR_UNSUPPORTED; +} +#endif /* ========== preference.set ========== */ @@ -426,8 +434,10 @@ eai_status_t eai_tools_register_builtins(eai_tool_registry_t *reg) s = eai_tool_device_read_sensor_register(reg); if (s != EAI_OK) return s; +#ifdef EAI_HAS_HOST_SOCKETS s = eai_tool_http_get_register(reg); if (s != EAI_OK) return s; +#endif s = eai_tool_pref_set_register(reg); if (s != EAI_OK) return s; diff --git a/framework/src/connector_modbus.c b/framework/src/connector_modbus.c index d3ea620..9570dac 100644 --- a/framework/src/connector_modbus.c +++ b/framework/src/connector_modbus.c @@ -8,6 +8,23 @@ #include #include +#ifndef EAI_HAS_HOST_SOCKETS +static eai_status_t modbus_unsupported(eai_fw_connector_t *conn, + const eai_kv_t *params, int param_count) +{ + (void)conn; + (void)params; + (void)param_count; + return EAI_ERR_UNSUPPORTED; +} + +const eai_connector_ops_t eai_connector_modbus_ops = { + .name = "modbus", + .type = EAI_CONN_MODBUS, + .connect = modbus_unsupported, +}; +#else + #ifdef _WIN32 #include #include @@ -257,3 +274,4 @@ const eai_connector_ops_t eai_connector_modbus_ops = { .write = modbus_write, .subscribe = NULL, }; +#endif diff --git a/framework/src/connector_mqtt.c b/framework/src/connector_mqtt.c index d1e6e3e..b8eb790 100644 --- a/framework/src/connector_mqtt.c +++ b/framework/src/connector_mqtt.c @@ -8,6 +8,23 @@ #include #include +#ifndef EAI_HAS_HOST_SOCKETS +static eai_status_t mqtt_unsupported(eai_fw_connector_t *conn, + const eai_kv_t *params, int param_count) +{ + (void)conn; + (void)params; + (void)param_count; + return EAI_ERR_UNSUPPORTED; +} + +const eai_connector_ops_t eai_connector_mqtt_ops = { + .name = "mqtt", + .type = EAI_CONN_MQTT, + .connect = mqtt_unsupported, +}; +#else + #ifdef _WIN32 #include #include @@ -378,3 +395,4 @@ const eai_connector_ops_t eai_connector_mqtt_ops = { .write = mqtt_write, .subscribe = mqtt_subscribe, }; +#endif diff --git a/framework/src/connector_opcua.c b/framework/src/connector_opcua.c index 79a972f..b910fc0 100644 --- a/framework/src/connector_opcua.c +++ b/framework/src/connector_opcua.c @@ -8,6 +8,23 @@ #include #include +#ifndef EAI_HAS_HOST_SOCKETS +static eai_status_t opcua_unsupported(eai_fw_connector_t *conn, + const eai_kv_t *params, int param_count) +{ + (void)conn; + (void)params; + (void)param_count; + return EAI_ERR_UNSUPPORTED; +} + +const eai_connector_ops_t eai_connector_opcua_ops = { + .name = "opcua", + .type = EAI_CONN_OPCUA, + .connect = opcua_unsupported, +}; +#else + #ifdef _WIN32 #include #include @@ -284,3 +301,4 @@ const eai_connector_ops_t eai_connector_opcua_ops = { .write = opcua_write, .subscribe = NULL, }; +#endif diff --git a/min/src/router.c b/min/src/router.c index 528c565..9b0ecdf 100644 --- a/min/src/router.c +++ b/min/src/router.c @@ -8,14 +8,14 @@ #include #include -#ifdef _WIN32 +#if defined(EAI_HAS_HOST_SOCKETS) && defined(_WIN32) #include #include #pragma comment(lib, "ws2_32.lib") typedef SOCKET sock_t; #define SOCK_INVALID INVALID_SOCKET #define sock_close closesocket -#else +#elif defined(EAI_HAS_HOST_SOCKETS) #include #include #include @@ -73,6 +73,7 @@ eai_route_target_t eai_min_router_decide(const eai_min_router_t *router, } /* Parse host and port from endpoint URL */ +#ifdef EAI_HAS_HOST_SOCKETS static void parse_endpoint(const char *endpoint, char *host, size_t host_size, int *port, char *path, size_t path_size, int *use_https) { @@ -257,3 +258,14 @@ eai_status_t eai_min_router_infer_cloud(eai_min_router_t *router, return EAI_OK; } +#else +eai_status_t eai_min_router_infer_cloud(eai_min_router_t *router, + const eai_inference_input_t *in, + eai_inference_output_t *out) +{ + (void)router; + (void)in; + (void)out; + return EAI_ERR_UNSUPPORTED; +} +#endif From 06f16a35bd4d16ab09dca13d173474c137a5e770 Mon Sep 17 00:00:00 2001 From: abdulrehman Date: Tue, 15 Sep 2026 06:51:59 +0500 Subject: [PATCH 2/2] ci: make ARM cross-build fail closed --- .github/workflows/ci.yml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8949033..31e0a54 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,17 +64,14 @@ jobs: - name: Build ARM run: | cmake -B build/arm -G Ninja \ - -DCMAKE_TOOLCHAIN_FILE=cmake/arm-cortex-m4.cmake \ - -DBUILD_TESTS=OFF 2>/dev/null || true - cmake --build build/arm --parallel $(nproc) 2>/dev/null || true - mkdir -p dist && echo "ARM build complete" > dist/build.txt + -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/toolchain-arm-cortex-m4.cmake \ + -DEAI_BUILD_TESTS=OFF + cmake --build build/arm --parallel $(nproc) - uses: actions/upload-artifact@v4 with: name: eai-arm - path: | - build/arm/**/*.elf - build/arm/**/*.bin - dist/ + path: build/arm/**/*.a + if-no-files-found: error retention-days: 90 # ── Release ───────────────────────────────────────────────────────────────