This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
MinIO C++ SDK is an S3-compatible object storage client library. This fork extends the upstream minio-cpp with RDMA (Remote Direct Memory Access) and NVIDIA GPU Direct Storage support for high-performance data transfers.
- CMake 3.10+
- C++17 compiler
- vcpkg package manager (set
VCPKG_ROOTenvironment variable) - NVIDIA CUDA toolkit at
/usr/local/cuda(for RDMA/GPU features) - cuObjClient library (for RDMA support)
# Configure both Debug and Release builds (recommended)
./configure.sh -DMINIO_CPP_TEST=ON
# Or configure manually for Debug
cmake . -B build/Debug -DCMAKE_BUILD_TYPE=Debug -DMINIO_CPP_TEST=ON
# Build
cmake --build ./build/DebugMINIO_CPP_TEST=ON- Build tests and examplesMINIO_CPP_MAKE_DOC=ON- Build Doxygen documentationBUILD_SHARED_LIBS=ON- Build shared library (default is static)
./build/Debug/testsExamples are built when MINIO_CPP_TEST=ON. Run individual examples:
./build/Debug/MakeBucket
./build/Debug/PutObject
./build/Debug/GetPutRDMA # RDMA-specific example
./build/Debug/GPUHostDisk # GPU Direct Storage exampleminio::s3::Client(include/miniocpp/client.h,src/client.cc) - Main S3 client class with high-level operations (UploadObject, DownloadObject, etc.)minio::s3::BaseClient(include/miniocpp/baseclient.h,src/baseclient.cc) - Base class implementing low-level S3 API operations and request execution
args.h- Argument structs for each S3 operation (e.g.,PutObjectArgs,GetObjectArgs)response.h- Response types returned by operationsrequest.h- HTTP request constructionhttp.h- HTTP client abstraction using curlpp
providers.h/credentials.h- Credential providers (StaticProvider, EnvProvider, etc.)signer.h- AWS Signature V4 request signing
rdma.h- RDMA transport layer with S3 signing for GPU Direct Storagerdma-httplib.h- HTTP-over-RDMA implementationnvidia-cufile.h- NVIDIA cuFile integration headersnvidia-cuobjclient.h- cuObjClient wrapper for RDMA operations
The RDMA implementation uses objectPut/objectGet callbacks that are invoked by the cuFile RDMA layer for direct GPU-to-storage transfers.
- curlpp - HTTP client
- inih - INI file parsing for config
- nlohmann-json - JSON handling
- openssl - TLS/crypto
- pugixml - XML parsing for S3 responses
Additional system dependencies for RDMA: libcufile, libcuobjclient, libibverbs, librdmacm
- Do not add obvious comments (e.g., "Safe: Validate() ensures X has value")
- Use
std::optional<T>for values that may be uninitialized (not sentinel values like-1for unsigned types) - RDMA buffers require page-aligned memory - use
posix_memalignorstd::aligned_alloc(C++17)