Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create minimal cmake implementation #421

Draft
wants to merge 52 commits into
base: v3
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
7a3b64b
Create minimal cmake impl
kmp5VT Aug 10, 2023
15e0e89
Make include_directories at base not ./itensor
kmp5VT Aug 10, 2023
8581eb3
ifndef -> ifdef
kmp5VT Aug 10, 2023
98010f4
Remove uneccessary macro
kmp5VT Aug 10, 2023
f199017
Add definitions to itensor_check
kmp5VT Aug 10, 2023
39e4aef
Get Error working if using CMAKE/BLAS++/LAPACK++
kmp5VT Aug 10, 2023
b7bc327
Working on linear algebra
kmp5VT Aug 10, 2023
9f65507
export include dirs as base itensor source
kmp5VT Aug 10, 2023
9088c35
Update linear algebra
kmp5VT Aug 10, 2023
2f8d17f
Working to fix linear algebra
kmp5VT Aug 11, 2023
e5cf5bc
Fix linear algebra
kmp5VT Aug 14, 2023
1df8e61
Start trying to get HDF5 linked properly
kmp5VT Aug 14, 2023
b82846b
Add ITENSOR_USE_OMP flag
kmp5VT Aug 14, 2023
1f3b9bd
Fix zgeev
kmp5VT Aug 14, 2023
65021ff
Force CMAKE_STANDARD 20
kmp5VT Aug 14, 2023
22d92e8
Update HDF5, still not fully functioning missing an hdf5_hl target
kmp5VT Aug 14, 2023
02ebfb1
Fix HDF5 library link
kmp5VT Aug 14, 2023
b128075
Try to add cmake check to jenkins
kmp5VT Aug 15, 2023
798c4ec
Use only one step
kmp5VT Aug 15, 2023
28dca20
Order was swapped by mistake
kmp5VT Aug 15, 2023
8c62c90
install cmake
kmp5VT Aug 15, 2023
4fcba3b
make all of cmake one sh command
kmp5VT Aug 15, 2023
17f66e9
Add missing space
kmp5VT Aug 15, 2023
3cdc1f8
Adjust spaces
kmp5VT Aug 15, 2023
40d94fc
Fix formatting in Jenkinsfile
kmp5VT Aug 15, 2023
82cd3ec
ITENSORS -> ITENSOR
kmp5VT Aug 15, 2023
7ca63f0
Build in src
kmp5VT Aug 15, 2023
5937488
use . instead of pwd
kmp5VT Aug 15, 2023
1d2761b
Make sure cmake is high enough version
kmp5VT Aug 15, 2023
bf9ac88
Try to install cmake manually
kmp5VT Aug 15, 2023
fd53538
fix spelling error
kmp5VT Aug 15, 2023
b47a7ab
Add openssl for cmake
kmp5VT Aug 15, 2023
a79fe9d
Fix CMake flags in include dirs
kmp5VT Aug 15, 2023
0e0d207
Use pip instead of make
kmp5VT Aug 15, 2023
bf574d4
link to blas/lapack privately and consolidate lapack wrap files
kmp5VT Aug 16, 2023
1241db4
Fix error in util/error.h to use itensor::error
kmp5VT Aug 16, 2023
70f11e8
Add git to jenkins
kmp5VT Aug 16, 2023
a18769c
Remove unecessary comments
kmp5VT Aug 16, 2023
088497e
Revert changes to task_types.h
kmp5VT Aug 16, 2023
25639fe
Add back missing space
kmp5VT Aug 16, 2023
57e0e25
If using CMAKE don't allow F77NALE to be defined
kmp5VT Aug 16, 2023
345dab0
Use pip3 instead of pip
kmp5VT Aug 16, 2023
3fe2398
Revert from pip back to manually installing cmake
kmp5VT Aug 17, 2023
ef17680
Add build-essential to try and get c++
kmp5VT Aug 17, 2023
aed4b80
Revert definition of Error since lapack/blas linked privately
kmp5VT Aug 23, 2023
5125ae3
make doesn't target all just itensor
kmp5VT Aug 23, 2023
7508037
revert formatting (remove added tabs)
kmp5VT Aug 23, 2023
f517e3b
more formatting [no ci]
kmp5VT Aug 23, 2023
d001c20
formatting to match main [no ci]
kmp5VT Aug 23, 2023
25c9bf0
Some unit tests rely on the DEBUG build of ITensor. Comment out if un…
kmp5VT Aug 23, 2023
8034d30
Merge branch 'ITensor:v3' into kmp5/refactor/cmake_min
kmp5VT Apr 29, 2024
4f6db7b
Remove use of std::shared_ptr::unique()
Wentzell Apr 30, 2024
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
353 changes: 353 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,353 @@
#; -*-CMake-*-

