diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 38fdfb66..fe61eec5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -68,10 +68,10 @@ jobs: os: macOS-10.15 mode: Debug enable_python: on - #- name: "Windows Debug" - # os: windows-2019 - # mode: Debug - # enable_python: on + - name: "Windows Debug" + os: windows-2019 + mode: Debug + enable_python: on - name: "Octave Linux" os: ubuntu-20.04 mode: Release diff --git a/.travis-ci/common/before_script.sh b/.travis-ci/common/before_script.sh index 9d76efd2..a9af9ccb 100755 --- a/.travis-ci/common/before_script.sh +++ b/.travis-ci/common/before_script.sh @@ -31,6 +31,16 @@ if [[ "$DEBUG_CI" == "true" ]]; then else echo "No Fortran compiler command found" fi + + echo "------------------------------------" + + if ( R CMD config FC >/dev/null 2>&1 ); then + FC=$(R CMD config FC | awk '{ print $1 }') + echo "R Fortran config: ${FC}" + ${FC} --version 2>&1 | sed 's/^/ /' + else + echo "No R Fortran compiler command found" + fi echo "------------------------------------" diff --git a/.travis-ci/linux-macos/build.sh b/.travis-ci/linux-macos/build.sh index 6d6eed9e..d8b4a339 100755 --- a/.travis-ci/linux-macos/build.sh +++ b/.travis-ci/linux-macos/build.sh @@ -51,10 +51,21 @@ case "$COMPILER" in ;; esac +if [[ -z ${CMAKE_Fortran_COMPILER} ]]; then + CMAKE_Fortran_COMPILER="$(R CMD config FC | awk '{ print $1 }')" +fi + +if [[ -z ${Fortran_LINK_FLAGS} ]]; then + Fortran_LINK_FLAGS="$(R CMD config FLIBS)" +fi + + mkdir -p ${BUILD_DIR:-build} cd ${BUILD_DIR:-build} cmake \ -G "Unix Makefiles" \ + -DCMAKE_Fortran_COMPILER="${CMAKE_Fortran_COMPILER}" \ + -DFortran_LINK_FLAGS="${Fortran_LINK_FLAGS}" \ -DCMAKE_BUILD_TYPE="${MODE}" \ -DENABLE_COVERAGE="${ENABLE_COVERAGE}" \ -DENABLE_MEMCHECK="${ENABLE_MEMCHECK}" \ diff --git a/.travis-ci/windows/build.sh b/.travis-ci/windows/build.sh index 021abc2a..295c83ae 100755 --- a/.travis-ci/windows/build.sh +++ b/.travis-ci/windows/build.sh @@ -30,10 +30,20 @@ export EXTRA_SYSTEM_LIBRARY_PATH=${HOME}/Miniconda3/Library/lib # export EXTRA_SYSTEM_LIBRARY_PATH="C:/Program Files/MATLAB/R2022a/extern/lib/win64/microsoft" # EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DBLAS_NAMES=libmwblas -DLAPACK_NAMES=libmwlapack" +if [[ -z ${CMAKE_Fortran_COMPILER} ]]; then + CMAKE_Fortran_COMPILER="$(R CMD config FC | awk '{ print $1 }')" +fi + +if [[ -z ${Fortran_LINK_FLAGS} ]]; then + Fortran_LINK_FLAGS="$(R CMD config FLIBS)" +fi + + mkdir -p ${BUILD_DIR:-build} cd ${BUILD_DIR:-build} cmake \ - -DCMAKE_Fortran_COMPILER=$(command -v gfortran) \ + -DCMAKE_Fortran_COMPILER="${CMAKE_Fortran_COMPILER}" \ + -DFortran_LINK_FLAGS="${Fortran_LINK_FLAGS}" \ -DCMAKE_GENERATOR_PLATFORM=x64 \ -DEXTRA_SYSTEM_LIBRARY_PATH="${EXTRA_SYSTEM_LIBRARY_PATH}" \ -DENABLE_OCTAVE_BINDING=${ENABLE_OCTAVE_BINDING} \ diff --git a/CMakeLists.txt b/CMakeLists.txt index 207f7056..86a795b7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,6 @@ project(libKriging #------------------------------------------------------ enable_language(CXX) -enable_language(Fortran) #------------------------------------------------------ @@ -170,6 +169,9 @@ include_directories(SYSTEM ${CMAKE_BINARY_DIR}/dependencies/optim/header_only_ve add_library(blas ALIAS armadillo) # to use armadillo blas inside lbfgsb_cpp add_subdirectory(dependencies/lbfgsb_cpp) +#set(lbfgsb_INSTALL_DIR "${CMAKE_BINARY_DIR}/lbfgsb-installed") +#set(lbfgsb_DIR "${lbfgsb_INSTALL_DIR}/lib/cmake/lbfgsb") +#find_package(lbfgsb CONFIG REQUIRED) #------------------------------------------------------ diff --git a/bindings/R/rlibkriging/src/Makevars b/bindings/R/rlibkriging/src/Makevars index cd3cf3f3..db6ca057 100644 --- a/bindings/R/rlibkriging/src/Makevars +++ b/bindings/R/rlibkriging/src/Makevars @@ -27,14 +27,14 @@ else LIB_SUFFIX=a endif -ARMA_LIBS=$(shell ../../tools/ArmaLibsExtractor.sh) +EXTERNAL_LIBS=$(shell ../../tools/ExternalLibsExtractor.sh) CXX_STD = CXX11 #PKG_CFLAGS= PKG_CPPFLAGS=-I${LIBKRIGING_PATH}/include -include "libKriging/utils/lkalloc.hpp" -DARMA_ALIEN_MEM_ALLOC_FUNCTION=lkalloc::malloc -DARMA_ALIEN_MEM_FREE_FUNCTION=lkalloc::free # https://stackoverflow.com/questions/49154506/understanding-makevars-for-linking-to-external-c-library-in-r-package -PKG_LIBS=-L${LIBKRIGING_PATH}/lib -lKriging -larmadillo -llbfgsb_cpp $(EXTRA_PKG_LIBS) $(ARMA_LIBS) +PKG_LIBS=-L${LIBKRIGING_PATH}/lib -lKriging -larmadillo -llbfgsb $(EXTRA_PKG_LIBS) $(EXTERNAL_LIBS) MAKEFLAGS=-j$(nproc) $(SHLIB): .check ${LIBKRIGING_PATH}/lib/libKriging.$(LIB_SUFFIX) ${LIBKRIGING_PATH}/lib/libarmadillo.$(LIB_SUFFIX) diff --git a/bindings/R/rlibkriging/src/Makevars.win b/bindings/R/rlibkriging/src/Makevars.win index 611ea118..223157cc 100644 --- a/bindings/R/rlibkriging/src/Makevars.win +++ b/bindings/R/rlibkriging/src/Makevars.win @@ -13,9 +13,9 @@ endif PKG_CFLAGS= PKG_CPPFLAGS=-I${LIBKRIGING_PATH}/include -include "libKriging/utils/lkalloc.hpp" -DARMA_ALIEN_MEM_ALLOC_FUNCTION=lkalloc::malloc -DARMA_ALIEN_MEM_FREE_FUNCTION=lkalloc::free -PKG_CXXFLAGS=-std=c++11 +PKG_CXXFLAGS=-std=c++11 # https://stackoverflow.com/questions/49154506/understanding-makevars-for-linking-to-external-c-library-in-r-package -PKG_LIBS=-L${LIBKRIGING_PATH}/lib -lKriging -larmadillo -llbfgsb_cpp ${EXTRA_SYSTEM_LIBRARY_PATH}/openblas.lib $(EXTRA_PKG_LIBS) +PKG_LIBS=-L${LIBKRIGING_PATH}/lib -lKriging -larmadillo -llbfgsb ${EXTRA_SYSTEM_LIBRARY_PATH}/openblas.lib $(EXTRA_PKG_LIBS) $(SHLIB): .check ${LIBKRIGING_PATH}/lib/libKriging.$(LIB_SUFFIX) ${LIBKRIGING_PATH}/lib/libarmadillo.$(LIB_SUFFIX) diff --git a/bindings/R/tools/CMakeLists.txt b/bindings/R/tools/CMakeLists.txt index 139b2c00..ccfab28b 100644 --- a/bindings/R/tools/CMakeLists.txt +++ b/bindings/R/tools/CMakeLists.txt @@ -1,6 +1,15 @@ cmake_minimum_required(VERSION 3.13) project(armadillo_lib_extractor LANGUAGES NONE) + include(${LIBKRIGING_PATH}/share/Armadillo/CMake/ArmadilloLibraryDepends.cmake) get_target_property(arma_libs armadillo INTERFACE_LINK_LIBRARIES) -list(JOIN arma_libs " " lib_str) -message(STATUS ARMA_LIBS=${lib_str}) + +include(${LIBKRIGING_PATH}/lib/cmake/lbfgsb/lbfgsbConfig.cmake) +get_target_property(lbfgsb_libs lbfgsb::lbfgsb INTERFACE_LINK_LIBRARIES) + +#include(${LIBKRIGING_PATH}/lib/cmake/lbfgsb_cpp/lbfgsb_cppConfig.cmake) +#get_target_property(lbfgsb_cpp_libs lbfgsb_cpp::lbfgsb_cpp INTERFACE_LINK_LIBRARIES) + +set(external_libs ${arma_libs} ${lbfgsb_libs} ${lbfgsb_cpp_libs}) +list(JOIN external_libs " " lib_str) +message(STATUS EXTERNAL_LIBS=${lib_str}) diff --git a/bindings/R/tools/ArmaLibsExtractor.sh b/bindings/R/tools/ExternalLibsExtractor.sh similarity index 72% rename from bindings/R/tools/ArmaLibsExtractor.sh rename to bindings/R/tools/ExternalLibsExtractor.sh index 3130cfbd..e5532cf2 100755 --- a/bindings/R/tools/ArmaLibsExtractor.sh +++ b/bindings/R/tools/ExternalLibsExtractor.sh @@ -8,9 +8,9 @@ if [[ ! -d "${LIBKRIGING_PATH}" ]]; then fi BASEDIR=$(dirname "$0") -BASEDIR=$(readlink -f "${BASEDIR}") +BASEDIR=$(cd "$BASEDIR" && pwd -P) TMPDIR=$(mktemp -d) -ARMA_LIBS=$(cmake -DLIBKRIGING_PATH="${LIBKRIGING_PATH}" -B "${TMPDIR}" "${BASEDIR}" | sed -n -r -e 's/^-- ARMA_LIBS=(.*)$/\1/p') +ARMA_LIBS=$(cmake -DLIBKRIGING_PATH="${LIBKRIGING_PATH}" -B "${TMPDIR}" "${BASEDIR}" | sed -n -r -e 's/^-- EXTERNAL_LIBS=(.*)$/\1/p') echo "${ARMA_LIBS}" rm -fr "${TMPDIR}" \ No newline at end of file diff --git a/dependencies/lbfgsb_cpp b/dependencies/lbfgsb_cpp index d5bb0a6e..f613bb71 160000 --- a/dependencies/lbfgsb_cpp +++ b/dependencies/lbfgsb_cpp @@ -1 +1 @@ -Subproject commit d5bb0a6e6fdf7681f21102aae11784ca0963afe2 +Subproject commit f613bb71afe5f31a9db5b4a508c1fda092199c78 diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index af77f2d6..fd7e746f 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -28,7 +28,7 @@ if (CXX_CLANG_TIDY) CXX_CLANG_TIDY ${CXX_CLANG_TIDY}) endif () -target_link_libraries(Kriging PUBLIC armadillo lbfgsb_cpp) +target_link_libraries(Kriging PUBLIC armadillo lbfgsb_cpp::lbfgsb_cpp) # TODO check if this method is useful # * https://atomheartother.github.io/c++/2018/07/12/CPPDynLib.html diff --git a/src/lib/include/libKriging/utils/data_from_arma_vec.hpp b/src/lib/include/libKriging/utils/data_from_arma_vec.hpp index cd93f53b..f7ed4c73 100644 --- a/src/lib/include/libKriging/utils/data_from_arma_vec.hpp +++ b/src/lib/include/libKriging/utils/data_from_arma_vec.hpp @@ -1,10 +1,8 @@ #ifndef LIBKRIGING_SRC_LIB_INCLUDE_LIBKRIGING_UTILS_DATA_FROM_ARMA_VEC_HPP #define LIBKRIGING_SRC_LIB_INCLUDE_LIBKRIGING_UTILS_DATA_FROM_ARMA_VEC_HPP -namespace std { inline double* data(arma::vec& x) { return x.memptr(); } -} // namespace std #endif // LIBKRIGING_SRC_LIB_INCLUDE_LIBKRIGING_UTILS_DATA_FROM_ARMA_VEC_HPP