diff --git a/Dockerfile.alpine-musl b/Dockerfile.alpine-musl index 9854f46..c1988e8 100644 --- a/Dockerfile.alpine-musl +++ b/Dockerfile.alpine-musl @@ -68,6 +68,7 @@ COPY nostr_core_lib /build/nostr_core_lib/ RUN cd nostr_core_lib && \ chmod +x build.sh && \ sed -i 's/CFLAGS="-Wall -Wextra -std=c99 -fPIC -O2"/CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -Wall -Wextra -std=c99 -fPIC -O2"/' build.sh && \ + sed -i 's/CC="aarch64-linux-gnu-gcc"/CC="gcc"/' build.sh && \ rm -f *.o *.a 2>/dev/null || true && \ ./build.sh --nips=all @@ -78,7 +79,10 @@ COPY Makefile /build/Makefile # Build didactyl with full static linking (only rebuilds when src/ changes) # Disable fortification to avoid __*_chk symbols that don't exist in MUSL # Use conditional compilation flags based on DEBUG_BUILD argument -RUN if [ "$DEBUG_BUILD" = "true" ]; then \ +RUN NOSTR_LIB=$(ls /build/nostr_core_lib/libnostr_core_*.a 2>/dev/null | head -1) && \ + if [ -z "$NOSTR_LIB" ]; then echo "ERROR: nostr_core_lib .a not found"; exit 1; fi && \ + echo "Using nostr library: $NOSTR_LIB" && \ + if [ "$DEBUG_BUILD" = "true" ]; then \ CFLAGS="-g -O2 -DDEBUG"; \ STRIP_CMD="echo 'Keeping debug symbols'"; \ echo "Building with DEBUG symbols enabled (optimized with -O2)"; \ @@ -103,7 +107,7 @@ RUN if [ "$DEBUG_BUILD" = "true" ]; then \ src/tools/tool_skill.c src/tools/tool_nostr_post.c src/tools/tool_memory.c src/tools/tool_config.c src/trigger_manager.c \ src/prompt_template.c src/http_api.c src/setup_wizard.c src/mongoose.c src/debug.c \ -o /build/didactyl_static \ - nostr_core_lib/libnostr_core_x64.a \ + $NOSTR_LIB \ -lsecp256k1 \ $OPENSSL_LIBS \ $CURL_LIBS \ diff --git a/README.md b/README.md index f816594..8757fbe 100644 --- a/README.md +++ b/README.md @@ -55,11 +55,11 @@ Skills compose by adoption-list order (`10123`) and trigger tags carry runtime e Didactyl will support local inference, which is very privacy preserving. Remote inference does however have it's advantages, and in those cases Didactyl supports using Bitcoin Lightning and eCash inference providers. -## Current Status — v0.0.87 +## Current Status — v0.0.88 **Active build — this project is barely working. Experiment at your own risk.** -> Last release update: v0.0.87 — Fix config_store d_tag use-after-free causing llm_config replacement failures +> Last release update: v0.0.88 — Add full static ARM64 build support for didactyl and c-relay with dynamic nostr lib resolution and --platform override - Connects to configured relays with auto-reconnect and relay state transition logging - Publishes configured startup events per relay as each relay becomes connected diff --git a/build_static.sh b/build_static.sh index f0bacc3..d586aee 100755 --- a/build_static.sh +++ b/build_static.sh @@ -11,8 +11,19 @@ DOCKERFILE="$SCRIPT_DIR/Dockerfile.alpine-musl" # Parse command line arguments DEBUG_BUILD=false -if [[ "$1" == "--debug" ]]; then - DEBUG_BUILD=true +TARGET_PLATFORM="" +for arg in "$@"; do + case "$arg" in + --debug) + DEBUG_BUILD=true + ;; + --platform=*) + TARGET_PLATFORM="${arg#*=}" + ;; + esac +done + +if [ "$DEBUG_BUILD" = true ]; then echo "==========================================" echo "Didactyl MUSL Static Binary Builder (DEBUG MODE)" echo "==========================================" @@ -61,24 +72,45 @@ DOCKER_CMD="docker" echo "✓ Docker is available and running" echo "" -# Detect architecture -ARCH=$(uname -m) -case "$ARCH" in - x86_64) - PLATFORM="linux/amd64" - OUTPUT_NAME="didactyl_static_x86_64" - ;; - aarch64|arm64) - PLATFORM="linux/arm64" - OUTPUT_NAME="didactyl_static_arm64" - ;; - *) - echo "WARNING: Unknown architecture: $ARCH" - echo "Defaulting to linux/amd64" - PLATFORM="linux/amd64" - OUTPUT_NAME="didactyl_static_${ARCH}" - ;; -esac +# Detect architecture (or use explicit target platform override) +if [ -n "$TARGET_PLATFORM" ]; then + PLATFORM="$TARGET_PLATFORM" + case "$PLATFORM" in + linux/amd64) + OUTPUT_NAME="didactyl_static_x86_64" + ;; + linux/arm64) + OUTPUT_NAME="didactyl_static_arm64" + ;; + linux/arm/v7) + OUTPUT_NAME="didactyl_static_armv7" + ;; + linux/arm/v6) + OUTPUT_NAME="didactyl_static_armv6" + ;; + *) + OUTPUT_NAME="didactyl_static_custom" + ;; + esac +else + ARCH=$(uname -m) + case "$ARCH" in + x86_64) + PLATFORM="linux/amd64" + OUTPUT_NAME="didactyl_static_x86_64" + ;; + aarch64|arm64) + PLATFORM="linux/arm64" + OUTPUT_NAME="didactyl_static_arm64" + ;; + *) + echo "WARNING: Unknown architecture: $ARCH" + echo "Defaulting to linux/amd64" + PLATFORM="linux/amd64" + OUTPUT_NAME="didactyl_static_${ARCH}" + ;; + esac +fi # Append _debug suffix to output name for debug builds if [ "$DEBUG_BUILD" = true ]; then diff --git a/src/main.h b/src/main.h index 50f951a..37a8e97 100644 --- a/src/main.h +++ b/src/main.h @@ -12,8 +12,8 @@ // Using DIDACTYL_ prefix to avoid conflicts with nostr_core_lib VERSION macros #define DIDACTYL_VERSION_MAJOR 0 #define DIDACTYL_VERSION_MINOR 0 -#define DIDACTYL_VERSION_PATCH 87 -#define DIDACTYL_VERSION "v0.0.87" +#define DIDACTYL_VERSION_PATCH 88 +#define DIDACTYL_VERSION "v0.0.88" // Agent metadata #define DIDACTYL_NAME "Didactyl"