Skip to content

Latest commit

 

History

History
118 lines (93 loc) · 4.68 KB

File metadata and controls

118 lines (93 loc) · 4.68 KB

rocBLAS Dependency Logic

This document describes the decision flow for managing dependencies when building rocBLAS, including AOCL/BLAS library selection and CMake version management.

STATUS: ✅ IMPLEMENTED in install.sh

Decision Flow (install.sh)

1. Are we building clients (-c flag)?
   NO → AOCL not needed (done) ✓

2. Is -d (dependencies) flag set?
   NO → Skip AOCL setup, CMake will search for existing libraries

3. Detect AOCL (via detect_aocl function):
   a) Is AOCL_ROOT set?
      YES → Validate it
            ├─ VALID → Use AOCL at AOCL_ROOT (done) ✓
            └─ INVALID → Error and exit ✗

   b) Is AOCL 5.x installed on system?
      YES → Use system AOCL 5.x (done) ✓

4. Is --skip-aocl flag set?
   YES → Skip AOCL 5.2 build, CMake will search for:
         - AOCL 4.x (if installed) ✓
         - System CBLAS via pkg-config ⚠
         - Error if nothing found ✗

   NO → Build AOCL 5.2 as local dependency (done) ✓
        (CMake auto-downloaded if needed - no flag required)

CMake Local Dependency Logic

CMake is automatically downloaded as a local build dependency when needed (no system installation):

Auto-Download Triggers:
1. System CMake < 3.24.4 (rocBLAS minimum)
   → Downloads CMake 3.24.4 to ${build_dir}/deps/cmake-3.24.4/

2. System CMake < 3.26.0 AND building AOCL 5.2
   → Downloads CMake 3.26.0 to ${build_dir}/deps/cmake-3.26.0/

3. --cmake_install flag specified
   → Force-downloads CMake 3.26.0 (even if system version is sufficient)

wget is automatically added to dependencies when CMake download is needed.

Key Points:

  • No --cmake_install flag required for normal use
  • CMake is downloaded as a pre-built binary (fast!)
  • Downloaded to local build directory, NOT installed to system
  • System CMake remains untouched
  • cmake_executable variable is updated to point to local version
  • Downloaded CMake only used for this build

BLAS Library Search Order (CMakeLists.txt)

After install.sh completes, CMake searches for BLAS libraries in this order:

1. Local build:     ${BUILD_DIR}/deps/aocl/install_package/lib/libaocl.*
2. AOCL_ROOT:       $AOCL_ROOT/lib*/libaocl.*
3. System AOCL 5.x: $HOME/aocl/*/*/lib*/libaocl.*
4. System AOCL 5.x: /opt/AMD/aocl/[0-9]*/lib*/libaocl.*
5. Legacy AOCL 4.x: /opt/AMD/aocl/aocl-linux-*/lib*/libaocl.* (rare)
6. System AOCL 4.x: /opt/AMD/aocl/aocl-linux-*/gcc/lib_ILP64/libblis-mt.a
7. System AOCL 4.x: /opt/AMD/aocl/aocl-linux-*/aocc/lib*/libblis-mt.a
8. Bundled BLIS:    ${BUILD_DIR}/deps/amd-blis/lib*/libblis-mt.a
9. System CBLAS:    via pkg-config (OpenBLAS, etc.)

Implementation Notes

  • install.sh controls the build decision and environment setup
  • CMakeLists.txt searches in natural order (local build → AOCL_ROOT → system paths)
  • AOCL_ROOT validation happens in install.sh via detect_aocl()
  • System detection happens in install.sh via detect_aocl()
  • CMake automatically downloaded as local dependency when needed

Key Functions

Detection/Validation (pure detection, no side effects):

  • detect_aocl() - Detects and validates all available AOCL
    • Checks AOCL_ROOT (validates and errors if invalid)
    • Checks system AOCL 5.x installations
    • Returns status and sets AOCL_DETECTED variable

Local Dependencies:

  • install_cmake(version) - Downloads CMake pre-built binary as local dependency
    • Downloads and extracts to ${build_dir}/deps/ (NOT a system install)
    • Updates cmake_executable variable to use local version
  • build_aocl_5_2() - Builds AOCL 5.2 from source
    • Uses cmake_executable (should already be 3.26+ at this point)
    • Clones, builds, and installs to ${build_dir}/deps/aocl/
  • setup_aocl() - Main orchestrator
    • Calls detect_aocl() to see what's available
    • Decides whether to use existing or build new
    • Handles --skip-aocl and --clean-deps flags

Dependency Installation Flow

  1. Check if building clients - AOCL/BLAS only needed for clients
    • If NOT building clients → Skip all AOCL logic
  2. Early Detection - Check if we'll need to build AOCL 5.2
    • Call detect_aocl() silently
    • Check if --skip-aocl is set
  3. Decide CMake Needs - Will we need to download CMake?
    • Auto-download if: system CMake < 3.24.4 (rocBLAS minimum)
    • Auto-download if: building AOCL AND system CMake < 3.26
    • Force download if: --cmake_install flag set (even if version sufficient)
  4. Add wget - If CMake download needed, add wget to package dependencies
  5. Install Packages - Install all system packages (including wget if needed)
  6. Download CMake - If needed, download CMake binary to local build directory
  7. Later: setup_aocl() - Uses the local CMake (only called if building clients)