Skip to content

Commit

Permalink
Creating a separate directory for Sundials 5.
Browse files Browse the repository at this point in the history
This is basically the work of @jd-lara in #421
  • Loading branch information
ViralBShah committed Feb 5, 2020
1 parent b1265e4 commit 9d81458
Show file tree
Hide file tree
Showing 3 changed files with 204 additions and 0 deletions.
86 changes: 86 additions & 0 deletions S/Sundials@5/build_tarballs.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
using BinaryBuilder

name = "Sundials"
version = v"5.1.0"

# Collection of sources required to build SundialsBuilder
sources = [
"https://github.com/LLNL/sundials/archive/v$(version).tar.gz" =>
"101be83221f9a0ab185ecce04d003ba38660cc71eb81b8a7cf96d1cc08b3d7f9",
"./bundled",
]

# Bash recipe for building across all platforms
script = raw"""
cd $WORKSPACE/srcdir/sundials-*/
if [[ "${target}" == *-mingw* ]]; then
atomic_patch -p1 $WORKSPACE/srcdir/patches/Sundials_windows.patch
fi
CMAKE_FLAGS=(-DCMAKE_INSTALL_PREFIX=${prefix} -DCMAKE_TOOLCHAIN_FILE="${CMAKE_TARGET_TOOLCHAIN}")
CMAKE_FLAGS+=(-DCMAKE_BUILD_TYPE=Release -DEXAMPLES_ENABLE_C=OFF)
CMAKE_FLAGS+=(-DKLU_ENABLE=ON -DKLU_INCLUDE_DIR="$prefix/include" -DKLU_LIBRARY_DIR="$libdir")
CMAKE_FLAGS+=(-DLAPACK_ENABLE=ON)
if [[ ${nbits} == 64 ]] && [[ ${target} != aarch64* ]]; then
atomic_patch -p1 $WORKSPACE/srcdir/patches/Sundials_Fortran.patch
CMAKE_FLAGS+=(-DLAPACK_LIBRARIES="${libdir}/libopenblas64_.${dlext}")
else
CMAKE_FLAGS+=(-DLAPACK_LIBRARIES="${libdir}/libopenblas.${dlext}")
fi
export CFLAGS="-lgfortran"
if [[ "${target}" == i686-* ]] || [[ "${target}" == x86_64-* ]]; then
export CFLAGS="${CFLAGS} -lquadmath"
elif [[ "${target}" == powerpc64le-* ]]; then
export CFLAGS="${CFLAGS} -lgomp -ldl -lm -lpthread -Wl,-rpath-link,/opt/${target}/${target}/lib64"
fi
mkdir build
cd build
cmake "${CMAKE_FLAGS[@]}" ..
make -j${nproc}
make install
# Move libraries to ${libdir} on Windows
if [[ "${target}" == *-mingw* ]]; then
mv ${prefix}/lib/libsundials_*.${dlext} "${libdir}"
fi
"""

# We attempt to build for all defined platforms
platforms = supported_platforms()
platforms = expand_gfortran_versions(platforms)

products = [
LibraryProduct("libsundials_arkode", :libsundials_arkode),
LibraryProduct("libsundials_cvode", :libsundials_cvode),
LibraryProduct("libsundials_cvodes", :libsundials_cvodes),
LibraryProduct("libsundials_ida", :libsundials_ida),
LibraryProduct("libsundials_idas", :libsundials_idas),
LibraryProduct("libsundials_kinsol", :libsundials_kinsol),
LibraryProduct("libsundials_nvecmanyvector", :libsundials_nvecmanyvector),
LibraryProduct("libsundials_nvecserial", :libsundials_nvecserial),
LibraryProduct("libsundials_sunlinsolband", :libsundials_sunlinsolband),
LibraryProduct("libsundials_sunlinsoldense", :libsundials_sunlinsoldense),
LibraryProduct("libsundials_sunlinsolklu", :libsundials_sunlinsolklu),
LibraryProduct("libsundials_sunlinsollapackband", :libsundials_sunlinsollapackband),
LibraryProduct("libsundials_sunlinsollapackdense", :libsundials_sunlinsollapackdense),
LibraryProduct("libsundials_sunlinsolpcg", :libsundials_sunlinsolpcg),
LibraryProduct("libsundials_sunlinsolspbcgs", :libsundials_sunlinsolspbcgs),
LibraryProduct("libsundials_sunlinsolspfgmr", :libsundials_sunlinsolspfgmr),
LibraryProduct("libsundials_sunlinsolspgmr", :libsundials_sunlinsolspgmr),
LibraryProduct("libsundials_sunlinsolsptfqmr", :libsundials_sunlinsolsptfqmr),
LibraryProduct("libsundials_sunmatrixband", :libsundials_sunmatrixband),
LibraryProduct("libsundials_sunmatrixdense", :libsundials_sunmatrixdense),
LibraryProduct("libsundials_sunmatrixsparse", :libsundials_sunmatrixsparse),
LibraryProduct("libsundials_sunnonlinsolfixedpoint", :libsundials_sunnonlinsolfixedpoint),
LibraryProduct("libsundials_sunnonlinsolnewton", :libsundials_sunnonlinsolnewton),
]

