Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions .github/workflows/linux-trilinos.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Linux-Trilinos-Integration

# only run most recent workflow in branch
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

on:
pull_request:
paths-ignore:
- README.md
- 'docs/**'
types: [ opened, reopened, synchronize ]

jobs:
Develop-OpenMPI:
continue-on-error: true # failure won't fail the workflow
env:
TRILINOS_BUILD: ${{ github.workspace }}/trilinos-build
TRILINOS_INSTALL: ${{ github.workspace }}/trilinos-install
COMM_SRC: ${{ github.workspace }}
runs-on: ubuntu-latest
timeout-minutes: 40 # Trilinos build takes ~20 minutes
steps:
- name: Install MPI
run: |
sudo apt-get update && sudo apt-get install -y libopenmpi-dev openmpi-bin cmake
which mpirun
mpirun --version
which mpicxx
mpicxx --version
- name: Install openblas
run: sudo apt-get install libopenblas-dev
- name: Check out repository code
uses: actions/checkout@v4
- name: Check out Trilinos
uses: actions/checkout@v4
with:
repository: trilinos/Trilinos
fetch-depth: 1
ref: develop # FIXME: master, once master has support
path: trilinos
- name: symlink kokkos-comm
run: |
ln -s "${{ github.workspace }}" trilinos/packages/kokkos-comm
- name: Configure Trilinos
run: >
cmake -S trilinos -B "$TRILINOS_BUILD" \
-DCMAKE_INSTALL_PREFIX="$TRILINOS_INSTALL" \
-DTPL_ENABLE_MPI=ON \
-DTrilinos_ENABLE_KokkosComm=ON \
-DTrilinos_ENABLE_Tpetra=ON \
-DTpetra_ENABLE_TESTS=ON
- name: Build Trilinos
run: cmake --build "$TRILINOS_BUILD" --parallel $(nproc)
- name: Test Exists
run: "[ -f \"$TRILINOS_BUILD/packages/tpetra/core/test/KokkosComm/TpetraCore_KokkosComm_include.exe\" ] || exit 1"
- name: Install Trilinos
run: cmake --build "$TRILINOS_BUILD" --target install
132 changes: 89 additions & 43 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,48 @@
#
#@HEADER

# Support two different build modes:
# Standalone
# As a Trilinos package
if(COMMAND TRIBITS_PACKAGE_DECL)
set(KOKKOSCOMM_HAS_TRILINOS ON CACHE BOOL "")
else()
SET(KOKKOSCOMM_HAS_TRILINOS OFF CACHE BOOL "")
endif()
message(STATUS "KOKKOSCOMM_HAS_TRILINOS: ${KOKKOSCOMM_HAS_TRILINOS}")

# 3.9: MPI::MPI_CXX
# 3.12: CMAKE_PROJECT_VERSION_MAJOR
# 3.15: PUBLIC_HEADER files for interface libraries
# 3.23: FILE_SETs for easy export of header-only libraries
cmake_minimum_required(VERSION 3.23)

project(
KokkosComm
LANGUAGES
CXX
VERSION 0.2.0
DESCRIPTION "Experimental MPI interfaces (and more!) for the Kokkos C++ Performance Portability Programming ecosystem"
HOMEPAGE_URL "https://kokkos.org/kokkos-comm/"
)
set(KOKKOSCOMM_VERSION_MAJOR 0 CACHE STRING "" FORCE)
set(KOKKOSCOMM_VERSION_MINOR 2 CACHE STRING "" FORCE)
set(KOKKOSCOMM_VERSION_PATCH 0 CACHE STRING "" FORCE)
set(KOKKOSCOMM_VERSION_STRING "${KOKKOSCOMM_VERSION_MAJOR}.${KOKKOSCOMM_VERSION_MINOR}.${KOKKOSCOMM_VERSION_PATCH}" CACHE STRING "" FORCE)

SET(PACKAGE_NAME KokkosComm)
SET(${PACKAGE_NAME}_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
SET(${PACKAGE_NAME}_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})

if (KOKKOSCOMM_HAS_TRILINOS)
tribits_package(KokkosComm)

