mirror of
https://git.gfz-potsdam.de/naaice/poet.git
synced 2025-12-16 04:48:23 +01:00
build: Improve R library handling in CMake
This commit is contained in:
parent
2457dfc337
commit
d6cd0ac3a8
@ -1,25 +0,0 @@
|
|||||||
# prepare R environment (Rcpp + RInside)
|
|
||||||
find_program(R_EXE "R")
|
|
||||||
|
|
||||||
# search for R executable, R header file and library path
|
|
||||||
if(R_EXE)
|
|
||||||
execute_process(COMMAND ${R_EXE} RHOME
|
|
||||||
OUTPUT_VARIABLE R_ROOT_DIR
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
find_path(R_INCLUDE_DIR R.h
|
|
||||||
HINTS ${R_ROOT_DIR}
|
|
||||||
PATHS /usr/inlcude /usr/local/include /usr/share
|
|
||||||
PATH_SUFFIXES include/R R/include
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(R_LIBRARY R
|
|
||||||
HINTS ${R_ROOT_DIR}/lib
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "No R runtime found!")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(R_LIBRARIES ${R_LIBRARY})
|
|
||||||
set(R_INCLUDE_DIRS ${R_INCLUDE_DIR})
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
# find RInside libraries and include path
|
|
||||||
execute_process(COMMAND echo "cat(find.package('RInside'))"
|
|
||||||
COMMAND ${R_EXE} --vanilla --slave
|
|
||||||
RESULT_VARIABLE RINSIDE_NOT_FOUND
|
|
||||||
ERROR_QUIET
|
|
||||||
OUTPUT_VARIABLE RINSIDE_PATH
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
if(RInside_NOT_FOUND)
|
|
||||||
message(FATAL_ERROR "RInside not found!")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_library(R_RInside_LIBRARY libRInside.so
|
|
||||||
HINTS ${RINSIDE_PATH}/lib)
|
|
||||||
|
|
||||||
list(APPEND R_LIBRARIES ${R_RInside_LIBRARY})
|
|
||||||
|
|
||||||
find_path(R_RInside_INCLUDE_DIR RInside.h
|
|
||||||
HINTS ${RINSIDE_PATH}
|
|
||||||
PATH_SUFFIXES include)
|
|
||||||
|
|
||||||
list(APPEND R_INCLUDE_DIRS ${R_RInside_INCLUDE_DIR})
|
|
||||||
89
CMake/FindRRuntime.cmake
Normal file
89
CMake/FindRRuntime.cmake
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
# prepare R environment (Rcpp + RInside)
|
||||||
|
find_program(R_EXE "R")
|
||||||
|
|
||||||
|
# search for R executable, R header file and library path
|
||||||
|
if(R_EXE)
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${R_EXE} RHOME
|
||||||
|
OUTPUT_VARIABLE R_ROOT_DIR
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
find_path(
|
||||||
|
R_INCLUDE_DIR R.h
|
||||||
|
HINTS ${R_ROOT_DIR}
|
||||||
|
PATHS /usr/inlcude /usr/local/include /usr/share
|
||||||
|
PATH_SUFFIXES include/R R/include
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(
|
||||||
|
R_LIBRARY R
|
||||||
|
HINTS ${R_ROOT_DIR}/lib
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "No R runtime found!")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(R_INCLUDE_DIR R_LIBRARY R_EXE)
|
||||||
|
|
||||||
|
set(R_LIBRARIES ${R_LIBRARY})
|
||||||
|
set(R_INCLUDE_DIRS ${R_INCLUDE_DIR})
|
||||||
|
|
||||||
|
# find Rcpp include directory
|
||||||
|
execute_process(COMMAND echo "cat(find.package('Rcpp'))"
|
||||||
|
COMMAND ${R_EXE} --vanilla --slave
|
||||||
|
RESULT_VARIABLE RCPP_NOT_FOUND
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_VARIABLE RCPP_PATH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
if(RCPP_NOT_FOUND)
|
||||||
|
message(FATAL_ERROR "Rcpp not found!")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(R_Rcpp_INCLUDE_DIR Rcpp.h
|
||||||
|
HINTS ${RCPP_PATH}
|
||||||
|
PATH_SUFFIXES include)
|
||||||
|
|
||||||
|
mark_as_advanced(R_Rcpp_INCLUDE_DIR)
|
||||||
|
|
||||||
|
list(APPEND R_INCLUDE_DIRS ${R_Rcpp_INCLUDE_DIR})
|
||||||
|
|
||||||
|
# find RInside libraries and include path
|
||||||
|
execute_process(COMMAND echo "cat(find.package('RInside'))"
|
||||||
|
COMMAND ${R_EXE} --vanilla --slave
|
||||||
|
RESULT_VARIABLE RINSIDE_NOT_FOUND
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_VARIABLE RINSIDE_PATH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
if(RInside_NOT_FOUND)
|
||||||
|
message(FATAL_ERROR "RInside not found!")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_library(R_RInside_LIBRARY libRInside.so
|
||||||
|
HINTS ${RINSIDE_PATH}/lib)
|
||||||
|
|
||||||
|
|
||||||
|
find_path(R_RInside_INCLUDE_DIR RInside.h
|
||||||
|
HINTS ${RINSIDE_PATH}
|
||||||
|
PATH_SUFFIXES include)
|
||||||
|
|
||||||
|
list(APPEND R_LIBRARIES ${R_RInside_LIBRARY})
|
||||||
|
list(APPEND R_INCLUDE_DIRS ${R_RInside_INCLUDE_DIR})
|
||||||
|
|
||||||
|
mark_as_advanced(R_RInside_LIBRARY R_RInside_INCLUDE_DIR)
|
||||||
|
|
||||||
|
# putting all together into interface library
|
||||||
|
|
||||||
|
add_library(RRuntime INTERFACE IMPORTED)
|
||||||
|
set_target_properties(
|
||||||
|
RRuntime PROPERTIES
|
||||||
|
INTERFACE_LINK_LIBRARIES "${R_LIBRARIES}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${R_INCLUDE_DIRS}"
|
||||||
|
)
|
||||||
|
|
||||||
|
unset(R_LIBRARIES)
|
||||||
|
unset(R_INCLUDE_DIRS)
|
||||||
@ -1,23 +0,0 @@
|
|||||||
# find Rcpp include directory
|
|
||||||
execute_process(COMMAND echo "cat(find.package('Rcpp'))"
|
|
||||||
COMMAND ${R_EXE} --vanilla --slave
|
|
||||||
RESULT_VARIABLE RCPP_NOT_FOUND
|
|
||||||
ERROR_QUIET
|
|
||||||
OUTPUT_VARIABLE RCPP_PATH
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
if(RCPP_NOT_FOUND)
|
|
||||||
message(FATAL_ERROR "Rcpp not found!")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# find_library(R_Rcpp_LIBRARY Rcpp.so
|
|
||||||
# HINTS ${RCPP_PATH}/libs)
|
|
||||||
|
|
||||||
# list(APPEND R_LIBRARIES ${R_Rcpp_LIBRARY})
|
|
||||||
|
|
||||||
find_path(R_Rcpp_INCLUDE_DIR Rcpp.h
|
|
||||||
HINTS ${RCPP_PATH}
|
|
||||||
PATH_SUFFIXES include)
|
|
||||||
|
|
||||||
list(APPEND R_INCLUDE_DIRS ${R_Rcpp_INCLUDE_DIR})
|
|
||||||
@ -16,9 +16,7 @@ list(APPEND CMAKE_MODULE_PATH "${POET_SOURCE_DIR}/CMake")
|
|||||||
|
|
||||||
find_package(MPI REQUIRED)
|
find_package(MPI REQUIRED)
|
||||||
|
|
||||||
find_package(R REQUIRED)
|
find_package(RRuntime REQUIRED)
|
||||||
find_package(Rcpp REQUIRED)
|
|
||||||
find_package(RInside REQUIRED)
|
|
||||||
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
add_subdirectory(R_lib)
|
add_subdirectory(R_lib)
|
||||||
|
|||||||
@ -6,7 +6,7 @@ find_library(MATH_LIBRARY m)
|
|||||||
find_library(CRYPTO_LIBRARY crypto)
|
find_library(CRYPTO_LIBRARY crypto)
|
||||||
|
|
||||||
add_library(poet_lib ${poet_lib_SRC})
|
add_library(poet_lib ${poet_lib_SRC})
|
||||||
target_include_directories(poet_lib PUBLIC ${PROJECT_SOURCE_DIR}/include ${R_INCLUDE_DIRS})
|
target_include_directories(poet_lib PUBLIC ${PROJECT_SOURCE_DIR}/include)
|
||||||
target_link_libraries(poet_lib PUBLIC
|
target_link_libraries(poet_lib PUBLIC
|
||||||
MPI::MPI_C ${MATH_LIBRARY} ${CRYPTO_LIBRARY} ${R_LIBRARIES})
|
MPI::MPI_C ${MATH_LIBRARY} ${CRYPTO_LIBRARY} RRuntime)
|
||||||
target_compile_definitions(poet_lib PUBLIC STRICT_R_HEADERS OMPI_SKIP_MPICXX)
|
target_compile_definitions(poet_lib PUBLIC STRICT_R_HEADERS OMPI_SKIP_MPICXX)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user