Skip to content

Commit 03dd579

Browse files
Support Extension for MSVC
1 parent e12b984 commit 03dd579

1 file changed

Lines changed: 215 additions & 65 deletions

File tree

CMakeLists.txt

Lines changed: 215 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -5,42 +5,105 @@ project(TopLevelProject VERSION 1.0 LANGUAGES CXX)
55
set(CMAKE_CXX_STANDARD 14)
66
set(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
913
message(STATUS "Detected CXX Compiler ID: ${CMAKE_CXX_COMPILER_ID}")
1014

1115
# Compiler-specific CXX_FLAGS and linker flags
16+
# Compiler ID = AppleClang
1217
if (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
1723
elseif (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
3446
else()
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.")
3850
endif()
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
44107
if(POLICY CMP0135)
45108
cmake_policy(SET CMP0135 NEW)
46109
endif()
@@ -51,62 +114,139 @@ set(SUPERLU_VERSION "5.3.0")
51114
set(BUILD_DIR "${CMAKE_BINARY_DIR}/third_party_build")
52115
set(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
63138
if(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}")
68153
else()
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
)
73158
endif()
74-
75-
# Confirm the patch
76159
execute_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+
)
81164
message(STATUS "SuperLU CMakeLists.txt after patch: ${cmake_version_line}")
82165

166+
#Setting up SUPERLU build dir
167+
83168
execute_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
112252
include_directories(${SUPERLU_INSTALL_DIR}/include ${ARMADILLO_INSTALL_DIR}/include)
@@ -116,22 +256,32 @@ link_directories(${SUPERLU_INSTALL_DIR}/lib ${ARMADILLO_INSTALL_DIR}/lib)
116256
set(CMAKE_PREFIX_PATH ${ARMADILLO_INSTALL_DIR} ${CMAKE_PREFIX_PATH})
117257
set(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}")
122262
else()
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()
124272
endif()
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+
131281
set(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
137287
add_subdirectory(src/cpp)

0 commit comments

Comments
 (0)