mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-13 20:05:35 +08:00
refactor our
This commit is contained in:
@@ -130,107 +130,8 @@ class Zig extends CustomPackage
|
|||||||
|
|
||||||
private function createZigCcScript(string $bin_dir): void
|
private function createZigCcScript(string $bin_dir): void
|
||||||
{
|
{
|
||||||
$script_content = <<<'EOF'
|
$script_path = __DIR__ . '/../scripts/zig-cc.sh';
|
||||||
#!/usr/bin/env bash
|
$script_content = file_get_contents($script_path);
|
||||||
|
|
||||||
LIBDIR="$(realpath "$(dirname "$(gcc -print-file-name=libc.so)")")"
|
|
||||||
SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
|
|
||||||
BUILDROOT_ABS="$(realpath "$SCRIPT_DIR/../../buildroot/include" 2>/dev/null || echo "")"
|
|
||||||
PARSED_ARGS=()
|
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case "$1" in
|
|
||||||
-isystem)
|
|
||||||
shift
|
|
||||||
ARG="$1"
|
|
||||||
[[ -n "$ARG" ]] && shift || break
|
|
||||||
ARG_ABS="$(realpath "$ARG" 2>/dev/null || echo "")"
|
|
||||||
if [[ -n "$ARG_ABS" && "$ARG_ABS" == "$BUILDROOT_ABS" ]]; then
|
|
||||||
PARSED_ARGS+=("-I$ARG")
|
|
||||||
else
|
|
||||||
PARSED_ARGS+=("-isystem" "$ARG")
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
-isystem*)
|
|
||||||
ARG="${1#-isystem}"
|
|
||||||
shift
|
|
||||||
ARG_ABS="$(realpath "$ARG" 2>/dev/null || echo "")"
|
|
||||||
if [[ -n "$ARG_ABS" && "$ARG_ABS" == "$BUILDROOT_ABS" ]]; then
|
|
||||||
PARSED_ARGS+=("-I$ARG")
|
|
||||||
else
|
|
||||||
PARSED_ARGS+=("-isystem$ARG")
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
PARSED_ARGS+=("$1")
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
SPC_TARGET_WAS_SET=1
|
|
||||||
if [ -z "${SPC_TARGET+x}" ]; then
|
|
||||||
SPC_TARGET_WAS_SET=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
UNAME_M="$(uname -m)"
|
|
||||||
UNAME_S="$(uname -s)"
|
|
||||||
|
|
||||||
case "$UNAME_M" in
|
|
||||||
x86_64) ARCH="x86_64" ;;
|
|
||||||
aarch64|arm64) ARCH="aarch64" ;;
|
|
||||||
*) echo "Unsupported architecture: $UNAME_M" >&2; exit 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$UNAME_S" in
|
|
||||||
Linux) OS="linux" ;;
|
|
||||||
Darwin) OS="macos" ;;
|
|
||||||
*) echo "Unsupported OS: $UNAME_S" >&2; exit 1 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
SPC_TARGET="${SPC_TARGET:-$ARCH-$OS}"
|
|
||||||
|
|
||||||
if [ "$SPC_LIBC" = "glibc" ]; then
|
|
||||||
SPC_LIBC="gnu"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$SPC_TARGET_WAS_SET" -eq 0 ] && [ -z "$SPC_LIBC" ] && [ -z "$SPC_LIBC_VERSION" ]; then
|
|
||||||
exec zig cc "${PARSED_ARGS[@]}"
|
|
||||||
elif [ -z "$SPC_LIBC" ] && [ -z "$SPC_LIBC_VERSION" ]; then
|
|
||||||
exec zig cc -target ${SPC_TARGET} "${PARSED_ARGS[@]}"
|
|
||||||
else
|
|
||||||
TARGET="${SPC_TARGET}-${SPC_LIBC}"
|
|
||||||
[ -n "$SPC_LIBC_VERSION" ] && TARGET="${TARGET}.${SPC_LIBC_VERSION}"
|
|
||||||
|
|
||||||
output=$(zig cc -target "$TARGET" -L"$LIBDIR" -lstdc++ "${PARSED_ARGS[@]}" 2>&1)
|
|
||||||
status=$?
|
|
||||||
|
|
||||||
filtered_output=$(echo "$output" | grep -v "version '.*' in target triple")
|
|
||||||
|
|
||||||
if [ $status -eq 0 ]; then
|
|
||||||
echo "$filtered_output"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if echo "$output" | grep -q "version '.*' in target triple"; then
|
|
||||||
TARGET_FALLBACK="${SPC_TARGET}-${SPC_LIBC}"
|
|
||||||
output=$(zig cc -target "$TARGET_FALLBACK" -L"$LIBDIR" -lstdc++ "${PARSED_ARGS[@]}" 2>&1)
|
|
||||||
status=$?
|
|
||||||
|
|
||||||
filtered_output=$(echo "$output" | grep -v "version '.*' in target triple")
|
|
||||||
|
|
||||||
if [ $status -eq 0 ]; then
|
|
||||||
echo "$filtered_output"
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
exec zig cc -target "$TARGET_FALLBACK" "${PARSED_ARGS[@]}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "$filtered_output"
|
|
||||||
exec zig cc -target "$TARGET" "${PARSED_ARGS[@]}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
EOF;
|
|
||||||
|
|
||||||
file_put_contents("{$bin_dir}/zig-cc", $script_content);
|
file_put_contents("{$bin_dir}/zig-cc", $script_content);
|
||||||
chmod("{$bin_dir}/zig-cc", 0755);
|
chmod("{$bin_dir}/zig-cc", 0755);
|
||||||
|
|||||||
99
src/SPC/store/scripts/zig-cc.sh
Normal file
99
src/SPC/store/scripts/zig-cc.sh
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
LIBDIR="$(realpath "$(dirname "$(gcc -print-file-name=libc.so)")")"
|
||||||
|
SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
|
||||||
|
BUILDROOT_ABS="$(realpath "$SCRIPT_DIR/../../buildroot/include" 2>/dev/null || echo "")"
|
||||||
|
PARSED_ARGS=()
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
-isystem)
|
||||||
|
shift
|
||||||
|
ARG="$1"
|
||||||
|
[[ -n "$ARG" ]] && shift || break
|
||||||
|
ARG_ABS="$(realpath "$ARG" 2>/dev/null || echo "")"
|
||||||
|
if [[ -n "$ARG_ABS" && "$ARG_ABS" == "$BUILDROOT_ABS" ]]; then
|
||||||
|
PARSED_ARGS+=("-I$ARG")
|
||||||
|
else
|
||||||
|
PARSED_ARGS+=("-isystem" "$ARG")
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
-isystem*)
|
||||||
|
ARG="${1#-isystem}"
|
||||||
|
shift
|
||||||
|
ARG_ABS="$(realpath "$ARG" 2>/dev/null || echo "")"
|
||||||
|
if [[ -n "$ARG_ABS" && "$ARG_ABS" == "$BUILDROOT_ABS" ]]; then
|
||||||
|
PARSED_ARGS+=("-I$ARG")
|
||||||
|
else
|
||||||
|
PARSED_ARGS+=("-isystem$ARG")
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
PARSED_ARGS+=("$1")
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
SPC_TARGET_WAS_SET=1
|
||||||
|
if [ -z "${SPC_TARGET+x}" ]; then
|
||||||
|
SPC_TARGET_WAS_SET=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
UNAME_M="$(uname -m)"
|
||||||
|
UNAME_S="$(uname -s)"
|
||||||
|
|
||||||
|
case "$UNAME_M" in
|
||||||
|
x86_64) ARCH="x86_64" ;;
|
||||||
|
aarch64|arm64) ARCH="aarch64" ;;
|
||||||
|
*) echo "Unsupported architecture: $UNAME_M" >&2; exit 1 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$UNAME_S" in
|
||||||
|
Linux) OS="linux" ;;
|
||||||
|
Darwin) OS="macos" ;;
|
||||||
|
*) echo "Unsupported OS: $UNAME_S" >&2; exit 1 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
SPC_TARGET="${SPC_TARGET:-$ARCH-$OS}"
|
||||||
|
|
||||||
|
if [ "$SPC_LIBC" = "glibc" ]; then
|
||||||
|
SPC_LIBC="gnu"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$SPC_TARGET_WAS_SET" -eq 0 ] && [ -z "$SPC_LIBC" ] && [ -z "$SPC_LIBC_VERSION" ]; then
|
||||||
|
exec zig cc "${PARSED_ARGS[@]}"
|
||||||
|
elif [ -z "$SPC_LIBC" ] && [ -z "$SPC_LIBC_VERSION" ]; then
|
||||||
|
exec zig cc -target ${SPC_TARGET} "${PARSED_ARGS[@]}"
|
||||||
|
else
|
||||||
|
TARGET="${SPC_TARGET}-${SPC_LIBC}"
|
||||||
|
[ -n "$SPC_LIBC_VERSION" ] && TARGET="${TARGET}.${SPC_LIBC_VERSION}"
|
||||||
|
|
||||||
|
output=$(zig cc -target "$TARGET" -L"$LIBDIR" -lstdc++ "${PARSED_ARGS[@]}" 2>&1)
|
||||||
|
status=$?
|
||||||
|
|
||||||
|
filtered_output=$(echo "$output" | grep -v "version '.*' in target triple")
|
||||||
|
|
||||||
|
if [ $status -eq 0 ]; then
|
||||||
|
echo "$filtered_output"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$output" | grep -q "version '.*' in target triple"; then
|
||||||
|
TARGET_FALLBACK="${SPC_TARGET}-${SPC_LIBC}"
|
||||||
|
output=$(zig cc -target "$TARGET_FALLBACK" -L"$LIBDIR" -lstdc++ "${PARSED_ARGS[@]}" 2>&1)
|
||||||
|
status=$?
|
||||||
|
|
||||||
|
filtered_output=$(echo "$output" | grep -v "version '.*' in target triple")
|
||||||
|
|
||||||
|
if [ $status -eq 0 ]; then
|
||||||
|
echo "$filtered_output"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
exec zig cc -target "$TARGET_FALLBACK" "${PARSED_ARGS[@]}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$filtered_output"
|
||||||
|
exec zig cc -target "$TARGET" "${PARSED_ARGS[@]}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user