Skip to content

Commit

Permalink
Add CMake for documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
matyas-streamhpc committed Nov 28, 2023
1 parent a33bd7b commit 5d5ff41
Show file tree
Hide file tree
Showing 6 changed files with 164 additions and 1 deletion.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Full documentation for rocFFT is available at [rocm.docs.amd.com](https://rocm.d

## rocFFT 1.0.26 (Unreleased)

### Added
- CMake support for documentation.

### Changed

- Multi-device FFTs now allow batch greater than 1.
Expand Down
13 changes: 13 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ endif()

set( ROCFFT_BUILD_SCOPE ON )

include(GNUInstallDirs)

project( rocfft LANGUAGES CXX C )

# This finds the rocm-cmake project, and installs it if not found
Expand Down Expand Up @@ -137,6 +139,9 @@ if(BUILD_FILE_REORG_BACKWARD_COMPATIBILITY AND NOT WIN32)
)
endif()

# Enable documentation build
option(BUILD_DOCS "Build documentation" ON)

set( WARNING_FLAGS -Wall -Wno-unused-function -Wimplicit-fallthrough -Wunreachable-code -Wsign-compare )
if( WERROR )
set( WARNING_FLAGS ${WARNING_FLAGS} -Werror )
Expand Down Expand Up @@ -252,6 +257,14 @@ if( BUILD_CLIENTS_SAMPLES
add_subdirectory( clients )
endif( )

# Handle dependencies
include(Dependencies)

# Build docs
if(BUILD_DOCS)
add_subdirectory(docs)
endif()

if(WIN32)
set(CPACK_SOURCE_GENERATOR "ZIP")
set(CPACK_GENERATOR "ZIP")
Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@ pip3 install -r .sphinx/requirements.txt
python3 -m sphinx -T -E -b html -d _build/doctrees -D language=en . _build/html
```

Alternatively, build with CMake:

```bash
cmake -DBUILD_DOCS=ON ..
```

## Examples

A summary of the latest functionality and workflow to compute an FFT with rocFFT is available [on the ROCm documentation portal][3].
Expand Down
101 changes: 101 additions & 0 deletions cmake/Dependencies.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# MIT License
#
# Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

# ###########################
# ROCm dependencies
# ###########################

include(FetchContent)

if(BUILD_DOCS)
find_package(ROCM 0.11.0 CONFIG QUIET PATHS "${ROCM_PATH}") # First version with Sphinx doc gen improvement
if(NOT ROCM_FOUND)
message(STATUS "ROCm CMake not found. Fetching...")
set(rocm_cmake_tag
"c044bb52ba85058d28afe2313be98d9fed02e293" # [email protected]. (move to 6.0 tag when released)
CACHE STRING "rocm-cmake tag to download")
FetchContent_Declare(
rocm-cmake
GIT_REPOSITORY https://github.com/RadeonOpenCompute/rocm-cmake.git
GIT_TAG ${rocm_cmake_tag}
SOURCE_SUBDIR "DISABLE ADDING TO BUILD" # We don't really want to consume the build and test targets of ROCm CMake.
)
FetchContent_MakeAvailable(rocm-cmake)
find_package(ROCM CONFIG REQUIRED NO_DEFAULT_PATH PATHS "${rocm-cmake_SOURCE_DIR}")
else()
find_package(ROCM 0.11.0 CONFIG REQUIRED PATHS "${ROCM_PATH}")
endif()

if(Python_FIND_VIRTUALENV STREQUAL "ONLY" AND NOT DEFINED ENV{VIRTUAL_ENV})
if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/.venv")
message(STATUS "Python virtualenv use requested but not found. Fetching...")
find_program(BOOTSTRAP_PYTHON_EXE python3 REQUIRED)
execute_process(
COMMAND "${BOOTSTRAP_PYTHON_EXE}" -m pip install --user virtualenv
OUTPUT_QUIET
COMMAND_ERROR_IS_FATAL ANY
)
execute_process(
COMMAND "${BOOTSTRAP_PYTHON_EXE}" -m virtualenv "${CMAKE_CURRENT_BINARY_DIR}/.venv"
OUTPUT_QUIET
COMMAND_ERROR_IS_FATAL ANY
)
endif()
set(ENV{VIRTUAL_ENV} "${CMAKE_CURRENT_BINARY_DIR}/.venv")

if(WIN32)
set(ENV{PATH} "${CMAKE_CURRENT_BINARY_DIR}/.venv/Scripts;$ENV{PATH}")
else()
set(ENV{PATH} "${CMAKE_CURRENT_BINARY_DIR}/.venv/bin:$ENV{PATH}")
endif()

find_package(Python REQUIRED)

# TODO: shortcircuit if installed
execute_process(
COMMAND "${Python_EXECUTABLE}" -m pip install pip-tools
OUTPUT_QUIET
COMMAND_ERROR_IS_FATAL ANY
)

list(APPEND CMAKE_CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/docs/.sphinx/requirements.in")
file(MAKE_DIRECTORY "$ENV{VIRTUAL_ENV}/usr/share/${PROJECT_NAME}")
if("${PROJECT_SOURCE_DIR}/docs/.sphinx/requirements.in" IS_NEWER_THAN "$ENV{VIRTUAL_ENV}/usr/share/${PROJECT_NAME}/requirements.txt")
execute_process(
COMMAND "${Python_EXECUTABLE}" -m piptools compile
"${PROJECT_SOURCE_DIR}/docs/.sphinx/requirements.in"
--output-file
"$ENV{VIRTUAL_ENV}/usr/share/${PROJECT_NAME}/requirements.txt"
OUTPUT_QUIET
ERROR_QUIET
COMMAND_ERROR_IS_FATAL ANY
)
execute_process(
COMMAND "${Python_EXECUTABLE}" -m piptools sync
"$ENV{VIRTUAL_ENV}/usr/share/${PROJECT_NAME}/requirements.txt"
OUTPUT_QUIET
ERROR_QUIET
COMMAND_ERROR_IS_FATAL ANY
)
endif()
endif()
endif()
2 changes: 1 addition & 1 deletion docs/.doxygen/Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -968,7 +968,7 @@ FILTER_SOURCE_PATTERNS =
# (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output.

USE_MDFILE_AS_MAINPAGE = ../README.md
USE_MDFILE_AS_MAINPAGE =

#---------------------------------------------------------------------------
# Configuration options related to source browsing
Expand Down
40 changes: 40 additions & 0 deletions docs/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# MIT License
#
# Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

include(ROCMSphinxDoc)

file(COPY
"${CMAKE_CURRENT_SOURCE_DIR}/.doxygen/Doxyfile"
DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")

rocm_add_sphinx_doc(
"${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_DIR html
BUILDER html
USES_DOXYGEN
VARS
"doxyfile=${CMAKE_CURRENT_BINARY_DIR}/Doxyfile"
)

install(
DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html"
DESTINATION "${CMAKE_INSTALL_DOCDIR}")

0 comments on commit 5d5ff41

Please sign in to comment.