# Copyright 2018 The Simons Foundation, Inc. - All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

cmake_minimum_required(VERSION 3.17.0) # decouples C++ and CUDA standards, see https://gitlab.kitware.com/cmake/cmake/issues/19123
set(ITENSOR_REQUIRED_CMAKE_VERSION 3.17.0 CACHE INTERNAL "")

###############################################################################
# CMake defaults to address key pain points
###############################################################################

# safety net for dev workflow: accidental install will not affect FindOrFetch*
if (NOT DEFINED CACHE{CMAKE_FIND_NO_INSTALL_PREFIX})
set(CMAKE_FIND_NO_INSTALL_PREFIX ON CACHE BOOL "Whether find_* commands will search CMAKE_INSTALL_PREFIX and CMAKE_STAGING_PREFIX; see https://cmake.org/cmake/help/latest/variable/CMAKE_FIND_NO_INSTALL_PREFIX.html#variable:CMAKE_FIND_NO_INSTALL_PREFIX")
endif()

###############################################################################
# Bring ValeevGroup cmake toolkit to autofind linalg
###############################################################################
include(FetchContent)
if (DEFINED PROJECT_BINARY_DIR)
set(VG_CMAKE_KIT_PREFIX_DIR PROJECT_BINARY_DIR)
else ()
set(VG_CMAKE_KIT_PREFIX_DIR CMAKE_CURRENT_BINARY_DIR)
endif()
FetchContent_Declare(
vg_cmake_kit
QUIET
GIT_REPOSITORY https://github.com/ValeevGroup/kit-cmake.git
SOURCE_DIR ${${VG_CMAKE_KIT_PREFIX_DIR}}/cmake/vg
BINARY_DIR ${${VG_CMAKE_KIT_PREFIX_DIR}}/cmake/vg-build
SUBBUILD_DIR ${${VG_CMAKE_KIT_PREFIX_DIR}}/cmake/vg-subbuild
)
FetchContent_MakeAvailable(vg_cmake_kit)
list(APPEND CMAKE_MODULE_PATH "${vg_cmake_kit_SOURCE_DIR}/modules")

###############################################################################
# Announce ourselves
###############################################################################
# see https://semver.org/
set (ITENSOR_MAJOR_VERSION 4)
set (ITENSOR_MINOR_VERSION 0)
set (ITENSOR_PATCH_VERSION 0)
set (ITENSOR_PRERELEASE_ID beta.1)
set (ITENSOR_BUILD_ID )

set(ITENSOR_VERSION "${ITENSOR_MAJOR_VERSION}.${ITENSOR_MINOR_VERSION}.${ITENSOR_PATCH_VERSION}")
if (ITENSOR_PRERELEASE_ID)
set(ITENSOR_EXT_VERSION "${ITENSOR_VERSION}-${ITENSOR_PRERELEASE_ID}")
else(ITENSOR_PRERELEASE_ID)
set(ITENSOR_EXT_VERSION "${ITENSOR_VERSION}")
endif(ITENSOR_PRERELEASE_ID)
if (ITENSOR_BUILD_ID)
set(ITENSOR_EXT_VERSION "${ITENSOR_EXT_VERSION}+${ITENSOR_BUILD_ID}")
endif(ITENSOR_BUILD_ID)

# extra cmake files are shipped with ITENSOR
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules")

include(AppendFlags)

# Extract the git revision tag information
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
find_package(Git REQUIRED)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse -q HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE ITENSOR_REVISION )
string(REGEX MATCH "[0-9a-f]*"
ITENSOR_REVISION "${ITENSOR_REVISION}")
else()
set(ITENSOR_REVISION "unknown")
endif()

project(ITENSOR
VERSION ${ITENSOR_VERSION}
DESCRIPTION "ITensor: High-Performance Tensor Software Inspired By Tensor Diagrams"
LANGUAGES CXX
HOMEPAGE_URL "https://itensor.org/")
enable_language(C) # C needed even for basic platform introspection