SET(PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
STRING(TOUPPER ${PACKAGE_NAME} PACKAGE_NAME_UC)

else()
project(
KokkosComm
LANGUAGES
CXX
VERSION "${KOKKOSCOMM_VERSION_STRING}"
DESCRIPTION "Experimental MPI interfaces (and more!) for the Kokkos C++ Performance Portability Programming ecosystem"
HOMEPAGE_URL "https://kokkos.org/kokkos-comm/"
)
endif()


include(cmake/mpi-vendor.cmake)

Expand All @@ -40,10 +68,24 @@ set(KOKKOSCOMM_ENABLE_PERFTESTS ${KokkosComm_ENABLE_PERFTESTS} CACHE BOOL "" FOR
set(KOKKOSCOMM_ENABLE_TESTS ${KokkosComm_ENABLE_TESTS} CACHE BOOL "" FORCE)
set(KOKKOSCOMM_ENABLE_MPI ${KokkosComm_ENABLE_MPI} CACHE BOOL "" FORCE)

find_package(Kokkos REQUIRED)
if(KOKKOSCOMM_ENABLE_MPI)
find_package(MPI REQUIRED)
if (KOKKOSCOMM_HAS_TRILINOS)
if (TPL_ENABLE_MPI)
if (NOT KOKKOSCOMM_ENABLE_MPI)
message(WARNING "TPL_ENABLE_MPI is set. Overriding KOKKOSCOMM_ENABLE_MPI to ON")
set(KOKKOSCOMM_ENABLE_MPI ON CACHE BOOL "" FORCE)
endif()
endif()
endif()

if (KOKKOSCOMM_HAS_TRILINOS)
# Trilinos will "find" Kokkos and MPI
else()
find_package(Kokkos REQUIRED)
if(KOKKOSCOMM_ENABLE_MPI)
find_package(MPI REQUIRED)
endif()
endif()

kokkoscomm_set_mpi_vendor_variables()

add_subdirectory(src/KokkosComm)
Expand All @@ -61,41 +103,45 @@ include(CMakePackageConfigHelpers)
include(GNUInstallDirs)

# Generate version config header
set(KOKKOSCOMM_VERSION_MAJOR ${CMAKE_PROJECT_VERSION_MAJOR} CACHE STRING "" FORCE)
set(KOKKOSCOMM_VERSION_MINOR ${CMAKE_PROJECT_VERSION_MINOR} CACHE STRING "" FORCE)
set(KOKKOSCOMM_VERSION_PATCH ${CMAKE_PROJECT_VERSION_PATCH} CACHE STRING "" FORCE)

configure_file(
${PROJECT_SOURCE_DIR}/cmake/KokkosComm_config.hpp.in
${PROJECT_BINARY_DIR}/src/KokkosComm/config.hpp
${CMAKE_CURRENT_SOURCE_DIR}/cmake/KokkosComm_config.hpp.in
${CMAKE_CURRENT_BINARY_DIR}/src/KokkosComm/config.hpp
@ONLY
)

# Generate package config file
configure_package_config_file(
${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in
${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosComm
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
# required by TriBITS
if (KOKKOSCOMM_HAS_TRILINOS)
tribits_package_postprocess()
else()
# Generate package config file
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/cmake/KokkosComm/KokkosCommConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosComm
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)

# Generate package version file
write_basic_package_version_file(
${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommVersion.cmake
COMPATIBILITY SameMajorVersion
ARCH_INDEPENDENT # KokkosComm is a header-only library
)
# Generate package version file
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/cmake/KokkosComm/KokkosCommVersion.cmake
VERSION "${KOKKOSCOMM_VERSION_STRING}"
COMPATIBILITY SameMajorVersion
ARCH_INDEPENDENT # KokkosComm is a header-only library
)

# Install CMake package files
install(
FILES
${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommConfig.cmake
${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosComm
)
install(
EXPORT KokkosCommTargets
FILE KokkosCommTargets.cmake
NAMESPACE KokkosComm::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosComm
)
# Install CMake package files
install(
FILES
${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommConfig.cmake
${PROJECT_BINARY_DIR}/cmake/KokkosComm/KokkosCommVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosComm
)
install(
EXPORT KokkosCommTargets
FILE KokkosCommTargets.cmake
NAMESPACE KokkosComm::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/KokkosComm
)
endif()
13 changes: 13 additions & 0 deletions cmake/Dependencies.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# for Trilinos TriBITS build system

set(LIB_REQUIRED_DEP_PACKAGES Kokkos) # we require Kokkos
set(LIB_OPTIONAL_DEP_PACKAGES)

set(TEST_REQUIRED_DEP_PACKAGES)
set(TEST_OPTIONAL_DEP_PACKAGES)

set(LIB_REQUIRED_DEP_TPLS)
set(LIB_OPTIONAL_DEP_TPLS MPI) # Optionally require MPI

set(TEST_REQUIRED_DEP_TPLS)
set(TEST_OPTIONAL_DEP_TPLS)
31 changes: 31 additions & 0 deletions docs/dev/trilinos.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
******************************
As a Trilinos external package
******************************

Kokkos Comm can be used as an external package in Trilinos as of https://github.com/trilinos/Trilinos/pull/14135.

.. code-block:: console

# acquire trilinos
git clone https://github.com/trilinos/Trilinos.git

# symlink kokkos-comm source into Trilinos
ln -s kokkos-comm trilinos/packages/kokkos-comm

# Build Trilinos
cmake -S trilinos -B "$TRILINOS_BUILD" \
-DCMAKE_INSTALL_PREFIX="$TRILINOS_INSTALL" \
-DTPL_ENABLE_MPI=ON \
-DTrilinos_ENABLE_KokkosComm=ON \
-DTrilinos_ENABLE_Tpetra=ON \
-DTpetra_ENABLE_TESTS=ON

Look for something like the following in the Trilinos configure output:

.. code-block:: text

...
Final set of enabled top-level packages: Kokkos Teuchos KokkosKernels KokkosComm Tpetra 5
...
Final set of enabled external packages/TPLs: MPI BLAS LAPACK DLlib 4
...
1 change: 1 addition & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ Documentation Content
dev/testing
dev/mpi
dev/docs
dev/trilinos


Indices and tables
Expand Down
Loading
Loading