diff --git a/CMakeLists.txt b/CMakeLists.txt index 547772040..005286a12 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1331,14 +1331,30 @@ endif() # Check that BLAS (Basic Linear Algebra Subprograms) is found in the system # See http://www.netlib.org/blas/ ################################################################################ -find_library(BLAS blas) -if(NOT BLAS) +if(OS_IS_MACOSX) + # Avoid using the implementation that comes with the Accelerate framework + include(AvoidAccelerate) +else() + find_package(BLAS) + set_package_properties(BLAS PROPERTIES + URL "http://www.netlib.org/blas/" + DESCRIPTION "Basic Linear Algebra Subprograms" + PURPOSE "Used for matrix algebra computations." + TYPE REQUIRED + ) +endif() +if(NOT BLAS_FOUND) message(" The BLAS library has not been found.") message(" You can try to install it by typing:") - if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") - message(" sudo yum install blas-devel") + if(OS_IS_MACOSX) + message(" 'sudo port install lapack' if you are using Macports, or") + message(" 'brew install lapack' if you are using Homebrew.") else() - message(" sudo apt-get install libblas-dev") + if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") + message(" sudo yum install blas-devel") + else() + message(" sudo apt-get install libblas-dev") + endif() endif() message(FATAL_ERROR "BLAS is required to build gnss-sdr") endif() @@ -1349,8 +1365,16 @@ endif() # Check that LAPACK (Linear Algebra PACKage) is found in the system # See http://www.netlib.org/lapack/ ################################################################################ -find_library(LAPACK lapack) -if(NOT LAPACK) +if(NOT OS_IS_MACOSX) + find_package(LAPACK) + set_package_properties(LAPACK PROPERTIES + URL "http://www.netlib.org/lapack/" + DESCRIPTION "Linear Algebra PACKage" + PURPOSE "Used for matrix algebra computations." + TYPE REQUIRED + ) +endif() +if(NOT LAPACK_FOUND) message(" The LAPACK library has not been found.") message(" You can try to install it by typing:") if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") @@ -1457,7 +1481,7 @@ if(NOT ARMADILLO_FOUND OR ENABLE_OWN_ARMADILLO) if(NOT GFORTRAN) set(GFORTRAN "") endif() - set(ARMADILLO_LIBRARIES ${BLAS} ${LAPACK} ${GFORTRAN} ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX}) + set(ARMADILLO_LIBRARIES ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES} ${GFORTRAN} ${binary_dir}/${CMAKE_FIND_LIBRARY_PREFIXES}armadillo${CMAKE_STATIC_LIBRARY_SUFFIX}) set(LOCAL_ARMADILLO true CACHE STRING "Armadillo downloaded and built automatically" FORCE) set(ARMADILLO_VERSION_STRING ${armadillo_RELEASE}) file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/armadillo/armadillo-${armadillo_RELEASE}/include) diff --git a/README.md b/README.md index 4e6e0b11c..0cec356ac 100644 --- a/README.md +++ b/README.md @@ -545,6 +545,7 @@ $ sudo port selfupdate $ sudo port upgrade outdated $ sudo port install doxygen +docs $ sudo port install gnuradio +$ sudo port install lapack $ sudo port install armadillo $ sudo port install gnutls $ sudo port install google-glog +gflags @@ -586,7 +587,9 @@ Install the required dependencies: ~~~~~~ $ brew install cmake -$ brew install hdf5 arpack superlu armadillo +$ brew install hdf5 +$ brew install lapack +$ brew install arpack superlu armadillo $ brew install glog gflags $ brew install gnuradio $ brew install libmatio diff --git a/cmake/Modules/AvoidAccelerate.cmake b/cmake/Modules/AvoidAccelerate.cmake new file mode 100644 index 000000000..ab6e54cde --- /dev/null +++ b/cmake/Modules/AvoidAccelerate.cmake @@ -0,0 +1,58 @@ +# Copyright (C) 2011-2019 (see AUTHORS file for a list of contributors) +# +# This file is part of GNSS-SDR. +# +# GNSS-SDR is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GNSS-SDR is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNSS-SDR. If not, see . + +# Avoid using the BLAS and LAPACK implementations that comes with the Accelerate +# framework, which causes a bug when the BeiDou constellation is enabled + +find_library(BLAS_LIBRARIES + libblas.dylib + PATHS + /opt/local/lib/lapack + /usr/local/opt/lapack/lib + /usr/local/lib + ${BLAS_ROOT}/lib + $ENV{BLAS_ROOT}/lib + NO_DEFAULT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_ENVIRONMENT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH +) + +if(BLAS_LIBRARIES) + set(BLAS_FOUND TRUE) +endif() + + +find_library(LAPACK_LIBRARIES + liblapack.dylib + PATHS + /opt/local/lib/lapack + /usr/local/opt/lapack/lib + /usr/local/lib + ${BLAS_ROOT}/lib + $ENV{BLAS_ROOT}/lib + NO_DEFAULT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_ENVIRONMENT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH +) + +if(LAPACK_LIBRARIES) + set(LAPACK_FOUND TRUE) +endif() diff --git a/src/algorithms/libs/rtklib/CMakeLists.txt b/src/algorithms/libs/rtklib/CMakeLists.txt index f15c1c074..814ad6eaf 100644 --- a/src/algorithms/libs/rtklib/CMakeLists.txt +++ b/src/algorithms/libs/rtklib/CMakeLists.txt @@ -70,14 +70,10 @@ target_link_libraries(algorithms_libs_rtklib core_system_parameters Gflags::gflags Glog::glog + ${LAPACK_LIBRARIES} + ${BLAS_LIBRARIES} ) -if(OS_IS_MACOSX) - target_link_libraries(algorithms_libs_rtklib PRIVATE "-framework Accelerate") -else() - target_link_libraries(algorithms_libs_rtklib PRIVATE ${LAPACK} ${BLAS}) -endif() - set_property(TARGET algorithms_libs_rtklib APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES $ diff --git a/src/algorithms/libs/rtklib/rtklib.h b/src/algorithms/libs/rtklib/rtklib.h index 1b8cd9cbe..0f8cf61b7 100644 --- a/src/algorithms/libs/rtklib/rtklib.h +++ b/src/algorithms/libs/rtklib/rtklib.h @@ -215,9 +215,7 @@ const int NSATQZS = 0; const int NSYSQZS = 0; #endif -#ifndef __APPLE__ #define ENABDS -#endif #ifdef ENABDS const int MINPRNBDS = 1; //!< min satellite sat number of BeiDou const int MAXPRNBDS = 37; //!< max satellite sat number of BeiDou