mirror of
https://github.com/ROCm/composable_kernel.git
synced 2026-06-30 19:57:40 +00:00
- Add CMake documentation infrastructure with auto Python venv management - Enable streamlined docs build: cmake --build . --target docs
109 lines
4.1 KiB
CMake
109 lines
4.1 KiB
CMake
function(setup_documentation)
|
|
# Find Python executable
|
|
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
|
|
|
# Check for existing virtual environment in ~/python-env
|
|
set(HOME_VENV "$ENV{HOME}/python-env/venv-1")
|
|
set(BUILD_VENV "${CMAKE_BINARY_DIR}/python-env")
|
|
|
|
if(EXISTS "${HOME_VENV}/bin/python3")
|
|
set(PYTHON_VENV "${HOME_VENV}")
|
|
set(PYTHON_EXECUTABLE "${HOME_VENV}/bin/python3")
|
|
set(VENV_IS_NEW FALSE)
|
|
message(STATUS "Using existing Python virtual environment: ${HOME_VENV}")
|
|
else()
|
|
set(PYTHON_VENV "${BUILD_VENV}")
|
|
set(PYTHON_EXECUTABLE "${BUILD_VENV}/bin/python3")
|
|
set(VENV_IS_NEW TRUE)
|
|
message(STATUS "Will create Python virtual environment: ${BUILD_VENV}")
|
|
endif()
|
|
|
|
# Create virtual environment if it doesn't exist
|
|
if(NOT EXISTS "${PYTHON_EXECUTABLE}")
|
|
message(STATUS "Creating Python virtual environment...")
|
|
execute_process(
|
|
COMMAND ${Python3_EXECUTABLE} -m venv ${PYTHON_VENV}
|
|
RESULT_VARIABLE VENV_RESULT
|
|
)
|
|
if(NOT VENV_RESULT EQUAL 0)
|
|
message(FATAL_ERROR "Failed to create Python virtual environment")
|
|
endif()
|
|
set(VENV_IS_NEW TRUE)
|
|
endif()
|
|
|
|
# Set requirements file path
|
|
set(REQUIREMENTS_FILE "${CMAKE_SOURCE_DIR}/docs/sphinx/requirements.txt")
|
|
|
|
# Only install packages if we created a new virtual environment
|
|
if(VENV_IS_NEW)
|
|
message(STATUS "Installing Python documentation requirements in new virtual environment...")
|
|
execute_process(
|
|
COMMAND ${PYTHON_EXECUTABLE} -m pip install --upgrade pip
|
|
RESULT_VARIABLE PIP_RESULT
|
|
)
|
|
if(NOT PIP_RESULT EQUAL 0)
|
|
message(FATAL_ERROR "Failed to upgrade pip")
|
|
endif()
|
|
|
|
execute_process(
|
|
COMMAND ${PYTHON_EXECUTABLE} -m pip install -r ${REQUIREMENTS_FILE}
|
|
RESULT_VARIABLE PIP_RESULT
|
|
)
|
|
if(NOT PIP_RESULT EQUAL 0)
|
|
message(FATAL_ERROR "Failed to install Python documentation requirements")
|
|
endif()
|
|
|
|
message(STATUS "Python documentation requirements installed successfully")
|
|
endif()
|
|
|
|
# Create dummy target (no build-time package installation needed)
|
|
add_custom_target(docs_venv
|
|
COMMENT "Python virtual environment ready"
|
|
)
|
|
|
|
# Set up Doxygen
|
|
find_package(Doxygen REQUIRED)
|
|
|
|
set(DOXYGEN_OUTPUT_DIR "${CMAKE_BINARY_DIR}/docs/doxygen")
|
|
set(DOXYGEN_CONFIG_FILE "${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${DOXYGEN_OUTPUT_DIR}/xml/index.xml"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${DOXYGEN_OUTPUT_DIR}
|
|
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_CONFIG_FILE}
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen
|
|
DEPENDS ${DOXYGEN_CONFIG_FILE}
|
|
COMMENT "Building Doxygen XML documentation"
|
|
)
|
|
|
|
add_custom_target(docs_doxygen
|
|
DEPENDS "${DOXYGEN_OUTPUT_DIR}/xml/index.xml"
|
|
)
|
|
|
|
# Set up Sphinx
|
|
set(SPHINX_OUTPUT_DIR "${CMAKE_BINARY_DIR}/docs/html")
|
|
set(SPHINX_SOURCE_DIR "${CMAKE_SOURCE_DIR}/docs")
|
|
|
|
# Set number of parallel jobs for Sphinx (default to 8 if not set)
|
|
if(NOT CMAKE_BUILD_PARALLEL_LEVEL)
|
|
set(CMAKE_BUILD_PARALLEL_LEVEL 8)
|
|
endif()
|
|
|
|
add_custom_target(docs
|
|
COMMAND ${PYTHON_EXECUTABLE} -m sphinx -b html -j ${CMAKE_BUILD_PARALLEL_LEVEL} ${SPHINX_SOURCE_DIR} ${SPHINX_OUTPUT_DIR}
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
DEPENDS docs_venv docs_doxygen
|
|
COMMENT "Building HTML documentation with Sphinx"
|
|
)
|
|
|
|
# Add clean target for docs
|
|
add_custom_target(docs_clean
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/docs
|
|
COMMENT "Cleaning documentation build files"
|
|
)
|
|
|
|
message(STATUS "Documentation build configured:")
|
|
message(STATUS " Build command: cmake --build . --target docs")
|
|
message(STATUS " Clean command: cmake --build . --target docs_clean")
|
|
message(STATUS " Output directory: ${SPHINX_OUTPUT_DIR}")
|
|
endfunction() |