view src/suitesparse.mk @ 5571:b19fb3ed330c

use cmake command line to set build shared/static options (bug #59373) * Makefile.in (CMAKE_BUILD_SHARED_OR_STATIC): New variable. (build-cmake-toolchain-file): Don't define BUILD_SHARED_LIBS or BUILD_STATIC_LIBS in the toolchain file. * armadillo.mk, cgal.mk, cmake.mk, cminpack.mk, double-conversion.mk, eigen.mk, gdcm.mk, gl2ps.mk, hdf5.mk, lapack.mk, libical.mk, libproxy.mk, of-dicom.mk, openal.mk, opencv.mk, openexr.mk, openscenegraph.mk, physfs.mk, qhull.mk, qjson.mk, rapidjson.mk, suitesparse.mk, sundials-ida.mk, taglib.mk, vigra.mk, vmime.mk, vtk.mk, wt.mk: Use $(CMAKE_BUILD_SHARED_OR_STATIC) on the cmake command line.
author John W. Eaton <jwe@octave.org>
date Fri, 30 Oct 2020 10:06:00 -0400
parents d862fd40cc42
children 59871eac3409
line wrap: on
line source

# This file is part of MXE.
# See index.html for further information.

PKG             := suitesparse
$(PKG)_VERSION  := 5.7.2
$(PKG)_CHECKSUM := ccc50177425d0d9bfe878786b8f2729c247efa90
$(PKG)_SUBDIR   := SuiteSparse-$($(PKG)_VERSION)
$(PKG)_FILE     := $($(PKG)_SUBDIR).tar.gz
$(PKG)_URL      := https://github.com/DrTimothyAldenDavis/SuiteSparse/archive/v$($(PKG)_VERSION).tar.gz
$(PKG)_DEPS     := blas lapack
ifeq ($(USE_SYSTEM_GCC),no)
  $(PKG)_DEPS += libgomp
endif

ifeq ($(MXE_NATIVE_MINGW_BUILD),yes)
  $(PKG)_DESTDIR :=
else
  $(PKG)_DESTDIR := $(3)
endif

define $(PKG)_UPDATE
    $(WGET) -q -O- 'https://github.com/DrTimothyAldenDavis/SuiteSparse/tags' | \
    $(SED) -n 's|.*releases/tag/v\([^"]*\).*|\1|p' | $(SORT) -V | \
    tail -1
endef


$(PKG)_CPPFLAGS := -DNTIMER

ifeq ($(ENABLE_FORTRAN_INT64),yes)
  ifeq ($(MXE_WINDOWS_BUILD),yes)
    $(PKG)_CPPFLAGS += -DLONGBLAS='long long'
  else
    $(PKG)_CPPFLAGS += -DLONGBLAS='long'
  endif
endif

ifeq ($(USE_CCACHE),yes)
    $(PKG)_COMPILER_OPTS := CC='$(CCACHE) $(MXE_CC)' \
        CXX='$(CCACHE) $(MXE_CXX)' \
        CPLUSPLUS='$(CCACHE) $(MXE_CXX)' \
        F77='$(CCACHE) $(MXE_F77)'
else
    $(PKG)_COMPILER_OPTS := CC='$(MXE_CC)' \
        CXX='$(MXE_CXX)' \
        CPLUSPLUS='$(MXE_CXX)' \
        F77='$(MXE_F77)'
endif

$(PKG)_MAKE_OPTS = \
    CPPFLAGS="$($(PKG)_CPPFLAGS)" \
    $($(PKG)_COMPILER_OPTS) \
    FFLAGS='$(MXE_FFLAGS)' \
    CFLAGS='$(MXE_CFLAGS)' \
    CXXFLAGS='$(MXE_CXXFLAGS)' \
    AR='$(MXE_AR)' \
    RANLIB='$(MXE_RANLIB)' \
    BLAS="-lblas -lgfortran" \
    LAPACK='-llapack' \
    CHOLMOD_CONFIG='-DNPARTITION' \
    CMAKE_OPTIONS='-DCMAKE_TOOLCHAIN_FILE="$(CMAKE_TOOLCHAIN_FILE)" $(CMAKE_CCACHE_FLAGS) $(CMAKE_BUILD_SHARED_OR_STATIC)'

ifeq ($(MXE_WINDOWS_BUILD),yes)
    $(PKG)_MAKE_OPTS += \
        UNAME=Windows
    $(PKG)_SO_DIR := $($(PKG)_DESTDIR)$(HOST_BINDIR)
else
    $(PKG)_SO_DIR := $($(PKG)_DESTDIR)$(HOST_LIBDIR)
endif

$(PKG)_cputype = $(shell uname -m | sed "s/\\ /_/g")
$(PKG)_systype = $(shell uname -s)
$(PKG)_METIS_BUILDDIR = build/$($(PKG)_systype)-$($(PKG)_cputype)
$(PKG)_METIS_CONFIG_FLAGS = -DCMAKE_VERBOSE_MAKEFILE=1 \
    -DGKLIB_PATH=$(1)/metis-5.1.0/GKlib \
    -DCMAKE_INSTALL_PREFIX=$(1) \
    -DSHARED=1

define $(PKG)_BUILD
    # build metis
    mkdir $(1)/metis-5.1.0/$($(PKG)_METIS_BUILDDIR)
    cd $(1)/metis-5.1.0/$($(PKG)_METIS_BUILDDIR) && \
        cmake $(1)/metis-5.1.0 \
            $(CMAKE_CCACHE_FLAGS) \
            $(CMAKE_BUILD_SHARED_OR_STATIC) \
            -DCMAKE_TOOLCHAIN_FILE='$(CMAKE_TOOLCHAIN_FILE)' \
            $($(PKG)_METIS_CONFIG_FLAGS)
    $(MAKE) -C '$(1)/metis-5.1.0/$($(PKG)_METIS_BUILDDIR)' metis -j '$(JOBS)'

    # install metis
    mkdir -p $($(PKG)_DESTDIR)$(HOST_LIBDIR)
    mkdir -p $($(PKG)_SO_DIR)
    mkdir -p $($(PKG)_DESTDIR)$(HOST_INCDIR)/suitesparse/
    cp $(1)/metis-5.1.0/$($(PKG)_METIS_BUILDDIR)/libmetis/libmetis.* $($(PKG)_SO_DIR)
    cp $(1)/metis-5.1.0/include/metis.h $($(PKG)_DESTDIR)$(HOST_INCDIR)/suitesparse/
    chmod 755 $($(PKG)_SO_DIR)/libmetis.*
    chmod 644 $($(PKG)_DESTDIR)$(HOST_INCDIR)/suitesparse/metis.h

    # build all
    $(MAKE) -C '$(1)' -j '$(JOBS)' \
        $($(PKG)_MAKE_OPTS) \
        MY_METIS_LIB=$($(PKG)_SO_DIR) \
        library

    # install libraries and headers
    $(MAKE) -C '$(1)' -j 1 install \
        $($(PKG)_MAKE_OPTS) \
        INSTALL_INCLUDE='$($(PKG)_DESTDIR)$(HOST_INCDIR)/suitesparse/' \
        INSTALL_LIB='$($(PKG)_DESTDIR)$(HOST_LIBDIR)' \
        INSTALL_SO='$($(PKG)_SO_DIR)'

    # some dependers (e.g. SUNDIALS IDA) won't find libraries with version suffix
    if [ $(MXE_WINDOWS_BUILD) = no ]; then \
      cd '$($(PKG)_DESTDIR)$(HOST_LIBDIR)' && ln -sf libsuitesparseconfig.so.$($(PKG)_VERSION) libsuitesparseconfig.so; \
      cd '$($(PKG)_DESTDIR)$(HOST_LIBDIR)' && ln -sf libamd.so.2 libamd.so; \
      cd '$($(PKG)_DESTDIR)$(HOST_LIBDIR)' && ln -sf libbtf.so.1 libbtf.so; \
      cd '$($(PKG)_DESTDIR)$(HOST_LIBDIR)' && ln -sf libcolamd.so.2 libcolamd.so; \
      cd '$($(PKG)_DESTDIR)$(HOST_LIBDIR)' && ln -sf libklu.so.1 libklu.so; \
    fi
endef