Files
gpt4free/scripts/build-nuitka.sh

88 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# Nuitka build script for g4f
# This script builds g4f executables using Nuitka for different platforms and architectures
set -e
# Default values
PLATFORM=${PLATFORM:-$(uname -s | tr '[:upper:]' '[:lower:]')}
ARCHITECTURE=${ARCHITECTURE:-$(uname -m)}
VERSION=${G4F_VERSION:-0.0.0-dev}
OUTPUT_DIR=${OUTPUT_DIR:-dist}
# Normalize architecture names
case "${ARCHITECTURE}" in
"x86_64"|"amd64")
ARCH="x64"
;;
"arm64"|"aarch64")
ARCH="arm64"
;;
"armv7l"|"armhf")
ARCH="armv7"
;;
*)
ARCH="${ARCHITECTURE}"
;;
esac
# Create output directory
mkdir -p "${OUTPUT_DIR}"
echo "Building g4f with Nuitka..."
echo "Platform: ${PLATFORM}"
echo "Architecture: ${ARCH} (${ARCHITECTURE})"
echo "Version: ${VERSION}"
echo "Output: ${OUTPUT_DIR}"
# Set output filename based on platform
case "${PLATFORM}" in
"windows"|"win32")
OUTPUT_NAME="g4f-windows-${VERSION}-${ARCH}.exe"
NUITKA_ARGS="--windows-console-mode=attach --onefile"
;;
"darwin"|"macos")
OUTPUT_NAME="g4f-macos-${VERSION}-${ARCH}"
NUITKA_ARGS="--macos-create-app-bundle --onefile"
;;
"linux")
OUTPUT_NAME="g4f-linux-${VERSION}-${ARCH}"
NUITKA_ARGS="--onefile"
;;
*)
OUTPUT_NAME="g4f-${PLATFORM}-${VERSION}-${ARCH}"
NUITKA_ARGS="--onefile"
;;
esac
# Basic Nuitka arguments
NUITKA_COMMON_ARGS="
--standalone
--output-filename=${OUTPUT_NAME}
--output-dir=${OUTPUT_DIR}
--remove-output
--no-pyi-file
--assume-yes-for-downloads
--show-progress
--show-memory
"
# Platform-specific optimizations
if [[ "${PLATFORM}" == "windows" ]] && [[ -f "projects/windows/icon.ico" ]]; then
NUITKA_ARGS="${NUITKA_ARGS} --windows-icon-from-ico=projects/windows/icon.ico"
fi
# Build command
echo "Running Nuitka build..."
python -m nuitka ${NUITKA_COMMON_ARGS} ${NUITKA_ARGS} g4f_cli.py
echo "Build completed: ${OUTPUT_DIR}/${OUTPUT_NAME}"
# Verify the build
if [[ -f "${OUTPUT_DIR}/${OUTPUT_NAME}" ]]; then
echo "✓ Build successful!"
ls -la "${OUTPUT_DIR}/${OUTPUT_NAME}"
else
echo "✗ Build failed - output file not found"
exit 1
fi