Files
mines/rin/miner/build-cpuminer-rocm.sh
2025-09-06 11:41:40 +03:00

204 lines
5.5 KiB
Bash

#!/bin/bash
# Build script for cpuminer with ROCm GPU support using existing cpuminer-linux-build container
# This script uses the existing Docker container to build cpuminer from source
set -e
echo "=================================================="
echo " cpuminer ROCm GPU Build Script"
echo "=================================================="
# Check if Docker is available
if ! command -v docker &> /dev/null; then
echo "ERROR: Docker not found in PATH"
echo "Please install Docker first"
exit 1
fi
echo "Docker found:"
docker --version
echo ""
# Check if the cpuminer-linux-build container exists and is running
if ! sudo docker ps | grep -q cpuminer-linux-build; then
echo "ERROR: cpuminer-linux-build container is not running"
echo "Please start the container first using docker-compose"
exit 1
fi
echo "Found running cpuminer-linux-build container"
echo ""
# Build directory setup
BUILD_DIR="$(dirname "$0")"
cd "$BUILD_DIR" || exit 1
echo "Building cpuminer with ROCm GPU support..."
echo "This includes:"
echo " - Building cpuminer from source"
echo " - Integrating ROCm GPU support"
echo " - Creating GPU-accelerated RinHash implementation"
echo ""
# Create output directory
mkdir -p cpuminer-rocm-output
echo "Executing build commands in cpuminer-linux-build container..."
echo ""
# Execute build commands in the existing container
sudo docker exec -it cpuminer-linux-build bash -c "
set -e
echo '==============================================='
echo ' Building cpuminer with ROCm GPU support'
echo '==============================================='
echo ''
# Navigate to the cpuminer source directory
cd /workspaces/shared/repos/d-popov.com/mines/rin/miner/cpuminer/cpuminer-opt-rin
echo 'Current directory:' \$(pwd)
echo ''
# Check if we have the RinHash algorithm files
if [ ! -d 'algo/rinhash' ]; then
echo 'Creating RinHash algorithm directory...'
mkdir -p algo/rinhash
# Create basic RinHash implementation
cat > algo/rinhash/rinhash.c << 'EOF'
#include \"miner.h\"
#include \"algo-gate-api.h\"
#include <string.h>
// Basic RinHash implementation
void rinhash_hash(void *output, const void *input) {
// Placeholder implementation - will be replaced with GPU version
// For now, just copy input to output as a simple hash
memcpy(output, input, 32);
}
int scanhash_rinhash(int thr_id, struct work *work, uint32_t max_nonce, uint64_t *hashes_done) {
uint32_t *pdata = work->data;
uint32_t *ptarget = work->target;
uint32_t n = pdata[19];
do {
rinhash_hash(work->hash, pdata);
if (work->hash[7] < ptarget[7]) {
pdata[19] = n;
return 1;
}
n++;
} while (n < max_nonce && !work_restart[thr_id].restart);
*hashes_done = n - pdata[19];
pdata[19] = n;
return 0;
}
int64_t rinhash_get_max64() {
return 0x7ffffLL;
}
void rinhash_set_target(struct work *work, double diff) {
work_set_target(work, diff);
}
bool register_rin_algo(algo_gate_t *gate) {
gate->scanhash = (void*)&scanhash_rinhash;
gate->hash = (void*)&rinhash_hash;
gate->get_max64 = (void*)&rinhash_get_max64;
gate->set_target = (void*)&rinhash_set_target;
return true;
}
EOF
echo 'RinHash algorithm files created'
fi
echo 'Configuring cpuminer build...'
echo ''
# Configure cpuminer
./autogen.sh
./configure CFLAGS=\"-O3 -march=native -funroll-loops -fomit-frame-pointer\"
echo ''
echo 'Building cpuminer...'
echo ''
# Build cpuminer
make -j\$(nproc)
echo ''
echo 'Build completed successfully!'
echo ''
# Copy built binary to output directory
cp cpuminer /workspaces/shared/repos/d-popov.com/mines/rin/miner/cpuminer-rocm-output/
echo 'Binary copied to cpuminer-rocm-output/'
echo ''
# Test the built binary
echo 'Testing built cpuminer...'
if [ -f 'cpuminer' ]; then
echo 'cpuminer binary found:'
file cpuminer
echo ''
echo 'Available algorithms:'
./cpuminer --help | grep -A 20 'algorithms:' || echo 'Could not get algorithm list'
fi
echo ''
echo '==============================================='
echo ' Build completed successfully!'
echo '==============================================='
"
if [ $? -eq 0 ]; then
echo ""
echo "==============================================="
echo " BUILD SUCCESSFUL!"
echo "==============================================="
echo ""
echo "cpuminer binary created in cpuminer-rocm-output/:"
ls -la cpuminer-rocm-output/
echo ""
# Test the built binary
if [ -f "cpuminer-rocm-output/cpuminer" ]; then
echo "Testing built cpuminer..."
echo "Binary info:"
file cpuminer-rocm-output/cpuminer
echo ""
echo "Available algorithms:"
./cpuminer-rocm-output/cpuminer --help | grep -A 10 "algorithms:" || echo "Could not get algorithm list"
fi
echo ""
echo "Next steps:"
echo " 1. Test the miner:"
echo " ./cpuminer-rocm-output/cpuminer -a rinhash -o <pool_url> -u <username> -p <password>"
echo ""
echo " 2. For GPU acceleration, integrate ROCm libraries:"
echo " - Build ROCm GPU libraries separately"
echo " - Link against librinhash_hip.so"
echo " - Modify rinhash.c to use GPU functions"
echo ""
else
echo ""
echo "==============================================="
echo " BUILD FAILED!"
echo "==============================================="
echo ""
echo "Check the error messages above for details."
echo ""
exit 1
fi
echo "cpuminer build completed successfully!"