# SOURCES — the canonical El runtime link set. # # THIS FILE IS THE SINGLE SOURCE OF TRUTH for "what do I compile and link to # get the El runtime". Every build path — CI, install.sh, the SDK release, the # docs, elb, the engram test harnesses — reads it via scripts/el-runtime-sources.sh # instead of hardcoding its own list. # # WHY THIS FILE EXISTS # -------------------- # The runtime has been multi-translation-unit since the engram siblings landed: # el_runtime.c #includes engram_{store,vindex,geometry,reason,verify,cognition}.h # and makes hard cross-TU calls into all six. Linking el_runtime.c ALONE has been # broken since then — `ld` fails with undefined symbols (engram_ground_json, # engram_activate_inner, eg_find_relation, cog_assert_two_axis, ...). # # It stayed broken because the link set was written out longhand in ~8 different # places, each of which drifted independently. A list copied 8 times is a list # that is wrong in 8 places. It is now written once, here. # # HOW TO USE IT # ------------- # scripts/el-runtime-sources.sh # bare names, one per line # scripts/el-runtime-sources.sh lang/runtime # prefixed with a directory # cc ... $(scripts/el-runtime-sources.sh lang/runtime) -lcurl -lssl -lcrypto -lpthread -lm # # ADDING A FILE # ------------- # Add the .c here and it is picked up by every build path at once. That is the # point: a new concern gets its own translation unit and costs one line, instead # of being appended to el_runtime.c because appending was the cheaper edit. # # Order is link order. Blank lines and `#` comments are ignored. # --- EL core language runtime ------------------------------------------------- el_runtime.c el_seed.c # --- Engram: store, index, geometry, reasoning, verification, cognition ------- # These are the six concern-owned translation units el_runtime.c calls into. engram_store.c engram_vindex.c engram_geometry.c engram_reason.c engram_verify.c engram_cognition.c # --- Vector math: batch cosine + its CPU strategy ---------------------------- # The ggml strategy (eg_cosine_batch_strategy_ggml.c) is an OPTIONAL swap-in and # is deliberately NOT in the default set — it needs ggml headers. Link it in # place of the cpu strategy when you have them. eg_cosine_batch.c eg_cosine_batch_strategy_cpu.c