Skip to content

Commit b535600

Browse files
committed
this is insane
1 parent 762c554 commit b535600

File tree

1 file changed

+30
-10
lines changed

1 file changed

+30
-10
lines changed

src/SPC/store/pkg/Zig.php

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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]}")"
137138
BUILDROOT_ABS="$(realpath "$SCRIPT_DIR/../../buildroot/include" 2>/dev/null || echo "")"
138139
PARSED_ARGS=()
139140
@@ -188,8 +189,6 @@ private function createZigCcScript(string $bin_dir): void
188189
esac
189190
190191
SPC_TARGET="${SPC_TARGET:-$ARCH-$OS}"
191-
SPC_LIBC="${SPC_LIBC}"
192-
SPC_LIBC_VERSION="${SPC_LIBC_VERSION}"
193192
194193
if [ "$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[@]}"
200199
elif [ -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[@]}"
204201
else
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
211232
fi
212-
213233
EOF;
214234

215235
file_put_contents("{$bin_dir}/zig-cc", $script_content);

0 commit comments

Comments
 (0)