dependencies = [
"OpenBLAS_jll",
"SuiteSparse_jll",
]

# Build the tarballs, and possibly a `build.jl` as well.
build_tarballs(ARGS, name, version, sources, script, platforms, products, dependencies; preferred_gcc_version = v"6")
103 changes: 103 additions & 0 deletions S/Sundials@5/bundled/patches/Sundials_Fortran.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt

--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -757,27 +757,27 @@ if(SUNDIALS_F77_FUNC_CASE AND SUNDIALS_F77_FUNC_UNDERSCORES)
# (e.g. g77 mangles mysub to mysub_ and my_sub to my_sub__)
if(SUNDIALS_F77_FUNC_CASE MATCHES "LOWER")
if(SUNDIALS_F77_FUNC_UNDERSCORES MATCHES "NONE")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## _64")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## _64")
elseif(SUNDIALS_F77_FUNC_UNDERSCORES MATCHES "ONE")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## _")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## _")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## _64_")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## _64_")
elseif(SUNDIALS_F77_FUNC_UNDERSCORES MATCHES "TWO")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## __")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## __")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## _64__")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## _64__")
else()
message(FATAL_ERROR "Invalid SUNDIALS_F77_FUNC_UNDERSCORES option.")
endif()
elseif(SUNDIALS_F77_FUNC_CASE MATCHES "UPPER")
if(SUNDIALS_F77_FUNC_UNDERSCORES MATCHES "NONE")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## _64")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## _64")
elseif(SUNDIALS_F77_FUNC_UNDERSCORES MATCHES "ONE")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## _")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## _")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## _64_")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## _64_")
elseif(SUNDIALS_F77_FUNC_UNDERSCORES MATCHES "TWO")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## __")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## __")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## _64__")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## _64__")
else()
message(FATAL_ERROR "Invalid SUNDIALS_F77_FUNC_UNDERSCORES option.")
endif()
diff --git a/config/SundialsFortran.cmake b/config/SundialsFortran.cmake
index 9ad6151..5111f47 100644
--- a/config/SundialsFortran.cmake
+++ b/config/SundialsFortran.cmake
@@ -291,42 +291,42 @@ if(NEED_FORTRAN_NAME_MANGLING)

# Symbols NO underscores
if(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "mysub")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## _64")
endif()
if(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "mysub_")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## _")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## _64_")
endif()
if(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "mysub__")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## __")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) name ## _64__")
endif()
if(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MYSUB")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## _64")
endif()
if(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MYSUB_")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## _")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## _64_")
endif()
if(${CMAKE_Fortran_SCHEME_NO_UNDERSCORES} MATCHES "MYSUB__")
- set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## __")
+ set(F77_MANGLE_MACRO1 "#define SUNDIALS_F77_FUNC(name,NAME) NAME ## _64__")
endif()

# Symbols WITH underscores
if(${CMAKE_Fortran_SCHEME_WITH_UNDERSCORES} MATCHES "my_sub")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## _64")
endif()
if(${CMAKE_Fortran_SCHEME_WITH_UNDERSCORES} MATCHES "my_sub_")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## _")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## _64_")
endif()
if(${CMAKE_Fortran_SCHEME_WITH_UNDERSCORES} MATCHES "my_sub__")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## __")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) name ## _64__")
endif()
if(${CMAKE_Fortran_SCHEME_WITH_UNDERSCORES} MATCHES "MY_SUB")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## _64")
endif()
if(${CMAKE_Fortran_SCHEME_WITH_UNDERSCORES} MATCHES "MY_SUB_")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## _")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## _64_")
endif()
if(${CMAKE_Fortran_SCHEME_WITH_UNDERSCORES} MATCHES "MY_SUB__")
- set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## __")
+ set(F77_MANGLE_MACRO2 "#define SUNDIALS_F77_FUNC_(name,NAME) NAME ## _64__")
endif()

# name-mangling scheme has been set
15 changes: 15 additions & 0 deletions S/Sundials@5/bundled/patches/Sundials_windows.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
diff --git a/config/FindKLU.cmake b/config/FindKLU.cmake

--- a/config/FindKLU.cmake
+++ b/config/FindKLU.cmake
@@ -60,10 +60,6 @@ endif ()

if (NOT SUITESPARSECONFIG_LIBRARY)
set(SUITESPARSECONFIG_LIBRARY_NAME suitesparseconfig)
- # NOTE: no prefix for this library on windows
- if(WIN32 AND NOT MSYS)
- set(CMAKE_FIND_LIBRARY_PREFIXES "")
- endif()
find_library( SUITESPARSECONFIG_LIBRARY ${SUITESPARSECONFIG_LIBRARY_NAME} ${KLU_LIBRARY_DIR} NO_DEFAULT_PATH)
mark_as_advanced(SUITESPARSECONFIG_LIBRARY)
endif ()

0 comments on commit 9d81458

Please sign in to comment.