###############################################################################
# Preconditions
###############################################################################
set(TARGET_ARCH "${CMAKE_SYSTEM}-${CMAKE_SYSTEM_PROCESSOR}")

##########################
# Standard build variables
##########################
set(ITENSOR_INSTALL_BINDIR "bin"
CACHE PATH "ITENSOR BIN install directory")
set(ITENSOR_INSTALL_INCLUDEDIR "include"
CACHE PATH "ITENSOR INCLUDE install directory")
set(ITENSOR_INSTALL_LIBDIR "lib"
CACHE PATH "ITENSOR LIB install directory")
set(ITENSOR_INSTALL_SHAREDIR "share/ITENSOR/${ITENSOR_MAJOR_VERSION}.${ITENSOR_MINOR_VERSION}.${ITENSOR_MICRO_VERSION}"
CACHE PATH "ITENSOR SHARE install directory")
set(ITENSOR_INSTALL_DATADIR "${ITENSOR_INSTALL_SHAREDIR}/data"
CACHE PATH "ITENSOR DATA install directory")
set(ITENSOR_INSTALL_DOCDIR "${ITENSOR_INSTALL_SHAREDIR}/doc"
CACHE PATH "ITENSOR DOC install directory")
set(ITENSOR_INSTALL_CMAKEDIR "lib/cmake/ITENSOR"
CACHE PATH "ITENSOR CMAKE install directory")

# Get standard build variables from the environment if they have not already been set
if(NOT CMAKE_C_FLAGS OR NOT DEFINED CMAKE_C_FLAGS)
set(CMAKE_C_FLAGS "$ENV{CPPFLAGS}")
append_flags(CMAKE_C_FLAGS "$ENV{CFLAGS}")
endif()
if(NOT CMAKE_CXX_FLAGS OR NOT DEFINED CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "$ENV{CPPFLAGS}")
append_flags(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS}")
endif()
if(NOT CMAKE_EXE_LINKER_FLAGS OR NOT DEFINED CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_EXE_LINKER_FLAGS "$ENV{LDFLAGS}")
endif()
if (NOT CMAKE_CXX_COMPILER)
message(FATAL_ERROR "C++ compiler not found")
endif()

set(CMAKE_SKIP_RPATH FALSE)

##########################
# We use C++17 features
##########################
# but insist on strict standard
#if(ENABLE_HDF5)
set(CMAKE_CXX_STANDARD 20 CACHE STRING "C++ ISO Standard version")
#else()
# set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ ISO Standard version")
#endif(ENABLE_HDF5)
if (CMAKE_CXX_STANDARD VERSION_LESS 20)
message(FATAL_ERROR "C++ 2017 ISO Standard or higher is required to compile ITENSOR")
endif()
# C++20 is only configurable via compile features with cmake 3.12 and older
if (CMAKE_CXX_STANDARD EQUAL 20 AND CMAKE_VERSION VERSION_LESS 3.12.0)
cmake_minimum_required (VERSION 3.12.0)
endif()
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Whether to use extensions of C++ ISO Standard version")

##########################
# Check type support
include(CheckTypeSize)
##########################

##########################
# Load extra CMake features
##########################

include(GNUInstallDirs)
include(CMakeDependentOption)
include(CMakePackageConfigHelpers)
include(FeatureSummary)

set(MPI_CXX_SKIP_MPICXX TRUE CACHE BOOL "MPI_CXX_SKIP_MPICXX")

##########################
# Configure options
##########################
option(ENABLE_MPI "Enable MPI" ON)
add_feature_info(MPI ENABLE_MPI "Message-Passing Interface supports distributed-memory parallel programs")

option(ENABLE_CUDA "Enable use of CUDA with ITensor" OFF)
add_feature_info(CUDA ENABLE_CUDA "NVIDIA CUDA support for GPU")

option(ENABLE_BLAS_LAPACK "Enable BLAS and LAPACK Libraries" ON)
add_feature_info(BLAS_LAPACK ENABLE_BLAS_LAPACK "Fast standardized linear algebra definitions")

option(ENABLE_HDF5 "Compile ITensor with HDF5 option" OFF)
add_feature_info(HDF5 ENABLE_HDF5 "Storage of data via the HDF5 file protocol")

option(ENABLE_OMP "Compile ITensor with OpenMP option" OFF)
add_feature_info(OMP ENABLE_OMP "Message passing interface which supports unified-memory threadwise-parallel programs")

