Skip to content

Commit c9e37ce

Browse files
tbitcsoz-agent
andcommitted
fix(samples): generate and add C model tables to all 17 sample builds
All sample main.c files reference ARBITER_generated_model but their CMakeLists.txt did not include the generated C table file. Generated arbiter_model.{c,h} from each sample's .arb.yaml via arbiterc compile and updated each CMakeLists.txt to include src/arbiter_model.c. Co-Authored-By: Oz <oz-agent@warp.dev>
1 parent e683f85 commit c9e37ce

49 files changed

Lines changed: 2049 additions & 17 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

samples/access_control/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ cmake_minimum_required(VERSION 3.20.0)
44
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
55
project(accesscontrol)
66

7-
target_sources(app PRIVATE src/main.c)
7+
target_sources(app PRIVATE src/main.c src/arbiter_model.c)
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/* SPDX-License-Identifier: MIT */
2+
/* AUTO-GENERATED by arbiterc — do not edit */
3+
4+
#include "arbiter_model.h"
5+
#include <arbiter/arbiter.h>
6+
7+
static const struct ARBITER_fact_def model_facts[] = {
8+
{ .id = 0, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "auth.decision" },
9+
{ .id = 1, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 100, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "auth.risk_score" },
10+
{ .id = 2, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "cors.allow" },
11+
{ .id = 3, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "cors.preflight" },
12+
{ .id = 4, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 100000, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.client_requests_1m" },
13+
{ .id = 5, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 1048576, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.content_length" },
14+
{ .id = 6, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.has_auth_token" },
15+
{ .id = 7, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.method" },
16+
{ .id = 8, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.origin_class" },
17+
{ .id = 9, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.path_class" },
18+
{ .id = 10, .type = ARBITER_FACT_ENUM, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.token_role" },
19+
{ .id = 11, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "req.token_valid" },
20+
};
21+
22+
static const struct ARBITER_condition_def model_conditions[] = {
23+
{ .fact_id = 7, .op = ARBITER_OP_EQ, .value = 5, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
24+
{ .fact_id = 8, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ANY, .group_index = 0, .next = UINT16_MAX },
25+
{ .fact_id = 8, .op = ARBITER_OP_EQ, .value = 2, .group = ARBITER_COND_ANY, .group_index = 0, .next = UINT16_MAX },
26+
{ .fact_id = 8, .op = ARBITER_OP_EQ, .value = 4, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
27+
{ .fact_id = 4, .op = ARBITER_OP_GT, .value = 60, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
28+
{ .fact_id = 9, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
29+
{ .fact_id = 9, .op = ARBITER_OP_EQ, .value = 4, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
30+
{ .fact_id = 7, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
31+
{ .fact_id = 6, .op = ARBITER_OP_EQ, .value = 0, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
32+
{ .fact_id = 9, .op = ARBITER_OP_EQ, .value = 2, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
33+
{ .fact_id = 6, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
34+
{ .fact_id = 11, .op = ARBITER_OP_EQ, .value = 0, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
35+
{ .fact_id = 9, .op = ARBITER_OP_EQ, .value = 3, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
36+
{ .fact_id = 10, .op = ARBITER_OP_LT, .value = 3, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
37+
{ .fact_id = 6, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
38+
{ .fact_id = 11, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
39+
{ .fact_id = 0, .op = ARBITER_OP_EQ, .value = 0, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
40+
{ .fact_id = 6, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
41+
{ .fact_id = 5, .op = ARBITER_OP_GT, .value = 65536, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
42+
};
43+
44+
static const struct ARBITER_action_def model_actions[] = {
45+
{ .id = 0, .type = ARBITER_ACTION_CALLBACK, .target_fact_id = 0, .target_value = 0, .callback = NULL, .must_complete_within_ms = 0, .safe_state_action = false, .name = "send_429" },
46+
};
47+
48+
static const struct ARBITER_rule_def model_rules[] = {
49+
{ .id = 0, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 0, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 1, .safety_critical = false, .name = "01_cors.preflight", .explanation = "OPTIONS request — CORS preflight." },
50+
{ .id = 1, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 1, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "02_cors.allow_origin", .explanation = "Same-origin or allowed origin — CORS pass." },
51+
{ .id = 2, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 3, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "03_cors.block_origin", .explanation = "Blocked origin — 403." },
52+
{ .id = 3, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 4, .condition_count = 1, .action_start = 0, .action_count = 1, .safety_goal_id = UINT16_MAX, .set_mode = 3, .safety_critical = false, .name = "10_rate.check", .explanation = "Client > 60 req/min — 429 Too Many Requests." },
53+
{ .id = 4, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 5, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 0, .safety_critical = false, .name = "20_auth.public_path", .explanation = "Public path — no auth required." },
54+
{ .id = 5, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 6, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 0, .safety_critical = false, .name = "21_auth.health_check", .explanation = "Health check GET — always allowed." },
55+
{ .id = 6, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 8, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "22_auth.no_token", .explanation = "Auth-required path but no token — 401." },
56+
{ .id = 7, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 10, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "23_auth.invalid_token", .explanation = "Invalid/expired token — 401." },
57+
{ .id = 8, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 12, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "24_auth.admin_check", .explanation = "Admin path requires admin role — 403." },
58+
{ .id = 9, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 14, .condition_count = 3, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 0, .safety_critical = false, .name = "25_auth.valid_token", .explanation = "Valid token, authorized — allow." },
59+
{ .id = 10, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 17, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = UINT16_MAX, .safety_critical = false, .name = "30_risk.compute", .explanation = NULL },
60+
{ .id = 11, .rule_class = ARBITER_RULE_CONSTRAINT, .condition_start = 18, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "40_payload.too_large", .explanation = "Payload > 64KB — rejected." },
61+
};
62+
63+
static const char *model_mode_names[] = {
64+
"mode.allow",
65+
"mode.cors_preflight",
66+
"mode.deny",
67+
"mode.rate_limited",
68+
};
69+
70+
const struct ARBITER_model ARBITER_generated_model = {
71+
.name = "iot_access_control",
72+
.model_hash = { 0xd0, 0x17, 0xb9, 0x4e, 0x8c, 0xe6, 0x6a, 0xd6, 0x46, 0x1c, 0x9f, 0xed, 0x03, 0xa1, 0xcc, 0x71, 0x0f, 0xe7, 0x8a, 0x48, 0xae, 0x97, 0xf7, 0x3a, 0xcd, 0x08, 0x85, 0xb0, 0x03, 0x27, 0xc1, 0x5b },
73+
.schema_hash = { 0x0d, 0x55, 0x33, 0x65, 0xf3, 0x4e, 0x02, 0xf3, 0xf8, 0x94, 0xe8, 0x25, 0xbb, 0x47, 0x86, 0x45, 0xfd, 0x8b, 0x78, 0xb1, 0x27, 0xf5, 0x8c, 0x42, 0xba, 0xbd, 0x80, 0x1f, 0x77, 0x57, 0x1f, 0x35 },
74+
.fact_count = 12,
75+
.rule_count = 12,
76+
.condition_count = 19,
77+
.action_count = 1,
78+
.mode_count = 4,
79+
.facts = model_facts,
80+
.rules = model_rules,
81+
.conditions = model_conditions,
82+
.actions = model_actions,
83+
.mode_names = model_mode_names,
84+
};
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/* SPDX-License-Identifier: MIT */
2+
/* AUTO-GENERATED by arbiterc — do not edit */
3+
4+
#pragma once
5+
6+
#include <stdint.h>
7+
#include <stddef.h>
8+
#include <arbiter/arbiter_model.h>
9+
10+
#define ARBITER_MODEL_NAME "iot_access_control"
11+
#define ARBITER_MODEL_HASH "d017b94e8ce66ad6461c9fed03a1cc710fe78a48ae97f73acd0885b00327c15b"
12+
#define ARBITER_MODEL_FACT_COUNT 12u
13+
#define ARBITER_MODEL_RULE_COUNT 12u
14+
#define ARBITER_MODEL_CONDITION_COUNT 19u
15+
#define ARBITER_MODEL_ACTION_COUNT 1u
16+
#define ARBITER_MODEL_MAX_FACTS 12u
17+
#define ARBITER_MODEL_MAX_RULES 12u
18+
#define ARBITER_MODEL_MAX_CONDITIONS 19u
19+
#define ARBITER_MODEL_MAX_ACTIONS 1u
20+
#define ARBITER_MODEL_WCET_OP_COUNT 31u
21+
#define ARBITER_MODEL_TRACE_CAPACITY 12u
22+
23+
extern const struct ARBITER_model ARBITER_generated_model;
24+
25+
#define ARBITER_FACT_AUTH_DECISION 0u
26+
#define ARBITER_FACT_AUTH_RISK_SCORE 1u
27+
#define ARBITER_FACT_CORS_ALLOW 2u
28+
#define ARBITER_FACT_CORS_PREFLIGHT 3u
29+
#define ARBITER_FACT_REQ_CLIENT_REQUESTS_1M 4u
30+
#define ARBITER_FACT_REQ_CONTENT_LENGTH 5u
31+
#define ARBITER_FACT_REQ_HAS_AUTH_TOKEN 6u
32+
#define ARBITER_FACT_REQ_METHOD 7u
33+
#define ARBITER_FACT_REQ_ORIGIN_CLASS 8u
34+
#define ARBITER_FACT_REQ_PATH_CLASS 9u
35+
#define ARBITER_FACT_REQ_TOKEN_ROLE 10u
36+
#define ARBITER_FACT_REQ_TOKEN_VALID 11u
37+
38+
#define ARBITER_MODE_MODE_ALLOW 0u
39+
#define ARBITER_MODE_MODE_CORS_PREFLIGHT 1u
40+
#define ARBITER_MODE_MODE_DENY 2u
41+
#define ARBITER_MODE_MODE_RATE_LIMITED 3u

samples/battery_policy/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ cmake_minimum_required(VERSION 3.20.0)
44
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
55
project(battery_policy)
66

7-
target_sources(app PRIVATE src/main.c)
7+
target_sources(app PRIVATE src/main.c src/arbiter_model.c)
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/* SPDX-License-Identifier: MIT */
2+
/* AUTO-GENERATED by arbiterc — do not edit */
3+
4+
#include "arbiter_model.h"
5+
#include <arbiter/arbiter.h>
6+
7+
static const struct ARBITER_fact_def model_facts[] = {
8+
{ .id = 0, .type = ARBITER_FACT_INT32, .range_min = -3000, .range_max = 3000, .default_value = 0, .stale_after_ms = 500, .safety_relevant = false, .name = "battery.current_ma" },
9+
{ .id = 1, .type = ARBITER_FACT_INT32, .range_min = -40, .range_max = 85, .default_value = 0, .stale_after_ms = 1000, .safety_relevant = false, .name = "battery.temp_c" },
10+
{ .id = 2, .type = ARBITER_FACT_UINT32, .range_min = 0, .range_max = 5000, .default_value = 0, .stale_after_ms = 500, .safety_relevant = true, .name = "battery.voltage_mv" },
11+
{ .id = 3, .type = ARBITER_FACT_BOOL, .range_min = 0, .range_max = 0, .default_value = 0, .stale_after_ms = 0, .safety_relevant = false, .name = "charger.enabled" },
12+
};
13+
14+
static const struct ARBITER_condition_def model_conditions[] = {
15+
{ .fact_id = 3, .op = ARBITER_OP_EQ, .value = 1, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
16+
{ .fact_id = 2, .op = ARBITER_OP_LT, .value = 4200, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
17+
{ .fact_id = 2, .op = ARBITER_OP_LT, .value = 3000, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
18+
{ .fact_id = 2, .op = ARBITER_OP_LT, .value = 3300, .group = ARBITER_COND_ALL, .group_index = 0, .next = UINT16_MAX },
19+
{ .fact_id = 1, .op = ARBITER_OP_GT, .value = 60, .group = ARBITER_COND_ANY, .group_index = 0, .next = UINT16_MAX },
20+
{ .fact_id = 1, .op = ARBITER_OP_LT, .value = -20, .group = ARBITER_COND_ANY, .group_index = 0, .next = UINT16_MAX },
21+
};
22+
23+
static const struct ARBITER_action_def model_actions[] = {
24+
{ .id = 0, .type = ARBITER_ACTION_CALLBACK, .target_fact_id = 0, .target_value = 0, .callback = NULL, .must_complete_within_ms = 0, .safe_state_action = false, .name = "disable_charger" },
25+
{ .id = 1, .type = ARBITER_ACTION_CALLBACK, .target_fact_id = 0, .target_value = 0, .callback = NULL, .must_complete_within_ms = 0, .safe_state_action = false, .name = "disable_load" },
26+
};
27+
28+
static const struct ARBITER_rule_def model_rules[] = {
29+
{ .id = 0, .rule_class = ARBITER_RULE_INFERENCE, .condition_start = 0, .condition_count = 2, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 0, .safety_critical = false, .name = "rule.charging", .explanation = "Charger connected and battery not full." },
30+
{ .id = 1, .rule_class = ARBITER_RULE_SAFETY_GUARD, .condition_start = 2, .condition_count = 1, .action_start = 1, .action_count = 1, .safety_goal_id = UINT16_MAX, .set_mode = 1, .safety_critical = true, .name = "rule.critical_battery", .explanation = "Battery critically low, disabling load." },
31+
{ .id = 2, .rule_class = ARBITER_RULE_MODE_GUARD, .condition_start = 3, .condition_count = 1, .action_start = 0, .action_count = 0, .safety_goal_id = UINT16_MAX, .set_mode = 2, .safety_critical = false, .name = "rule.low_battery", .explanation = "Battery voltage below 3.3V threshold." },
32+
{ .id = 3, .rule_class = ARBITER_RULE_SAFETY_GUARD, .condition_start = 4, .condition_count = 2, .action_start = 0, .action_count = 1, .safety_goal_id = UINT16_MAX, .set_mode = 4, .safety_critical = true, .name = "rule.thermal_shutdown", .explanation = "Temperature out of safe range." },
33+
};
34+
35+
static const char *model_mode_names[] = {
36+
"mode.charging",
37+
"mode.critical",
38+
"mode.low_battery",
39+
"mode.normal",
40+
"mode.thermal_shutdown",
41+
};
42+
43+
const struct ARBITER_model ARBITER_generated_model = {
44+
.name = "battery_policy",
45+
.model_hash = { 0xfb, 0x6a, 0x01, 0x02, 0x72, 0xec, 0x39, 0x45, 0x91, 0xc0, 0x74, 0xcd, 0x4d, 0x08, 0xdd, 0x8d, 0xa6, 0xa6, 0x89, 0x14, 0x82, 0xbe, 0xd0, 0x2b, 0x0e, 0x83, 0xf9, 0x01, 0xda, 0x48, 0xa8, 0x5a },
46+
.schema_hash = { 0x0d, 0x55, 0x33, 0x65, 0xf3, 0x4e, 0x02, 0xf3, 0xf8, 0x94, 0xe8, 0x25, 0xbb, 0x47, 0x86, 0x45, 0xfd, 0x8b, 0x78, 0xb1, 0x27, 0xf5, 0x8c, 0x42, 0xba, 0xbd, 0x80, 0x1f, 0x77, 0x57, 0x1f, 0x35 },
47+
.fact_count = 4,
48+
.rule_count = 4,
49+
.condition_count = 6,
50+
.action_count = 2,
51+
.mode_count = 5,
52+
.facts = model_facts,
53+
.rules = model_rules,
54+
.conditions = model_conditions,
55+
.actions = model_actions,
56+
.mode_names = model_mode_names,
57+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/* SPDX-License-Identifier: MIT */
2+
/* AUTO-GENERATED by arbiterc — do not edit */
3+
4+
#pragma once
5+
6+
#include <stdint.h>
7+
#include <stddef.h>
8+
#include <arbiter/arbiter_model.h>
9+
10+
#define ARBITER_MODEL_NAME "battery_policy"
11+
#define ARBITER_MODEL_HASH "fb6a010272ec394591c074cd4d08dd8da6a6891482bed02b0e83f901da48a85a"
12+
#define ARBITER_MODEL_FACT_COUNT 4u
13+
#define ARBITER_MODEL_RULE_COUNT 4u
14+
#define ARBITER_MODEL_CONDITION_COUNT 6u
15+
#define ARBITER_MODEL_ACTION_COUNT 2u
16+
#define ARBITER_MODEL_MAX_FACTS 4u
17+
#define ARBITER_MODEL_MAX_RULES 4u
18+
#define ARBITER_MODEL_MAX_CONDITIONS 6u
19+
#define ARBITER_MODEL_MAX_ACTIONS 2u
20+
#define ARBITER_MODEL_WCET_OP_COUNT 10u
21+
#define ARBITER_MODEL_TRACE_CAPACITY 4u
22+
23+
extern const struct ARBITER_model ARBITER_generated_model;
24+
25+
#define ARBITER_FACT_BATTERY_CURRENT_MA 0u
26+
#define ARBITER_FACT_BATTERY_TEMP_C 1u
27+
#define ARBITER_FACT_BATTERY_VOLTAGE_MV 2u
28+
#define ARBITER_FACT_CHARGER_ENABLED 3u
29+
30+
#define ARBITER_MODE_MODE_CHARGING 0u
31+
#define ARBITER_MODE_MODE_CRITICAL 1u
32+
#define ARBITER_MODE_MODE_LOW_BATTERY 2u
33+
#define ARBITER_MODE_MODE_NORMAL 3u
34+
#define ARBITER_MODE_MODE_THERMAL_SHUTDOWN 4u

samples/cobot_safety/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ cmake_minimum_required(VERSION 3.20.0)
44
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
55
project(cobotsafety)
66

7-
target_sources(app PRIVATE src/main.c)
7+
target_sources(app PRIVATE src/main.c src/arbiter_model.c)

0 commit comments

Comments
 (0)