mirror of
https://github.com/macports/macports-ports.git
synced 2026-07-12 18:20:25 -07:00
See https://github.com/macports/macports-ports/pull/26909#issuecomment-3339115770
165 lines
5.9 KiB
Tcl
165 lines
5.9 KiB
Tcl
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
|
||
|
||
PortSystem 1.0
|
||
PortGroup active_variants 1.1
|
||
PortGroup cmake 1.1
|
||
PortGroup github 1.0
|
||
PortGroup linear_algebra 1.0
|
||
PortGroup mpi 1.0
|
||
|
||
github.setup LLNL hiop 1.1.0 v
|
||
revision 1
|
||
categories math science
|
||
license BSD
|
||
maintainers nomaintainer
|
||
description HPC solver for non-linear optimization problems
|
||
long_description HiOp is an optimization solver for solving certain mathematical optimization problems \
|
||
expressed as non-linear programming problems. HiOp is a lightweight HPC solver \
|
||
that leverages application’s existing data parallelism to parallelize \
|
||
the optimization iterations by using specialized parallel linear algebra kernels.
|
||
checksums rmd160 c7fe5727192429c78b96a9663f44c445bdb803a2 \
|
||
sha256 e1fe89605e528cdc7946f71355c22be4e9b807e75f9b3c91e8fac83451a396a5 \
|
||
size 2632151
|
||
github.tarball_from archive
|
||
|
||
depends_lib-append path:share/pkgconfig/eigen3.pc:eigen3
|
||
|
||
if {${os.platform} eq "darwin" && ${os.arch} eq "powerpc"} {
|
||
mpi.setup require require_fortran \
|
||
-gcc44 -gcc45 -gcc46 -gcc47 -gcc48 -gcc49 -gcc5 -gcc6 \
|
||
-clang -fortran
|
||
} else {
|
||
mpi.setup require require_fortran \
|
||
-gcc44 -gcc45 -gcc46 -gcc47 -gcc48 -gcc49 -gcc5 -gcc6
|
||
}
|
||
|
||
compiler.cxx_standard 2014
|
||
# Xcode clang of 10.11 and earlier fail to build it.
|
||
compiler.blacklist-append \
|
||
{clang < 900}
|
||
compilers.setup require_fortran
|
||
|
||
# Needed in order for correct version of BLAS to be picked:
|
||
pre-configure {
|
||
configure.args-append ${cmake_linalglib}
|
||
if {[variant_isset openblas]} {
|
||
configure.args-append \
|
||
-DBLAS_LIBRARIES=${prefix}/lib/libopenblas.dylib \
|
||
-DLAPACK_LIBRARIES=${prefix}/lib/libopenblas.dylib
|
||
}
|
||
}
|
||
|
||
configure.args-append \
|
||
-DHIOP_BUILD_SHARED=ON \
|
||
-DHIOP_EIGEN_DIR=${prefix}/include/eigen3 \
|
||
-DHIOP_USE_EIGEN=ON \
|
||
-DHIOP_USE_MPI=ON \
|
||
-DHIOP_WITH_MAKETEST=ON \
|
||
-DHIOP_BUILD_DOCUMENTATION=OFF \
|
||
-DHIOP_BUILD_FORTRAN_EXAMPLE=OFF \
|
||
-DHIOP_DEEPCHECKS=OFF \
|
||
-DHIOP_DEVELOPER_MODE=OFF \
|
||
-DHIOP_SPARSE=OFF \
|
||
-DHIOP_USE_COINHSL=OFF \
|
||
-DHIOP_USE_GINKGO=OFF \
|
||
-DHIOP_USE_GPU=OFF \
|
||
-DHIOP_USE_PARDISO=OFF \
|
||
-DHIOP_USE_RAJA=OFF \
|
||
-DHIOP_USE_STRUMPACK=OFF \
|
||
-DHIOP_WITH_KRON_REDUCTION=OFF
|
||
|
||
# ___atomic_fetch_add_8, ___atomic_load_8
|
||
if {[string match *gcc* ${configure.compiler}]} {
|
||
configure.ldflags-append -latomic
|
||
}
|
||
|
||
# TODO: add Raja support. Requires Umpire.
|
||
|
||
# FIXME: Ginkgo backend does not build at the moment:
|
||
# https://github.com/LLNL/hiop/issues/586
|
||
# https://github.com/ginkgo-project/ginkgo/issues/1258
|
||
variant ginkgo description "Build with Ginkgo backend" {
|
||
depends_lib-append \
|
||
port:ginkgo
|
||
|
||
configure.args-replace \
|
||
-DHIOP_USE_GINKGO=OFF -DHIOP_USE_GINKGO=ON
|
||
|
||
if {![catch {set result [active_variants ginkgo mpi]}]} {
|
||
if {$result} {
|
||
if {![variant_isset mpi]} {
|
||
return -code error "ginkgo has mpi enabled, please use the same variant."
|
||
}
|
||
}
|
||
}
|
||
if {![catch {set result [active_variants ginkgo openmpi]}]} {
|
||
if {$result} {
|
||
if {![variant_isset openmpi]} {
|
||
return -code error "ginkgo has openmpi enabled, please use the same variant."
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
# Strumpack backend works, but few tests fail: https://github.com/pghysels/STRUMPACK/issues/83
|
||
variant strumpack description "Build with STRUMPACK backend" {
|
||
depends_lib-append \
|
||
port:scotch \
|
||
port:strumpack
|
||
|
||
patchfiles-append \
|
||
patch-strumpack-includes.diff
|
||
post-patch {
|
||
reinplace "s|__PREFIX__|${prefix}|" ${worksrcpath}/CMakeLists.txt
|
||
}
|
||
|
||
configure.args-replace \
|
||
-DHIOP_USE_STRUMPACK=OFF -DHIOP_USE_STRUMPACK=ON
|
||
|
||
if {![catch {set result [active_variants strumpack mpi]}]} {
|
||
if {$result} {
|
||
if {![variant_isset mpi]} {
|
||
return -code error "strumpack has mpi enabled, please use the same variant."
|
||
}
|
||
}
|
||
}
|
||
if {![catch {set result [active_variants strumpack openmpi]}]} {
|
||
if {$result} {
|
||
if {![variant_isset openmpi]} {
|
||
return -code error "strumpack has openmpi enabled, please use the same variant."
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
default_variants-append \
|
||
+strumpack
|
||
|
||
# Ginkgo will use these too, when enabled:
|
||
if {[variant_isset strumpack] || [variant_isset ginkgo]} {
|
||
depends_lib-append \
|
||
port:metis \
|
||
port:scalapack
|
||
require_active_variants \
|
||
port:metis openmp
|
||
configure.args-replace \
|
||
-DHIOP_SPARSE=OFF -DHIOP_SPARSE=ON
|
||
if {![catch {set result [active_variants scalapack mpi]}]} {
|
||
if {$result} {
|
||
if {![variant_isset mpi]} {
|
||
return -code error "scalapack has mpi enabled, please use the same variant."
|
||
}
|
||
}
|
||
}
|
||
if {![catch {set result [active_variants scalapack openmpi]}]} {
|
||
if {$result} {
|
||
if {![variant_isset openmpi]} {
|
||
return -code error "scalapack has openmpi enabled, please use the same variant."
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
test.run yes
|
||
test.cmd-prepend DYLD_LIBRARY_PATH=${cmake.build_dir}/src
|