@@ -133,7 +133,8 @@ private function createZigCcScript(string $bin_dir): void
133133 $ script_content = <<<'EOF'
134134#!/usr/bin/env bash
135135
136- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
136+ LIBDIR="$(realpath "$(dirname "$(gcc -print-file-name=libc.so)")")"
137+ SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
137138BUILDROOT_ABS="$(realpath "$SCRIPT_DIR/../../buildroot/include" 2>/dev/null || echo "")"
138139PARSED_ARGS=()
139140
@@ -188,8 +189,6 @@ private function createZigCcScript(string $bin_dir): void
188189esac
189190
190191SPC_TARGET="${SPC_TARGET:-$ARCH-$OS}"
191- SPC_LIBC="${SPC_LIBC}"
192- SPC_LIBC_VERSION="${SPC_LIBC_VERSION}"
193192
194193if [ "$SPC_LIBC" = "glibc" ]; then
195194 SPC_LIBC="gnu"
@@ -199,17 +198,38 @@ private function createZigCcScript(string $bin_dir): void
199198 exec zig cc "${PARSED_ARGS[@]}"
200199elif [ -z "$SPC_LIBC" ] && [ -z "$SPC_LIBC_VERSION" ]; then
201200 exec zig cc -target ${SPC_TARGET} "${PARSED_ARGS[@]}"
202- elif [ -z "$SPC_LIBC_VERSION" ]; then
203- exec zig cc -target ${SPC_TARGET}-${SPC_LIBC} -L/usr/lib64 -lstdc++ "${PARSED_ARGS[@]}"
204201else
205- error_output=$(zig cc -target ${SPC_TARGET}-${SPC_LIBC}.${SPC_LIBC_VERSION} "${PARSED_ARGS[@]}" 2>&1 >/dev/null)
206- if echo "$error_output" | grep -q "zig: error: version '.*' in target triple '${SPC_TARGET}-${SPC_LIBC}\..*' is invalid"; then
207- exec zig cc -target ${SPC_TARGET}-${SPC_LIBC} -L/usr/lib64 -lstdc++ "${PARSED_ARGS[@]}"
202+ TARGET="${SPC_TARGET}-${SPC_LIBC}"
203+ [ -n "$SPC_LIBC_VERSION" ] && TARGET="${TARGET}.${SPC_LIBC_VERSION}"
204+
205+ output=$(zig cc -target "$TARGET" -L"$LIBDIR" -lstdc++ "${PARSED_ARGS[@]}" 2>&1)
206+ status=$?
207+
208+ filtered_output=$(echo "$output" | grep -v "version '.*' in target triple")
209+
210+ if [ $status -eq 0 ]; then
211+ echo "$filtered_output"
212+ exit 0
213+ fi
214+
215+ if echo "$output" | grep -q "version '.*' in target triple"; then
216+ TARGET_FALLBACK="${SPC_TARGET}-${SPC_LIBC}"
217+ output=$(zig cc -target "$TARGET_FALLBACK" -L"$LIBDIR" -lstdc++ "${PARSED_ARGS[@]}" 2>&1)
218+ status=$?
219+
220+ filtered_output=$(echo "$output" | grep -v "version '.*' in target triple")
221+
222+ if [ $status -eq 0 ]; then
223+ echo "$filtered_output"
224+ exit 0
225+ else
226+ exec zig cc -target "$TARGET_FALLBACK" "${PARSED_ARGS[@]}"
227+ fi
208228 else
209- exec zig cc -target ${SPC_TARGET}-${SPC_LIBC}.${SPC_LIBC_VERSION} -L/usr/lib64 -lstdc++ "${PARSED_ARGS[@]}"
229+ echo "$filtered_output"
230+ exec zig cc -target "$TARGET" "${PARSED_ARGS[@]}"
210231 fi
211232fi
212-
213233EOF;
214234
215235 file_put_contents ("{$ bin_dir }/zig-cc " , $ script_content );
0 commit comments