option(ENABLE_WFN91_LINALG_DISCOVERY_KIT "Use linear algebra discovery kit from github.com/wavefunction91 [recommended]" ON)
add_feature_info(WFN91LinearAlgebraDiscoveryKit ENABLE_WFN91_LINALG_DISCOVERY_KIT "Linear algebra discovery kit from github.com/wavefunction91 supports many more corner cases than the default CMake modules and/or ICL's BLAS++/LAPACK++ modules")

set(TARGET_ARCH "${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
##########################
# miscellaneous cmake platform-neutral and platform-specific configuration
##########################
set(CMAKE_FIND_NO_INSTALL_PREFIX TRUE) # do not search in CMAKE_INSTALL_PREFIX
set(CMAKE_SKIP_RPATH FALSE)
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_SKIP_INSTALL_RPATH FALSE)
set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE) # do not use -isystem by default to avoid include dir ordering issues as well as other issues like https://gcc.gnu.org/onlinedocs/cpp/System-Headers.html

if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
# look for frameworks and appbundles last
set(CMAKE_FIND_FRAMEWORK LAST)
set(CMAKE_FIND_APPBUNDLE LAST)
endif()

##########################
# Include source directories
##########################
include_directories(${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR})

##########################
# external dependencies
##########################
add_library(ITENSOR INTERFACE)
# required deps:
# 1. CUDA first since others may depend on it
if(ENABLE_CUDA)
include(external/cuda.cmake)
endif(ENABLE_CUDA)

##########################
# discover linear algebra
##########################

include(external/linalgpp.cmake)
if(ENABLE_OMP)
MESSAGE(STATUS "Looking for OMP")
FIND_PACKAGE(OpenMP REQUIRED)
IF(OPENMP_FOUND)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif(OPENMP_FOUND)
target_link_libraries(ITENSOR INTERFACE ${OpenMP_C_LIBRARIES})
endif(ENABLE_OMP)

if(ENABLE_MPI)
MESSAGE(STATUS "Looking for MPI")
FIND_PACKAGE(MPI REQUIRED)
IF(MPI_FOUND)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MPI_C_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MPI_CXX_FLAGS}")
endif(MPI_FOUND)

target_link_libraries(ITENSOR INTERFACE ${MPI_C_LIBRARIES})
endif(ENABLE_MPI)

if(ENABLE_HDF5)
MESSAGE(STATUS "Looking for HDF5")
FIND_PACKAGE(HDF5 REQUIRED)
include_directories(SYSTEM ${HDF5_INCLUDE_DIRS} ${HDF5_HL_INCLUDE_DIR})
target_link_libraries(ITENSOR INTERFACE ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES} hdf5 hdf5_hl)
endif(ENABLE_HDF5)


##########################
# sources
##########################

set(CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
add_subdirectory(itensor)
add_subdirectory(unittest)

target_compile_definitions(itensor PUBLIC ITENSOR_USE_CMAKE=1)
if(${CMAKE_BUILD_TYPE} MATCHES Debug)
target_compile_definitions(itensor PUBLIC DEBUG=1)
endif(${CMAKE_BUILD_TYPE} MATCHES Debug)

if(ENABLE_OMP)
message(STATUS "Setting ITENSOR_USE_OMP")
target_compile_definitions(itensor PUBLIC ITENSOR_USE_OMP=1)
endif()
if(ENABLE_HDF5)
target_compile_definitions(itensor PUBLIC ITENSOR_USE_HDF5=1)
endif(ENABLE_HDF5)
##########################
# pkg-config variables
##########################
foreach(_inc ${ITENSOR_CONFIG_INCLUDE_DIRS})
append_flags(ITENSOR_PC_CFLAGS "-I${_inc}")
endforeach()
foreach(_lib ${ITENSOR_CONFIG_LIBRARIES})
append_flags(ITENSOR_PC_LIBS "${_lib}")
endforeach()

##########################
# wrap up
##########################

# Force cache refresh for compile flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "C compile flags" FORCE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "C++ compile flags" FORCE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Compiler linker flags" FORCE)

CONFIGURE_FILE(
${PROJECT_SOURCE_DIR}/itensors.pc.in
${PROJECT_BINARY_DIR}/itensors.pc
)

# install config files
install(FILES ${PROJECT_BINARY_DIR}/itensor.pc
DESTINATION lib/pkgconfig)

# Create the version file
write_basic_package_version_file(itensor-config-version.cmake
VERSION ${ITENSOR_VERSION} COMPATIBILITY AnyNewerVersion)

# Create the targets file
export(EXPORT itensor
FILE "${PROJECT_BINARY_DIR}/itensor-targets.cmake")

# Create the configure file
configure_package_config_file(cmake/itensor-config.cmake.in
"${PROJECT_BINARY_DIR}/itensor-config.cmake"
INSTALL_DESTINATION "${ITENSOR_INSTALL_CMAKEDIR}"
PATH_VARS CMAKE_INSTALL_PREFIX ITENSOR_INSTALL_BINDIR
ITENSOR_INSTALL_INCLUDEDIR ITENSOR_INSTALL_LIBDIR
ITENSOR_INSTALL_DOCDIR ITENSOR_INSTALL_CMAKEDIR)

# Install config, version, and target files
install(EXPORT itensor
FILE "itensor-targets.cmake"
DESTINATION "${ITENSOR_INSTALL_CMAKEDIR}"
COMPONENT ITENSOR)

install(FILES
"${PROJECT_BINARY_DIR}/itensor-config.cmake"
"${PROJECT_BINARY_DIR}/itensor-config-version.cmake"
DESTINATION "${ITENSOR_INSTALL_CMAKEDIR}"
COMPONENT ITENSOR)


# Add target to allow on-the-fly switching of build type

ADD_CUSTOM_TARGET(debug
COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR} --target itensor
COMMENT "Switch CMAKE_BUILD_TYPE to Debug"
)

ADD_CUSTOM_TARGET(check
COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR} --target itensor_check
COMMENT "Check ITensors, done in Debug mode"
)
ADD_CUSTOM_TARGET(release
COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR} --target itensor
COMMENT "Switch CMAKE_BUILD_TYPE to Release"
)

feature_summary(WHAT ALL
DESCRIPTION "=== ITensor Package/Feature Info ===")
40 changes: 40 additions & 0 deletions cmake/itensor-config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# - CMAKE Config file for the ITensors package
# The following variables are defined:
# ITENSOR_FOUND - System has the ITensors package
# ITENSOR_INCLUDE_DIRS - The ITensors include directory
# ITENSOR_LIBRARIES - The ITensors libraries and their dependencies
# ITENSOR_VERSION - The ITensors (core) version; see semver.org
# ITENSOR_EXT_VERSION - The ITensors version, includes prerelease id; see semver.org

# Set package version
set(ITENSOR_VERSION "@ITENSOR_VERSION@")
set(ITENSOR_EXT_VERSION "@ITENSOR_EXT_VERSION@")

@PACKAGE_INIT@

# Include library IMPORT targets
if(NOT TARGET itensor)
include("${CMAKE_CURRENT_LIST_DIR}/itensor-targets.cmake")
endif()

# Set the itensor compiled library target
set(ITENSOR_LIBRARIES itensor)

set(ITENSOR_SOURCE_DIR "@ITENSOR_SOURCE_DIR@")
set(ITENSOR_BINARY_DIR "@ITENSOR_BINARY_DIR@")

set(ITENSOR_BUILD_INCLUDE_DIRS "${ITENSOR_SOURCE_DIR} "${ITENSOR_BINARY_DIR}")
set(ITENSOR_INSTALL_INCLUDE_DIRS "@PACKAGE_ITENSOR_INSTALL_INCLUDEDIR@"
"@PACKAGE_ITENSOR_INSTALL_INCLUDEDIR@")

# define ITENSOR_INCLUDE_DIRS according to where we are compiling: ITensor build tree or outside
# external packages should use ITENSOR_BUILD_INCLUDE_DIRS and ITENSOR_INSTALL_INCLUDE_DIRS directly
if(CMAKE_CURRENT_LIST_DIR EQUAL ITENSOR_BINARY_DIR)
set(ITENSOR_INCLUDE_DIRS "${ITENSOR_BUILD_INCLUDE_DIRS}")
else()
set(ITENSOR_INCLUDE_DIRS "${ITENSOR_INSTALL_INCLUDE_DIRS}")
endif()

set(ITENSOR_CMAKE_TOOLCHAIN_FILE "@CMAKE_TOOLCHAIN_FILE@")

set(ITENSOR_FOUND TRUE)
Loading