Skip to content

Commit

Permalink
Merge pull request #419 from clEsperanto/project-dependencies
Browse files Browse the repository at this point in the history
Project dependencies
  • Loading branch information
StRigaud authored Feb 7, 2025
2 parents ea1b2a3 + 4e2bcd3 commit db1e000
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 142 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.20)

project(CLIc VERSION 0.16.0)

set(kernel_version_tag "3.1.0" CACHE STRING "clEsperanto kernel version tag")
set(kernel_version_tag "3.1.1" CACHE STRING "clEsperanto kernel version tag")
set(eigen_lib_version_tag "3.4.0" CACHE STRING "Eigen library version tag")

# if not set, set the default build type to Release
Expand Down
23 changes: 5 additions & 18 deletions clic/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,21 @@ file(GLOB_RECURSE SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
file(GLOB_RECURSE TIERS "${CMAKE_CURRENT_SOURCE_DIR}/src/**/*.cpp")
list(APPEND SOURCES ${TIERS})

file(GLOB_RECURSE HEADERS_SRC "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp")
file(GLOB_RECURSE HEADERS_BIN "${CMAKE_CURRENT_BINARY_DIR}/include/*.hpp")
set(HEADERS ${HEADERS_SRC})
list(APPEND HEADERS ${HEADERS_BIN})

# target library definition
add_library(${LIBRARY_NAME} ${SOURCES} ${HEADERS})
add_library(${LIBRARY_NAME} ${SOURCES})
target_link_libraries(${LIBRARY_NAME} PUBLIC cleKernels::cleKernels Eigen3::Eigen)

add_library(${PROJECT_NAME}::${LIBRARY_NAME} ALIAS ${LIBRARY_NAME})
target_include_directories(${LIBRARY_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
$<BUILD_INTERFACE:${KERNELS_HEADER_DIR}>
$<BUILD_INTERFACE:${EIGEN_SOURCE_DIR}>
$<BUILD_INTERFACE:${CLEKERNELS_INCLUDE_DIR}>
$<BUILD_INTERFACE:${EIGEN3_INCLUDE_DIR}>
$<INSTALL_INTERFACE:include>
)

set_target_properties(${LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE CXX) # force C++ linker
set_target_properties(${LIBRARY_NAME} PROPERTIES VERSION ${PROJECT_VERSION}) # set version
add_dependencies(${LIBRARY_NAME} generate_kernels)

# test if BACKEND variable is OpenCL
if(${OpenCL_FOUND})
Expand All @@ -45,14 +41,5 @@ if(${CUDAToolkit_FOUND})
target_link_libraries(${LIBRARY_NAME} PUBLIC CUDA::cudart CUDA::cuda_driver CUDA::nvrtc CUDA::OpenCL)
endif()

# # Set RPATH configuration
# if(APPLE)
# set(CMAKE_BUILD_RPATH "@loader_path")
# set(CMAKE_INSTALL_RPATH "@loader_path/../lib")
# else()
# set(CMAKE_BUILD_RPATH "$ORIGIN")
# set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib")
# endif()

# library install instructions
include(${PROJECT_SOURCE_DIR}/cmake/Install.cmake)
44 changes: 12 additions & 32 deletions clic/thirdparty/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,45 +1,25 @@
include(FetchContent)
set(FETCHCONTENT_BASE_DIR ${CMAKE_CURRENT_BINARY_DIR})

## Fetch OpenCL kernel sources
FetchContent_Declare(kernels
FetchContent_Declare(cleKernels
GIT_REPOSITORY https://github.com/clEsperanto/clij-opencl-kernels.git
GIT_TAG ${kernel_version_tag}
BUILD_ALWAYS OFF
)
FetchContent_GetProperties(kernels)
if(NOT kernels_POPULATED)
FetchContent_Populate(kernels)
endif()
FetchContent_MakeAvailable(cleKernels)

## Fetch Eigen library sources
FetchContent_Declare(eigen
GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
GIT_TAG ${eigen_lib_version_tag}
BUILD_ALWAYS OFF
)
FetchContent_GetProperties(eigen)
if(NOT Eigen_POPULATED)
FetchContent_Populate(eigen)
endif()
FetchContent_MakeAvailable(eigen)

## Define the path to the thirdparty libraries and include directories
set(KERNELS_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/kernels-src CACHE PATH "Path to opencl kernel files (.cl)" FORCE)
mark_as_advanced(KERNELS_SOURCE_DIR)
set(KERNELS_HEADER_DIR ${CMAKE_CURRENT_BINARY_DIR}/kernels CACHE PATH "Path to kernel files (.h)" FORCE)
mark_as_advanced(KERNELS_HEADER_DIR)
set(EIGEN_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/eigen-src CACHE PATH "Path to eigen lib" FORCE)
mark_as_advanced(EIGEN_SOURCE_DIR)

## Define target to generate kernel headers from kernel files (.cl -> .h)
find_package(Python3 COMPONENTS Interpreter REQUIRED)
add_custom_command(
OUTPUT ${KERNELS_HEADER_DIR}
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/kernel_to_header.py ${KERNELS_SOURCE_DIR} ${KERNELS_HEADER_DIR}
COMMENT "Generating headers from clesperanto kernels files."
DEPENDS ${KERNELS_SOURCE_DIR}
)
add_custom_target(
generate_kernels
DEPENDS ${KERNELS_HEADER_DIR}
)
# Future work - integration of clFFT library for deconvolution operations
## Fetch clFFT library sources
# FetchContent_Declare(clfft
# GIT_REPOSITORY https://github.com/clMathLibraries/clFFT.git
# GIT_TAG master
# SOURCE_SUBDIR src # clFFT CMakeLists.txt is in src/ instead of root
# )
# FetchContent_MakeAvailable(clfft)
# clFFT linking usinge the variable ${CLFFT_LIBRARIES}
66 changes: 0 additions & 66 deletions clic/thirdparty/kernel_to_header.py

This file was deleted.

File renamed without changes.
34 changes: 9 additions & 25 deletions cmake/Install.cmake
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# Headers:
# - foo/*.h -> <prefix>/include/*.h
install(
FILES ${HEADERS}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

# Set configuration file names
set(PROJECT_CONFIG_FILE "${PROJECT_NAME}Config.cmake")
set(VERSION_CONFIG_FILE "${PROJECT_NAME}ConfigVersion.cmake")

# Install library targets
install(
TARGETS ${LIBRARY_NAME}
EXPORT ${TARGETS_EXPORT_NAME}
Expand All @@ -15,17 +16,6 @@ install(
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
)

# ------------------------------------------------------------------------------
# CMake Export Configuration
# This layout works for all platforms:
# - <install_prefix>/lib*/cmake/<PROJECT-NAME>
# - <install_prefix>/lib*/
# - <install_prefix>/include/
include(CMakePackageConfigHelpers)

set(PROJECT_CONFIG_FILE "${PROJECT_NAME}Config.cmake")
set(VERSION_CONFIG_FILE "${PROJECT_NAME}ConfigVersion.cmake")

# Export for the build tree
write_basic_package_version_file(
"${PROJECT_BINARY_DIR}/${VERSION_CONFIG_FILE}"
Expand All @@ -38,17 +28,11 @@ export(
FILE "${CMAKE_CURRENT_BINARY_DIR}/${TARGETS_EXPORT_NAME}.cmake"
)
configure_package_config_file(
"${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in"
"${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in"
"${PROJECT_BINARY_DIR}/${PROJECT_CONFIG_FILE}"
INSTALL_DESTINATION "${PROJECT_BINARY_DIR}"
)

# Uninstall targets (build tree only)
configure_file("${PROJECT_SOURCE_DIR}/cmake/Uninstall.cmake.in" "${PROJECT_BINARY_DIR}/Uninstall.cmake"
IMMEDIATE @ONLY
)
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${PROJECT_BINARY_DIR}/Uninstall.cmake)

# Export for the install tree
set(CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
install(
Expand All @@ -60,5 +44,5 @@ install(
install(
FILES "${PROJECT_BINARY_DIR}/${PROJECT_CONFIG_FILE}"
"${PROJECT_BINARY_DIR}/${VERSION_CONFIG_FILE}"
DESTINATION "${CONFIG_INSTALL_DIR}"
DESTINATION ${CONFIG_INSTALL_DIR}
)

0 comments on commit db1e000

Please sign in to comment.