Hi all, I have one of those complex interactions that results in an issue where it’s not clear to me which component is responsible.
I have unit tests written using CTest that depend on Intel's MKL BLAS implementation. I use find_package(BLAS) and link the test executables to ${BLAS_LIBRARIES}. The test executables depend on the DYLD_LIBRARY_PATH to find the mkl libraries, rather than an embedded LC_RPATH. Unfortunately, because of Apple’s SIP, the DYLD_LIBRARY_PATH is not propagated to the ctest environment, so when it tries to run the tests it fails to link the MKL libraries. I need to get CMake to embed an external LC_PATH for test executables in the build directory. Here's a basic test executable (test.cpp) > #include <mkl_cblas.h> > > int main() { > return &cblas_dgemm != nullptr; > } and here is the associated CMakeLists.txt > cmake_minimum_required(VERSION 3.14.5) > > project(blas LANGUAGES CXX) > include(CTest) > > set(BLA_VENDOR Intel10_64lp_seq) > find_package(BLAS REQUIRED) > > add_executable(test_blas test.cpp) > target_link_libraries(test_blas ${BLAS_LIBRARIES}) > > add_test(NAME test_direct COMMAND test_blas) This finds MKL and builds and links the executable without any problem, and I can run it manually from my shell. But when I run with CTest I have the SIP issue because MacOS won’t propagate the necessary DYLD_LIBRARY_PATH into CTest’s environment. > Lukes-MacBook:test ldalessa$ make test > Running tests... > Test project /Users/ldalessa/test > Start 1: test_direct > 1/1 Test #1: test_direct ......................Child aborted***Exception: > 0.01 sec > > 0% tests passed, 1 tests failed out of 1 > > Total Test time (real) = 0.01 sec > > The following tests FAILED: > 1 - test_direct (Child aborted) > Errors while running CTest > make: *** [test] Error 8 > Lukes-MacBook:test ldalessa$ cat Testing/Temporary/LastTest.log > Start testing: Jun 10 03:35 PDT > ---------------------------------------------------------- > 1/1 Testing: test_direct > 1/1 Test: test_direct > Command: "/Users/ldalessa/test/test_blas" > Directory: /Users/ldalessa/test > "test_direct" start time: Jun 10 03:35 PDT > Output: > ---------------------------------------------------------- > dyld: Library not loaded: @rpath/libmkl_intel_lp64.dylib > Referenced from: /Users/ldalessa/test/test_blas > Reason: image not found > <end of output> > Test time = 0.01 sec > ---------------------------------------------------------- > Test Failed. > "test_direct" end time: Jun 10 03:35 PDT > "test_direct" time elapsed: 00:00:00 > ---------------------------------------------------------- > > End testing: Jun 10 03:35 PDT > Lukes-MacBook:test ldalessa$ My temporary workaround for this is currently to use Apple's Accelerate framework instead of MKL, which links using an embedded LC_PATH properly. The reason this isn’t adequate is that it is an intrusive solution. Intel's MKL uses different headers (mkl_blas.h, mkl_lapack.h) and symbol names which are explicitly used in the source code, so I have to have extra configure-time and configured header changes to adapt the code base to Accelerate. We also don’t (and won’t) have verified and validated code with Accelerate so it’s not a long term solution to our issues. Disabling SIP is also a non-starter. Thanks, Luke (https://stackoverflow.com/questions/56524774/how-to-use-ctest-on-macos-without-disabling-sip-no-lc-path-is-set <https://stackoverflow.com/questions/56524774/how-to-use-ctest-on-macos-without-disabling-sip-no-lc-path-is-set>)
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake