Skip to main content

rocprofsys-configure

Configure rocprofiler-systems build with CMake presets and custom options

跳到安装

来源信息

仓库
ROCm/rocprofiler-systems-skills
最近来源活动
2026年3月16日 11:36
检测到的 SKILL.md 语言
英语
星标
4
分支
0

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
rocprofsys-configure
description
Configure rocprofiler-systems build with CMake presets and custom options
# Configure ROCm Systems Profiler Build Configures the rocprofiler-systems project using CMake with presets or custom options. ## When to Use Use this skill when: - User wants to configure rocprofsys build - Setting up build for first time - Switching between debug/release builds - Changing CMake options (dependencies, features) - User asks "how do I configure rocprofsys?" ## Before You Start **Prerequisites:** - CMake 3.21 or higher - GCC 7+ compiler (or Clang if Dyninst is pre-installed) - Ninja or Make build system **Check prerequisites:** ```bash cmake --version # Should be >= 3.21 gcc --version # Should be >= 7.0 ninja --version # Optional but recommended ``` ## Process ### Phase 1: Find Project Location Since rocprofiler-systems is in a monorepo and may use git worktrees, find it dynamically. **Strategy:** 1. Check if current directory is inside the project 2. Search common worktree locations 3. Ask user for location ```bash # Check current directory if [ -f "CMakeLists.txt" ] && grep -q "rocprofiler-systems" CMakeLists.txt; then PROJECT_DIR="." # Search worktrees elif [ -d "/home/amd/worktree/rocm-systems" ]; then PROJECT_DIR=$(find /home/amd/worktree/rocm-systems -type d -name "rocprofiler-systems" | grep "projects/rocprofiler-systems$" | head -1) # Ask user else # Use AskUserQuestion to get path fi ``` **Validation:** - Must be the `projects/rocprofiler-systems/` directory (not monorepo root) - Must contain `CMakeLists.txt` and `CMakePresets.json` ### Phase 2: Choose Configuration Strategy Ask user what type of build they want: | Option | Preset | Use For | |--------|--------|---------| | Debug | `debug` | Development with debugging symbols | | Release | `release` | Production, optimized build | | Debug-Optimized | `debug-optimized` | Debug symbols + optimizations | | CI | `ci` | CI/CD builds with all features | | Custom | None | User specifies all options manually | Use **AskUserQuestion** to present options: ```markdown header: "Build Type" question: "Which build configuration do you want?" options: - label: "Debug (Recommended for development)" description: "Debug build with tests enabled" - label: "Release" description: "Optimized production build" - label: "Debug-Optimized" description: "Optimized with debug symbols" - label: "CI" description: "Full CI build configuration" - label: "Custom" description: "Specify options manually" ``` ### Phase 3: Select Build Directory **Options:** 1. **Use preset default** (recommended) - Debug → `build/debug` - Release → `build/release` - Debug-Optimized → `build/debug-optimized` - CI → `build/ci` 2. **Custom directory** - User specifies (e.g., `build/my-build`) **Ask user if they want to change default:** - If no, use preset default - If yes, ask for custom path ### Phase 4: Configure Dependencies The project has complex dependencies. Determine which to build from source: **Key dependencies:** - Dyninst (required for instrumentation) - TBB (required by Dyninst) - Boost (required by Dyninst) - Elfutils (required by Dyninst) - Libiberty (required by Dyninst) **Strategy:** 1. Try system packages first (faster) 2. If missing, build from source Use **AskUserQuestion**: ```markdown header: "Dependencies" question: "How should dependencies be handled?" options: - label: "Auto-detect (Recommended)" description: "Use system packages if available, build from source if missing" - label: "Build all from source" description: "Build Dyninst and all dependencies from source (slower but reliable)" - label: "Use system packages only" description: "Fail if system packages are missing" ``` If "Build from source" selected, set: ```cmake -DROCPROFSYS_BUILD_DYNINST=ON -DROCPROFSYS_BUILD_TBB=ON -DROCPROFSYS_BUILD_BOOST=ON -DROCPROFSYS_BUILD_ELFUTILS=ON -DROCPROFSYS_BUILD_LIBIBERTY=ON ``` ### Phase 5: Optional Features Ask about optional features: | Feature | CMake Option | Default | |---------|--------------|---------| | Python support | `ROCPROFSYS_USE_PYTHON` | ON | | MPI support | `ROCPROFSYS_USE_MPI` | OFF | | PAPI hardware counters | `ROCPROFSYS_USE_PAPI` | ON | | Testing | `ROCPROFSYS_BUILD_TESTING` | ON | **Only ask if user selected "Custom" or explicitly wants to change features.** ### Phase 6: Run CMake Configure **With preset:** ```bash cd /path/to/projects/rocprofiler-systems cmake --preset <preset-name> ``` **With custom options:** ```bash cd /path/to/projects/rocprofiler-systems cmake -B <build-dir> \ -DCMAKE_BUILD_TYPE=<Debug|Release|RelWithDebInfo> \ -DCMAKE_INSTALL_PREFIX=/opt/rocprofiler-systems \ -DROCPROFSYS_BUILD_DYNINST=<ON|OFF> \ -DROCPROFSYS_BUILD_TBB=<ON|OFF> \ -DROCPROFSYS_BUILD_BOOST=<ON|OFF> \ -DROCPROFSYS_USE_PYTHON=<ON|OFF> \ -DROCPROFSYS_BUILD_TESTING=<ON|OFF> \ -G Ninja ``` **Show configuration command to user before running.** ### Phase 7: Validate Configuration After CMake runs, check for: 1. **Configuration success** - CMake should exit with code 0 - Should see "Build files have been written to..." 2. **Expected features enabled** - Check CMake output for enabled features - Verify dependencies found or built 3. **Common warnings** - Missing optional dependencies (PAPI, MPI) - Version mismatches - Compiler warnings **Report to user:** - Configuration status (success/failure) - Enabled features - Any warnings or issues - Build directory location - Next step: use `rocprofsys-build` skill ## Configuration Examples ### Example 1: Quick Debug Build (Recommended for Development) ```bash cd /path/to/projects/rocprofiler-systems cmake --preset debug ``` ### Example 2: Release Build with All Dependencies from Source ```bash cd /path/to/projects/rocprofiler-systems cmake --preset release \ -DROCPROFSYS_BUILD_DYNINST=ON \ -DROCPROFSYS_BUILD_TBB=ON \ -DROCPROFSYS_BUILD_BOOST=ON \ -DROCPROFSYS_BUILD_ELFUTILS=ON \ -DROCPROFSYS_BUILD_LIBIBERTY=ON ``` ### Example 3: Custom Configuration ```bash cd /path/to/projects/rocprofiler-systems cmake -B build/my-custom-build \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=$HOME/rocprofsys-install \ -DROCPROFSYS_BUILD_DYNINST=ON \ -DROCPROFSYS_BUILD_TBB=ON \ -DROCPROFSYS_BUILD_BOOST=ON \ -DROCPROFSYS_USE_PYTHON=ON \ -DROCPROFSYS_USE_MPI=ON \ -DROCPROFSYS_BUILD_TESTING=ON \ -G Ninja ``` ## Output This skill produces: - Configured build directory with CMake cache - `build/<preset>/CMakeCache.txt` - Build system files (Ninja or Makefiles) **Typical output structure:** ``` projects/rocprofiler-systems/ └── build/ └── debug/ # Or release, debug-optimized, etc. ├── CMakeCache.txt ├── CMakeFiles/ ├── build.ninja # If using Ninja └── ... ``` ## Common Mistakes | Mistake | Fix | |---------|-----| | Configuring in wrong directory | Must be in `projects/rocprofiler-systems/`, not monorepo root | | Using monorepo build directory | Build dir must be inside the project, not at monorepo level | | Missing dependencies | Use `-DROCPROFSYS_BUILD_<DEP>=ON` to build from source | | CMake version too old | Install CMake 3.21+: `pip install --user cmake` | | In-source build | Always use out-of-source: `-B build/...` | | Forgetting generator | Specify `-G Ninja` for faster builds | | Not checking configuration output | Always review CMake output for warnings | ## Troubleshooting ### Issue: "Could not find Dyninst" **Solution:** ```bash cmake --preset debug -DROCPROFSYS_BUILD_DYNINST=ON \ -DROCPROFSYS_BUILD_TBB=ON \ -DROCPROFSYS_BUILD_BOOST=ON \ -DROCPROFSYS_BUILD_ELFUTILS=ON \ -DROCPROFSYS_BUILD_LIBIBERTY=ON ``` ### Issue: "CMake 3.21 or higher is required" **Solution:** ```bash pip install --user cmake==3.21.0 export PATH=$HOME/.local/bin:$PATH ``` ### Issue: "Wrong project directory" **Symptom:** CMakeLists.txt doesn't mention rocprofiler-systems **Solution:** Navigate to `projects/rocprofiler-systems/` subdirectory within monorepo ### Issue: "Configuration failed with errors" **Steps:** 1. Read error message carefully 2. Check for missing system dependencies 3. Try building dependencies from source 4. Check compiler version (GCC 7+) 5. Remove build directory and try again ## Integration with Other Skills | After Configuration | Use | |---------------------|-----| | Build configured | `rocprofsys-build` to compile | | Need to reconfigure | Remove build directory, run this skill again | | Configuration failed | Check docs, install deps, try again | ## Notes - **Monorepo awareness:** Always verify you're in `projects/rocprofiler-systems/`, not the monorepo root - **Git worktrees:** Support multiple worktrees with different branches - **Build isolation:** Each branch/worktree can have its own build directory - **Preset modification:** Can override preset options with `-D` flags - **Incremental changes:** Can reconfigure without removing build directory (most of the time) - **Clean slate:** When changing major options (build type, dependencies), safer to remove build directory first
在 GitHub 查看