@@ -5,42 +5,105 @@ project(TopLevelProject VERSION 1.0 LANGUAGES CXX)
55set (CMAKE_CXX_STANDARD 14)
66set (CMAKE_CXX_STANDARD_REQUIRED True )
77
8+ # Global paths for third-party downloads/builds
9+ set (BUILD_DIR "${CMAKE_BINARY_DIR} /third_party_build" )
10+ set (INSTALL_DIR "${CMAKE_BINARY_DIR} /third_party_install" )
11+
812# Display the detected C++ compiler ID
913message (STATUS "Detected CXX Compiler ID: ${CMAKE_CXX_COMPILER_ID} " )
1014
1115# Compiler-specific CXX_FLAGS and linker flags
16+ # Compiler ID = AppleClang
1217if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" )
1318 set (CMAKE_CXX_FLAGS "-O3 -Xclang -fopenmp -DARMA_DONT_USE_WRAPPER -DARMA_USE_SUPERLU" )
1419 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/opt/libomp/lib -L/opt/homebrew/opt/libomp/lib -lomp" )
1520 message (STATUS "Using AppleClang-specific flags." )
1621 include_directories ("/usr/local/opt/libomp/include" "/opt/homebrew/opt/libomp/include" )
22+ # Compiler ID = IntelLLVM
1723elseif (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM" )
18- set (CMAKE_CXX_FLAGS "-O3 -qopenmp -DARMA_DONT_USE_WRAPPER -DARMA_USE_SUPERLU -diag-disable=10430" )
19- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} " )
20- message (STATUS "Using non-Clang compiler flags." )
21- # Get MKLROOT from environment or fallback to default
22- if (DEFINED ENV{MKLROOT})
23- set (MKLROOT $ENV{MKLROOT} )
24- else ()
25- set (MKLROOT "/opt/intel/oneapi/mkl/latest" )
26- endif ()
27-
28- # Automatically set Armadillo to link against MKL
29- set (BLAS_LIBRARIES "${MKLROOT} /lib/intel64/libmkl_rt.so" CACHE STRING "BLAS library path for MKL" )
30- set (LAPACK_LIBRARIES "${MKLROOT} /lib/intel64/libmkl_rt.so" CACHE STRING "LAPACK library path for MKL" )
31- set (ARMA_USE_WRAPPER OFF CACHE BOOL "Disable Armadillo wrapper to directly use MKL" )
32-
33- message (STATUS "Using MKL from: ${MKLROOT} " )
24+ set (CMAKE_CXX_FLAGS "-O3 -qopenmp -DARMA_DONT_USE_WRAPPER -DARMA_USE_SUPERLU -diag-disable=10430" )
25+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} " )
26+ message (STATUS "Using non-Clang compiler flags." )
27+ # Get MKLROOT from environment or fallback to default
28+ if (DEFINED ENV{MKLROOT})
29+ set (MKLROOT $ENV{MKLROOT} )
30+ else ()
31+ set (MKLROOT "/opt/intel/oneapi/mkl/latest" )
32+ endif ()
33+ # Automatically set Armadillo to link against MKL
34+ set (BLAS_LIBRARIES "${MKLROOT} /lib/intel64/libmkl_rt.so" CACHE STRING "BLAS library path for MKL" )
35+ set (LAPACK_LIBRARIES "${MKLROOT} /lib/intel64/libmkl_rt.so" CACHE STRING "LAPACK library path for MKL" )
36+ set (ARMA_USE_WRAPPER OFF CACHE BOOL "Disable Armadillo wrapper to directly use MKL" )
37+ message (STATUS "Using MKL from: ${MKLROOT} " )
38+ # Compiler ID = MSVC
39+ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
40+ message (STATUS "Detected MSVC Compiler" )
41+ # Set MSVC flags
42+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2 /openmp /DARMADILLO_DONT_USE_WRAPPER /DARMADILLO_USE_SUPERLU" )
43+ message (STATUS "Using MSVC compiler flags: ${CMAKE_CXX_FLAGS} " )
44+
45+ # Compiler ID = Non-Clang
3446else ()
3547 set (CMAKE_CXX_FLAGS "-O3 -fopenmp -DARMA_DONT_USE_WRAPPER -DARMA_USE_SUPERLU" )
3648 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} " )
3749 message (STATUS "Using non-Clang compiler flags." )
3850endif ()
3951
40- find_package (Eigen3 3.3.7 REQUIRED )
41- find_library (OpenBLAS_LIBRARIES NAMES openblas blas PATHS "/usr/lib/x86_64-linux-gnu" "/usr/local/opt/" "usr/local/lib" REQUIRED )
42- find_library (LAPACK_LIBRARY lapack REQUIRED PATHS "/usr/lib" "/usr/lib/x86_64-linux-gnu" "/usr/local/lib" "/usr/local/opt/" )
52+ # Find packages and libraries
53+ if (NOT MSVC )
54+ find_package (Eigen3 3.3.7 REQUIRED )
55+ find_library (OpenBLAS_LIBRARIES NAMES openblas blas PATHS "/usr/lib/x86_64-linux-gnu" "/usr/local/opt/" "usr/local/lib" REQUIRED )
56+ find_library (LAPACK_LIBRARY lapack REQUIRED PATHS "/usr/lib" "/usr/lib/x86_64-linux-gnu" "/usr/local/lib" "/usr/local/opt/" )
57+ endif ()
58+
59+ # ========== Eigen, OpenBLAS, LAPACK (MSVC only) ==========
60+ if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
61+ # ----------- Eigen ----------
62+ set (EIGEN_VERSION "3.3.7" )
63+ set (EIGEN_TARBALL_URL "https://gitlab.com/libeigen/eigen/-/archive/${EIGEN_VERSION} /eigen-${EIGEN_VERSION} .tar.gz" )
64+ set (EIGEN_SRC_DIR "${BUILD_DIR} /eigen-${EIGEN_VERSION} " )
65+ message (STATUS "Downloading and extracting Eigen..." )
66+ file (DOWNLOAD ${EIGEN_TARBALL_URL} ${BUILD_DIR} /eigen-${EIGEN_VERSION}.tar.gz SHOW_PROGRESS )
67+ execute_process (COMMAND ${CMAKE_COMMAND} -E tar xzf eigen-${EIGEN_VERSION}.tar.gz WORKING_DIRECTORY ${BUILD_DIR} )
68+ set (CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${EIGEN_SRC_DIR} " )
69+ set (CMAKE_PREFIX_PATH ${EIGEN_SRC_DIR} ${CMAKE_PREFIX_PATH} )
70+ set (Eigen3_DIR "${EIGEN_SRC_DIR} /cmake" CACHE PATH "Path to Eigen3" )
71+
72+ # ----------- OpenBLAS ----------
73+ set (OPENBLAS_VERSION "0.3.29" )
74+ set (OPENBLAS_TARBALL_URL "https://github.com/xianyi/OpenBLAS/archive/refs/tags/v${OPENBLAS_VERSION} .tar.gz" )
75+ set (OPENBLAS_SRC_DIR "${BUILD_DIR} /OpenBLAS-${OPENBLAS_VERSION} " )
76+ set (OPENBLAS_BUILD_DIR "${OPENBLAS_SRC_DIR} /build" )
77+ set (OPENBLAS_INSTALL_DIR "${INSTALL_DIR} /OpenBLAS-${OPENBLAS_VERSION} " )
78+
79+ message (STATUS "Downloading and extracting OpenBLAS..." )
80+ file (DOWNLOAD ${OPENBLAS_TARBALL_URL} ${BUILD_DIR} /OpenBLAS-${OPENBLAS_VERSION}.tar.gz SHOW_PROGRESS )
81+ execute_process (COMMAND ${CMAKE_COMMAND} -E tar xzf OpenBLAS-${OPENBLAS_VERSION}.tar.gz WORKING_DIRECTORY ${BUILD_DIR} )
82+
83+ file (MAKE_DIRECTORY ${OPENBLAS_BUILD_DIR} )
84+ file (MAKE_DIRECTORY ${OPENBLAS_INSTALL_DIR} )
85+
86+ message (STATUS "Building OpenBLAS..." )
87+ execute_process (COMMAND ${CMAKE_COMMAND} ${OPENBLAS_SRC_DIR}
88+ -DCMAKE_INSTALL_PREFIX=${OPENBLAS_INSTALL_DIR}
89+ -DBUILD_SHARED_LIBS=OFF
90+ -DCMAKE_BUILD_TYPE=Release
91+ WORKING_DIRECTORY ${OPENBLAS_BUILD_DIR} )
4392
93+ execute_process (COMMAND ${CMAKE_COMMAND} --build . --config Release
94+ WORKING_DIRECTORY ${OPENBLAS_BUILD_DIR} )
95+
96+ execute_process (COMMAND ${CMAKE_COMMAND} --install . --config Release
97+ WORKING_DIRECTORY ${OPENBLAS_BUILD_DIR} )
98+
99+ # Set OpenBLAS variables
100+ set (OpenBLAS_LIBRARIES "${OPENBLAS_INSTALL_DIR} /lib/openblas.lib" CACHE FILEPATH "OpenBLAS library" )
101+ set (OPENBLAS_DIR "${OPENBLAS_INSTALL_DIR} " )
102+ set (CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "${OPENBLAS_DIR} /lib" )
103+ set (CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${OPENBLAS_DIR} /include" )
104+
105+ endif ()
106+ # Required libraries and link settings
44107if (POLICY CMP0135)
45108 cmake_policy (SET CMP0135 NEW )
46109endif ()
@@ -51,62 +114,139 @@ set(SUPERLU_VERSION "5.3.0")
51114set (BUILD_DIR "${CMAKE_BINARY_DIR} /third_party_build" )
52115set (INSTALL_DIR "${CMAKE_BINARY_DIR} /third_party_install" )
53116
54- # SuperLU configuration
55- set (SUPERLU_TARBALL_URL "https://github.com/xiaoyeli/superlu/archive/refs/tags/v${SUPERLU_VERSION} .tar.gz" )
56- set (SUPERLU_SRC_DIR "${BUILD_DIR} /superlu-${SUPERLU_VERSION} " )
57- set (SUPERLU_BUILD_DIR "${SUPERLU_SRC_DIR} /build" )
58- set (SUPERLU_INSTALL_DIR "${INSTALL_DIR} /superlu-${SUPERLU_VERSION} " )
117+ # SuperLU Download and Extraction
118+ set (SUPERLU_TARBALL_URL "https://github.com/xiaoyeli/superlu/archive/refs/tags/v${SUPERLU_VERSION} .tar.gz" )
119+ set (SUPERLU_SRC_DIR "${BUILD_DIR} /superlu-${SUPERLU_VERSION} " )
120+ set (SUPERLU_BUILD_DIR "${SUPERLU_SRC_DIR} /build" )
121+ set (SUPERLU_INSTALL_DIR "${INSTALL_DIR} /superlu-${SUPERLU_VERSION} " )
122+ file (DOWNLOAD ${SUPERLU_TARBALL_URL} ${BUILD_DIR} /superlu-${SUPERLU_VERSION}.tar.gz )
123+ execute_process (COMMAND ${CMAKE_COMMAND} -E tar xzf superlu-${SUPERLU_VERSION}.tar.gz WORKING_DIRECTORY ${BUILD_DIR} )
59124
60- file (DOWNLOAD ${SUPERLU_TARBALL_URL} ${BUILD_DIR} /superlu-${SUPERLU_VERSION}.tar.gz )
61- execute_process (COMMAND ${CMAKE_COMMAND} -E tar xzf superlu-${SUPERLU_VERSION}.tar.gz WORKING_DIRECTORY ${BUILD_DIR} )
62- # Detect platform and apply the correct sed command
125+ # Patch Code 1 to install SuperLU without errors
126+ # Disable fortran for MSVC and AppleClang compilers
127+ if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" )
128+ message (STATUS "Patching SuperLU: Disabling Fortran ..." )
129+ set (SUPERLU_CMAKELISTS "${SUPERLU_SRC_DIR} /CMakeLists.txt" )
130+ # Comment out enable_language(Fortran) if MSVC/AppleClang is detected
131+ file (READ "${SUPERLU_CMAKELISTS} " SUPERLU_CMAKE_CONTENTS )
132+ string (REPLACE "enable_language (Fortran)" "# enable_language (Fortran) # disabled for MSVC/AppleClang"
133+ SUPERLU_CMAKE_CONTENTS "${SUPERLU_CMAKE_CONTENTS} " )
134+ file (WRITE "${SUPERLU_CMAKELISTS} " "${SUPERLU_CMAKE_CONTENTS} " )
135+ endif ()
136+ # Patch Code 1 to install SuperLU without errors
137+ # Set the CMakeLists version in SuperLU to match with MOLE
63138if (APPLE )
64139 execute_process (
65140 COMMAND sed -i "" "s/cmake_minimum_required(VERSION 2.8.12)/cmake_minimum_required(VERSION 3.10)/" CMakeLists.txt
66141 WORKING_DIRECTORY ${SUPERLU_SRC_DIR}
67142 )
143+ elseif (WIN32 )
144+ execute_process (
145+ COMMAND powershell -Command "(Get-Content ${SUPERLU_SRC_DIR} /CMakeLists.txt) -replace 'cmake_minimum_required\\ (VERSION 2.8.12\\ )', 'cmake_minimum_required(VERSION 3.10)' | Set-Content ${SUPERLU_SRC_DIR} /CMakeLists.txt"
146+ )
147+ execute_process (
148+ COMMAND powershell -Command "Select-String -Pattern 'cmake_minimum_required' -Path '${SUPERLU_SRC_DIR} /CMakeLists.txt'"
149+ OUTPUT_VARIABLE cmake_version_line
150+ OUTPUT_STRIP_TRAILING_WHITESPACE
151+ )
152+ message (STATUS "SuperLU CMakeLists.txt after patch: ${cmake_version_line} " )
68153else ()
69154 execute_process (
70155 COMMAND sed -i "s/cmake_minimum_required(VERSION 2.8.12)/cmake_minimum_required(VERSION 3.10)/" CMakeLists.txt
71156 WORKING_DIRECTORY ${SUPERLU_SRC_DIR}
72157 )
73158endif ()
74-
75- # Confirm the patch
76159execute_process (
77160 COMMAND grep "cmake_minimum_required" ${SUPERLU_SRC_DIR} /CMakeLists.txt
78161 OUTPUT_VARIABLE cmake_version_line
79162 OUTPUT_STRIP_TRAILING_WHITESPACE
80- )
163+ )
81164message (STATUS "SuperLU CMakeLists.txt after patch: ${cmake_version_line} " )
82165
166+ #Setting up SUPERLU build dir
167+
83168execute_process (COMMAND ${CMAKE_COMMAND} -E make_directory ${SUPERLU_BUILD_DIR} )
84169
85- execute_process (COMMAND ${CMAKE_COMMAND} ..
86- -DCMAKE_INSTALL_PREFIX=${SUPERLU_INSTALL_DIR}
87- -Denable_internal_blaslib=NO
88- -DTPL_BLAS_LIBRARIES=${OpenBLAS_LIBRARIES}
89- -DCMAKE_POSITION_INDEPENDENT_CODE=ON
90- -DCMAKE_C_FLAGS= "-fPIC"
91- -DCMAKE_CXX_FLAGS= "-fPIC"
92- WORKING_DIRECTORY ${SUPERLU_BUILD_DIR} )
93- execute_process (COMMAND make -j4 WORKING_DIRECTORY ${SUPERLU_BUILD_DIR} )
94- execute_process (COMMAND make install WORKING_DIRECTORY ${SUPERLU_BUILD_DIR} )
95-
96- # Armadillo configuration
97- set (ARMADILLO_TARBALL_URL "https://sourceforge.net/projects/arma/files/armadillo-${ARMADILLO_VERSION} .tar.xz" )
98- set (ARMADILLO_BUILD_DIR "${BUILD_DIR} /armadillo-${ARMADILLO_VERSION} " )
99- set (ARMADILLO_INSTALL_DIR "${INSTALL_DIR} /armadillo-${ARMADILLO_VERSION} " )
100-
101- file (DOWNLOAD ${ARMADILLO_TARBALL_URL} ${BUILD_DIR} /armadillo-${ARMADILLO_VERSION}.tar.xz )
102- execute_process (COMMAND ${CMAKE_COMMAND} -E tar xJf armadillo-${ARMADILLO_VERSION}.tar.xz WORKING_DIRECTORY ${BUILD_DIR} )
103- execute_process (COMMAND ${CMAKE_COMMAND}
104- -DSuperLU_INCLUDE_DIR=${SUPERLU_INSTALL_DIR}/include
105- -DSuperLU_LIBRARY=${SUPERLU_INSTALL_DIR}/lib/libsuperlu.a
106- -DCMAKE_INSTALL_PREFIX=${ARMADILLO_INSTALL_DIR} .
107- WORKING_DIRECTORY ${ARMADILLO_BUILD_DIR} )
108- execute_process (COMMAND make -j4 WORKING_DIRECTORY ${ARMADILLO_BUILD_DIR} )
109- execute_process (COMMAND make install WORKING_DIRECTORY ${ARMADILLO_BUILD_DIR} )
170+ #Configuring SuperLU for MSVC
171+ if (WIN32 )
172+ message (STATUS "Configuring SuperLU build for Windows using MSVC..." )
173+ execute_process (COMMAND ${CMAKE_COMMAND} ..
174+ -DCMAKE_INSTALL_PREFIX=${SUPERLU_INSTALL_DIR}
175+ -Denable_internal_blaslib=NO
176+ -DTPL_BLAS_LIBRARIES=${OpenBLAS_LIBRARIES}
177+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON
178+ -DCMAKE_C_FLAGS= "/O2"
179+ -DCMAKE_CXX_FLAGS= "/O2"
180+ -DCMAKE_Fortran_COMPILER:FILEPATH=FALSE
181+ WORKING_DIRECTORY ${SUPERLU_BUILD_DIR} )
182+
183+ execute_process (COMMAND ${CMAKE_COMMAND} --build . --config Release WORKING_DIRECTORY ${SUPERLU_BUILD_DIR} )
184+ execute_process (COMMAND ${CMAKE_COMMAND} --install . --config Release WORKING_DIRECTORY ${SUPERLU_BUILD_DIR} )
185+
186+ message (STATUS "SuperLU build and installation complete on Windows." )
187+ endif ()
188+
189+ #Configuring SuperLU for Other Compilers
190+ if (NOT WIN32 )
191+ execute_process (COMMAND ${CMAKE_COMMAND} ..
192+ -DCMAKE_INSTALL_PREFIX=${SUPERLU_INSTALL_DIR}
193+ -Denable_internal_blaslib=NO
194+ -DTPL_BLAS_LIBRARIES=${OpenBLAS_LIBRARIES}
195+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON
196+ -DCMAKE_C_FLAGS= "-fPIC"
197+ -DCMAKE_CXX_FLAGS= "-fPIC"
198+ WORKING_DIRECTORY ${SUPERLU_BUILD_DIR} )
199+ execute_process (COMMAND make -j4 WORKING_DIRECTORY ${SUPERLU_BUILD_DIR} )
200+ execute_process (COMMAND make install WORKING_DIRECTORY ${SUPERLU_BUILD_DIR} )
201+ endif ()
202+
203+ # Armadillo installation
204+
205+ set (ARMADILLO_TARBALL_URL "https://sourceforge.net/projects/arma/files/armadillo-${ARMADILLO_VERSION} .tar.xz" )
206+ set (ARMADILLO_BUILD_DIR "${BUILD_DIR} /armadillo-${ARMADILLO_VERSION} " )
207+ set (ARMADILLO_INSTALL_DIR "${INSTALL_DIR} /armadillo-${ARMADILLO_VERSION} " )
208+ file (DOWNLOAD ${ARMADILLO_TARBALL_URL} ${BUILD_DIR} /armadillo-${ARMADILLO_VERSION}.tar.xz )
209+ execute_process (COMMAND ${CMAKE_COMMAND} -E tar xJf armadillo-${ARMADILLO_VERSION}.tar.xz WORKING_DIRECTORY ${BUILD_DIR} )
210+
211+ #Configuring Armadillo for MSVC
212+ if (WIN32 )
213+ message (STATUS "Configuring Armadillo build for Windows using MSVC..." )
214+
215+ include_directories (${OPENBLAS_DIR} /include ${EIGEN_SRC_DIR} )
216+ link_directories (${OPENBLAS_DIR} /lib )
217+
218+ # Define library files
219+ set (OpenBLAS_LIB "${OPENBLAS_DIR} /lib/openblas.lib" )
220+ #set(LAPACK_LIB "${LAPACK_DIR}/lib/lapack.lib")
221+
222+ execute_process (COMMAND ${CMAKE_COMMAND}
223+ -DCMAKE_INSTALL_PREFIX=${ARMADILLO_INSTALL_DIR}
224+ -DSuperLU_INCLUDE_DIR=${SUPERLU_INSTALL_DIR}/include
225+ -DSuperLU_LIBRARY=${SUPERLU_INSTALL_DIR}/lib/superlu.lib
226+ -DARMA_USE_WRAPPER=OFF
227+ -DARMA_USE_LAPACK=OFF
228+ -DARMA_USE_BLAS=ON
229+ -DBLAS_LIBRARIES=${OpenBLAS_LIB}
230+
231+ .
232+ WORKING_DIRECTORY ${ARMADILLO_BUILD_DIR} )
233+ execute_process (COMMAND ${CMAKE_COMMAND} --build . --config Release WORKING_DIRECTORY ${ARMADILLO_BUILD_DIR} )
234+ execute_process (COMMAND ${CMAKE_COMMAND} --install . --config Release WORKING_DIRECTORY ${ARMADILLO_BUILD_DIR} )
235+
236+ message (STATUS "Armadillo build and installation complete on Windows." )
237+ endif ()
238+
239+ #Configuring Armadillo for other compilers
240+ if (NOT WIN32 )
241+ execute_process (COMMAND ${CMAKE_COMMAND}
242+ -DSuperLU_INCLUDE_DIR=${SUPERLU_INSTALL_DIR}/include
243+ -DSuperLU_LIBRARY=${SUPERLU_INSTALL_DIR}/lib/libsuperlu.a
244+ -DCMAKE_INSTALL_PREFIX=${ARMADILLO_INSTALL_DIR} .
245+ WORKING_DIRECTORY ${ARMADILLO_BUILD_DIR} )
246+ execute_process (COMMAND make -j4 WORKING_DIRECTORY ${ARMADILLO_BUILD_DIR} )
247+ execute_process (COMMAND make install WORKING_DIRECTORY ${ARMADILLO_BUILD_DIR} )
248+ endif ()
249+
110250
111251# Update paths for Armadillo and SuperLU
112252include_directories (${SUPERLU_INSTALL_DIR} /include ${ARMADILLO_INSTALL_DIR} /include )
@@ -116,22 +256,32 @@ link_directories(${SUPERLU_INSTALL_DIR}/lib ${ARMADILLO_INSTALL_DIR}/lib)
116256set (CMAKE_PREFIX_PATH ${ARMADILLO_INSTALL_DIR} ${CMAKE_PREFIX_PATH} )
117257set (Armadillo_DIR ${ARMADILLO_INSTALL_DIR} /share/Armadillo)
118258
119- find_package ( Armadillo REQUIRED )
120- if ( NOT Armadillo_FOUND )
121- message (FATAL_ERROR "Custom Armadillo not found in ${ARMADILLO_INSTALL_DIR } " )
259+ if ( NOT MSVC )
260+ find_package ( Armadillo REQUIRED )
261+ message (STATUS "Using Armadillo from find_package: ${Armadillo_INCLUDE_DIRS } " )
122262else ()
123- message (STATUS "Using Armadillo from ${ARMADILLO_INSTALL_DIR} " )
263+ set (ARMADILLO_LIB "${ARMADILLO_INSTALL_DIR} /lib/armadillo.lib" )
264+ if (EXISTS "${ARMADILLO_LIB} " )
265+ include_directories (${ARMADILLO_INSTALL_DIR} /include )
266+ link_directories (${ARMADILLO_INSTALL_DIR} /lib )
267+ set (ARMADILLO_LIBRARIES ${ARMADILLO_LIB} )
268+ message (STATUS "Using manually installed Armadillo for MSVC" )
269+ else ()
270+ message (FATAL_ERROR "Armadillo library not found at ${ARMADILLO_LIB} " )
271+ endif ()
124272endif ()
125273
126- find_package (Eigen3 3.3.7 REQUIRED )
127- find_library (OpenBLAS_LIBRARIES NAMES openblas blas PATHS "/usr/lib/x86_64-linux-gnu" "/usr/local/opt/" REQUIRED )
128- find_library (LAPACK_LIBRARY lapack REQUIRED PATHS "/usr/lib" "/usr/lib/x86_64-linux-gnu" "/usr/local/lib" "/usr/local/opt/" )
129274
130- # Required libraries and link settings
275+ if (WIN32 )
276+ set (SUPERLU_LIB ${SUPERLU_INSTALL_DIR} /lib/superlu.lib)
277+ else ()
278+ set (SUPERLU_LIB ${SUPERLU_INSTALL_DIR} /lib/libsuperlu.a)
279+ endif ()
280+
131281set (LINK_LIBS ${ARMADILLO_LIBRARIES}
132282 ${OpenBLAS_LIBRARIES}
133- ${SUPERLU_INSTALL_DIR} /lib/libsuperlu.a
134- ${LAPACK_LIBRARY} )
283+ ${SUPERLU_LIB}
284+ )
135285
136286# Add subdirectories
137287add_subdirectory (src/cpp )
0 commit comments