71 lines
2.2 KiB
Bash
Executable File
71 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Default architecture
|
|
DEFAULT_ARCH="linux/amd64"
|
|
|
|
# Supported architectures (adjust as needed)
|
|
ARCHITECTURES=("linux/amd64" "linux/arm64" "linux/arm/v7" "darwin/amd64" "darwin/arm64")
|
|
|
|
# Ensure all necessary directories exist and go modules are ready
|
|
prepare_build() {
|
|
# Create necessary directories if they don't exist
|
|
mkdir -p dist
|
|
mkdir -p build_logs
|
|
|
|
# Initialize go modules if go.mod does not exist
|
|
if [ ! -f go.mod ]; then
|
|
echo "Initializing Go modules"
|
|
go mod init yourmodule # Replace 'yourmodule' with your actual module name or path
|
|
fi
|
|
|
|
# Fetch and ensure all dependencies are up to date
|
|
echo "Checking dependencies..."
|
|
go mod tidy
|
|
}
|
|
|
|
# Build function
|
|
build_binary() {
|
|
os=$1
|
|
arch=$2
|
|
output_name="ssh-timeout"
|
|
|
|
if [[ "$os/$arch" != "$DEFAULT_ARCH" ]]; then
|
|
output_name="${output_name}_${os}_${arch}"
|
|
fi
|
|
|
|
output_name="dist/${output_name}"
|
|
|
|
# Dynamic Linking
|
|
echo "Building dynamically linked for ${os}/${arch} -> ${output_name}"
|
|
GOOS=${os} GOARCH=${arch} go build -o ${output_name} main.go 2>build_logs/${os}_${arch}_build.log
|
|
if [ $? -eq 0 ]; then
|
|
echo "Successfully built ${output_name}"
|
|
else
|
|
echo "Failed to build ${output_name}. Check build_logs/${os}_${arch}_build.log for errors."
|
|
fi
|
|
|
|
# Static Linking
|
|
if [[ "$os" == "linux" ]]; then # Typically, static linking is most relevant for Linux environments
|
|
static_output_name="${output_name}_static"
|
|
echo "Building statically linked for ${os}/${arch} -> ${static_output_name}"
|
|
CGO_ENABLED=0 GOOS=${os} GOARCH=${arch} go build -a -ldflags '-extldflags "-static"' -o ${static_output_name} main.go 2>build_logs/${os}_${arch}_static_build.log
|
|
if [ $? -eq 0 ]; then
|
|
echo "Successfully built ${static_output_name}"
|
|
else
|
|
echo "Failed to build ${static_output_name}. Check build_logs/${os}_${arch}_static_build.log for errors."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Main Build Process
|
|
prepare_build
|
|
for arch in "${ARCHITECTURES[@]}"; do
|
|
IFS='/' read -r -a parts <<< "$arch" # Split architecture string
|
|
os=${parts[0]}
|
|
arch=${parts[1]}
|
|
build_binary $os $arch
|
|
done
|
|
|
|
echo "Build process completed."
|
|
|