From a47633119fd13388c687f67c0ae4653eed08efde Mon Sep 17 00:00:00 2001
From: Aditya Kamath <Aditya.Kamath1@ibm.com>
Date: Wed, 20 May 2026 03:38:59 -0500
Subject: [PATCH 03/10] Teach Cargo AIX Linker options

This patch creates a wrapper for AIX Linker options equivalent in uv.
---
 .cargo/config.toml   |  6 ++++
 aix-clang-wrapper.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+)
 create mode 100755 aix-clang-wrapper.sh

diff --git a/.cargo/config.toml b/.cargo/config.toml
index bc7bfd60d..854e8dfff 100644
--- a/.cargo/config.toml
+++ b/.cargo/config.toml
@@ -7,3 +7,9 @@ dev = "run --package uv-dev --features dev"
 # See: https://github.com/astral-sh/ruff/issues/11503
 [target.'cfg(all(target_env = "msvc", target_os = "windows"))']
 rustflags = ["-C", "target-feature=+crt-static"]
+
+[target.powerpc64-ibm-aix]
+linker = "./aix-clang-wrapper.sh"
+ar = "/usr/bin/ar"
+
+[build]
diff --git a/aix-clang-wrapper.sh b/aix-clang-wrapper.sh
new file mode 100755
index 000000000..ed73b3da0
--- /dev/null
+++ b/aix-clang-wrapper.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+# AIX clang wrapper with dummy main for proc-macros
+
+args=()
+skip_next=false
+is_shared_lib=false
+needs_dummy_main=false
+
+# Check if this is a shared library build
+for arg in "$@"; do
+    case "$arg" in
+        -shared|-bM:SRE)
+            is_shared_lib=true
+            ;;
+        -bnoentry)
+            needs_dummy_main=true
+            ;;
+    esac
+done
+
+# If building shared lib with -bnoentry, create dummy main
+if [ "$is_shared_lib" = true ] && [ "$needs_dummy_main" = true ]; then
+    # Create temporary dummy main object
+    TEMP_DIR=$(mktemp -d)
+    cat > $TEMP_DIR/dummy_main.c << 'DUMMY_EOF'
+/* Dummy main for AIX proc-macro shared libraries */
+int main(void) { return 0; }
+DUMMY_EOF
+    
+    /opt/IBM/openxlC/17.1.2/bin/ibm-clang -c -o $TEMP_DIR/dummy_main.o $TEMP_DIR/dummy_main.c
+    DUMMY_OBJ="$TEMP_DIR/dummy_main.o"
+fi
+
+# Filter unsupported flags
+for arg in "$@"; do
+    if [ "$skip_next" = true ]; then
+        skip_next=false
+        continue
+    fi
+    
+    case "$arg" in
+        -Wl,--version-script=*|--version-script=*)
+            ;;
+        -Wl,--no-undefined-version|--no-undefined-version)
+            ;;
+        -Wl,--version-script|--version-script)
+            skip_next=true
+            ;;
+        *)
+            args+=("$arg")
+            ;;
+    esac
+done
+
+# Add dummy main object if needed
+if [ -n "$DUMMY_OBJ" ]; then
+    args+=("$DUMMY_OBJ")
+fi
+
+# Execute the actual compiler
+/opt/IBM/openxlC/17.1.2/bin/ibm-clang "${args[@]}"
+RESULT=$?
+
+# Cleanup
+if [ -n "$TEMP_DIR" ]; then
+    rm -rf $TEMP_DIR
+fi
+
+exit $RESULT
-- 
2.51.2

