diff --git a/Project.toml b/Project.toml index 8efa1c37d..4613921b9 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "LinearSolve" uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" authors = ["SciML"] -version = "2.23.1" +version = "2.23.2" [deps] ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" diff --git a/src/LinearSolve.jl b/src/LinearSolve.jl index 74f0efa7d..7ffaadf9c 100644 --- a/src/LinearSolve.jl +++ b/src/LinearSolve.jl @@ -182,6 +182,9 @@ end const IS_OPENBLAS = Ref(true) isopenblas() = IS_OPENBLAS[] +const HAS_APPLE_ACCELERATE = Ref(false) +appleaccelerate_isavailable() = HAS_APPLE_ACCELERATE[] + PrecompileTools.@compile_workload begin A = rand(4, 4) b = rand(4) diff --git a/src/appleaccelerate.jl b/src/appleaccelerate.jl index b6b089f0f..44bb07dcb 100644 --- a/src/appleaccelerate.jl +++ b/src/appleaccelerate.jl @@ -14,16 +14,20 @@ to avoid allocations and does not require libblastrampoline. """ struct AppleAccelerateLUFactorization <: AbstractFactorization end -function appleaccelerate_isavailable() - libacc_hdl = Libdl.dlopen_e(libacc) - if libacc_hdl == C_NULL - return false - end +@static if !Sys.isapple() + __appleaccelerate_isavailable() = false +else + function __appleaccelerate_isavailable() + libacc_hdl = Libdl.dlopen_e(libacc) + if libacc_hdl == C_NULL + return false + end - if dlsym_e(libacc_hdl, "dgetrf_") == C_NULL - return false + if dlsym_e(libacc_hdl, "dgetrf_") == C_NULL + return false + end + return true end - return true end function aa_getrf!(A::AbstractMatrix{<:ComplexF64}; diff --git a/src/init.jl b/src/init.jl index e10960f1d..12df4865d 100644 --- a/src/init.jl +++ b/src/init.jl @@ -1,3 +1,5 @@ function __init__() IS_OPENBLAS[] = occursin("openblas", BLAS.get_config().loaded_libs[1].libname) + + HAS_APPLE_ACCELERATE[] = __appleaccelerate_isavailable() end