diff --git a/CMakeLists.txt b/CMakeLists.txt index 4be8ab7a10fb0a09e98e4f246bfeff487c7e88a4..ae9096a24abce26812746277549f76bf9361a18f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,8 +172,16 @@ find_package(Armadillo) if(NOT ARMADILLO_FOUND AND ALLOW_DEPENDENCIES_DOWNLOAD) message("Armadillo will be downloaded and compiled locally in 'external_dependencies folder.") include(DownloadArmadillo) -endif() + if(NOT LAPACK_FOUND AND NOT BLAS_FOUND) + target_link_libraries( + armadillo + + PUBLIC + openblas + ) + endif() +endif() #---------------------------------------------------# # Add subdirectory with source codes to be compiled # diff --git a/DownloadOpenBLAS.cmake b/DownloadOpenBLAS.cmake index d93d00947cc48d0bd88c823746f9d98756dacc03..75e9bb62ee4fcfe4b7be7666fb6450895586ab27 100644 --- a/DownloadOpenBLAS.cmake +++ b/DownloadOpenBLAS.cmake @@ -20,34 +20,28 @@ FetchContent_Populate(OpenBLAS) ################## # Build OpenBLAS # ################## -cexecute_process( - COMMAND cmake -j ${N_CORES} . - WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH} - RESULT_VARIABLE rv -) -if(NOT rv STREQUAL "0") - message("OpenBLAS build: cmake .: ${rv}") -endif() - -set_target_properties(openblas PROPERTIES LINK_FLAGS -lpthread -lgfortran) - -# Build library -execute_process( - COMMAND cmake --build . -j ${N_CORES} --config Release - WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH} - RESULT_VARIABLE rv -) -if(NOT rv STREQUAL "0") - message("OpenBLAS build: cmake --build . -j ${N_CORES}: ${rv}") -endif() - -# Remove link flags -set(CMAKE_EXE_LINKER_FLAGS ${OLD_CMAKE_EXE_LINKER_FLAGS}) +#execute_process( +# COMMAND cmake -j ${N_CORES} . +# WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH} +# RESULT_VARIABLE rv +#) +#if(NOT rv STREQUAL "0") +# message("OpenBLAS build: cmake .: ${rv}") +#endif() +# +## Build library +#execute_process( +# COMMAND cmake --build . -j ${N_CORES} --config Release +# WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH} +# RESULT_VARIABLE rv +#) +#if(NOT rv STREQUAL "0") +# message("OpenBLAS build: cmake --build . -j ${N_CORES}: ${rv}") +#endif() -set(OpenBLAS_DIR ${CMAKE_CURRENT_LIST_DIR}/external_dependencies/OpenBLAS) find_package(OpenBLAS) - -if(NOT OpenBLAS_FOUND) - message(FATAL_ERROR "OpenBLAS was not downloaded successfully!") -endif() +# +#if(NOT OpenBLAS_FOUND) +# message(FATAL_ERROR "OpenBLAS was not downloaded successfully!") +#endif() diff --git a/FindArmadillo.cmake b/FindArmadillo.cmake index 106ec09e5bdd1f8908526d15bb5c7d3ba1776ffd..02f48af0963b295d8381fcf19ffa8fdb74b2dbcf 100644 --- a/FindArmadillo.cmake +++ b/FindArmadillo.cmake @@ -51,14 +51,14 @@ else() ${LIBNAME} HINTS - external_dependencies/armadillo + ${ROOT_DIR}/external_dependencies/armadillo PATHS /usr - /usr/local PATH_SUFFIXES lib + local ) # Set ARMADILLO_FOUND honoring the QUIET and REQUIRED arguments diff --git a/FindOpenBLAS.cmake b/FindOpenBLAS.cmake index b5699f46d52de18b6d5c034f342ac5bdf8c24b1f..7b698e5a80ff0387f69afbc8c9eefb14ae60f014 100644 --- a/FindOpenBLAS.cmake +++ b/FindOpenBLAS.cmake @@ -19,35 +19,55 @@ FIND_PATH( include/x86_64-linux-gnu ) -FIND_LIBRARY( - OpenBLAS_LIBRARIES +#option(LOCAL OFF) +IF(${OpenBLAS_INCLUDE_DIR} MATCHES "^.*external_dependencies.*$") + message("OpenBLAS is downloaded locally - the library will be built when needed.") + set(LOCAL ON) + set(TMP "") + string(REGEX REPLACE "/include" "" TMP ${OpenBLAS_INCLUDE_DIR}) + add_subdirectory(${TMP} ${TMP}) +endif() - NAMES - ${LIB_PREFIX}openblas.${LIB_SUFFIX} +if(LOCAL) + # If OpenBLAS is downloaded locally, the library will be compiled during build-time + INCLUDE(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS( + OpenBLAS + "OpenBLAS was NOT found!" + OpenBLAS_INCLUDE_DIR) +else() - HINTS - ${OpenBLAS_LIBRARY_DIRECTORY} - $ENV{OpenBLAS_LIBRARY_DIRECTORY} - ${ROOT_DIR}/external_dependencies/OpenBLAS - /usr - - PATH_SUFFIXES - lib - lib/x86_64-linux-gnu -) + FIND_LIBRARY( + OpenBLAS_LIBRARIES -# Set OpenBLAS_Found -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS( - OpenBLAS + NAMES + ${LIB_PREFIX}openblas.${LIB_SUFFIX} - FAIL_MESSAGE - "OpenBLAS was NOT found!" + HINTS + ${OpenBLAS_LIBRARY_DIRECTORY} + $ENV{OpenBLAS_LIBRARY_DIRECTORY} + ${ROOT_DIR}/external_dependencies/OpenBLAS + /usr - REQUIRED_VARS - OpenBLAS_INCLUDE_DIR - OpenBLAS_LIBRARIES -) + PATH_SUFFIXES + lib + lib/x86_64-linux-gnu + local + ) + + # Set OpenBLAS_Found + INCLUDE(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS( + OpenBLAS + + FAIL_MESSAGE + "OpenBLAS was NOT found!" + + REQUIRED_VARS + OpenBLAS_INCLUDE_DIR + OpenBLAS_LIBRARIES + ) +endif() IF (OpenBLAS_FOUND) MESSAGE(STATUS "Found OpenBLAS libraries: ${OpenBLAS_LIBRARIES}")