1*ee05e790Sjeremylt# Copyright (c) 2017, Lawrence Livermore National Security, LLC. Produced at 2*ee05e790Sjeremylt# the Lawrence Livermore National Laboratory. LLNL-CODE-734707. All Rights 3*ee05e790Sjeremylt# reserved. See files LICENSE and NOTICE for details. 4*ee05e790Sjeremylt# 5*ee05e790Sjeremylt# This file is part of CEED, a collection of benchmarks, miniapps, software 6*ee05e790Sjeremylt# libraries and APIs for efficient high-order finite element and spectral 7*ee05e790Sjeremylt# element discretizations for exascale applications. For more information and 8*ee05e790Sjeremylt# source code availability see http://github.com/ceed. 9*ee05e790Sjeremylt# 10*ee05e790Sjeremylt# The CEED research is supported by the Exascale Computing Project 17-SC-20-SC, 11*ee05e790Sjeremylt# a collaborative effort of two U.S. Department of Energy organizations (Office 12*ee05e790Sjeremylt# of Science and the National Nuclear Security Administration) responsible for 13*ee05e790Sjeremylt# the planning and preparation of a capable exascale ecosystem, including 14*ee05e790Sjeremylt# software, applications, hardware, advanced system engineering and early 15*ee05e790Sjeremylt# testbed platforms, in support of the nation"s exascale computing imperative. 16*ee05e790Sjeremylt# pylint: disable=no-name-in-module,import-error,unused-variable 17*ee05e790Sjeremyltimport os 18*ee05e790Sjeremyltimport sys 19*ee05e790Sjeremyltimport subprocess 20*ee05e790Sjeremyltfrom setuptools import setup 21*ee05e790Sjeremylt 22*ee05e790Sjeremylt# ------------------------------------------------------------------------------ 23*ee05e790Sjeremylt# Setup 24*ee05e790Sjeremylt# ------------------------------------------------------------------------------ 25*ee05e790Sjeremyltdef version(): 26*ee05e790Sjeremylt with open(os.path.abspath("ceed.pc.template")) as template: 27*ee05e790Sjeremylt ceed_version = [line.split("Version:", 1)[1].strip() for line in template if 28*ee05e790Sjeremylt line.startswith("Version: ")] 29*ee05e790Sjeremylt return ceed_version[0] 30*ee05e790Sjeremylt 31*ee05e790Sjeremyltdescription = """ 32*ee05e790SjeremyltlibCEED: the Code for Efficient Extensible Discretization API Library 33*ee05e790Sjeremylt===================================================================== 34*ee05e790Sjeremylt 35*ee05e790SjeremyltThis low-level API library provides the efficient high-order discretization 36*ee05e790Sjeremyltmethods developed by the ECP co-design Center for Efficient Exascale 37*ee05e790SjeremyltDiscretizations (CEED). While our focus is on high-order finite elements, the 38*ee05e790Sjeremyltapproach is mostly algebraic and thus applicable to other discretizations in 39*ee05e790Sjeremyltfactored form, as explained in the API documentation. 40*ee05e790Sjeremylt 41*ee05e790SjeremyltOne of the challenges with high-order methods is that a global sparse matrix is 42*ee05e790Sjeremyltno longer a good representation of a high-order linear operator, both with 43*ee05e790Sjeremyltrespect to the FLOPs needed for its evaluation, as well as the memory transfer 44*ee05e790Sjeremyltneeded for a matvec. Thus, high-order methods require a new "format" that still 45*ee05e790Sjeremyltrepresents a linear (or more generally non-linear) operator, but not through a 46*ee05e790Sjeremyltsparse matrix. 47*ee05e790Sjeremylt 48*ee05e790SjeremyltlibCEED is to provides such a format, as well as supporting implementations and 49*ee05e790Sjeremyltdata structures, that enable efficient operator evaluation on a variety of 50*ee05e790Sjeremyltcomputational device types (CPUs, GPUs, etc.). This new operator description is 51*ee05e790Sjeremyltalgebraic and easy to incorporate in a wide variety of applications, without 52*ee05e790Sjeremyltsignificant refactoring of their own discretization infrastructure. 53*ee05e790Sjeremylt""" 54*ee05e790Sjeremylt 55*ee05e790Sjeremyltclassifiers = """ 56*ee05e790SjeremyltIntended Audience :: Developers 57*ee05e790SjeremyltIntended Audience :: Science/Research 58*ee05e790SjeremyltLicense :: OSI Approved :: BSD License 59*ee05e790SjeremyltOperating System :: POSIX 60*ee05e790SjeremyltProgramming Language :: C 61*ee05e790SjeremyltProgramming Language :: C++ 62*ee05e790SjeremyltProgramming Language :: CUDA 63*ee05e790SjeremyltProgramming Language :: Fortran 64*ee05e790SjeremyltProgramming Language :: Python 65*ee05e790SjeremyltTopic :: Scientific/Engineering 66*ee05e790SjeremyltTopic :: Software Development :: Libraries 67*ee05e790Sjeremylt""" 68*ee05e790Sjeremylt 69*ee05e790Sjeremyltfrom distutils.errors import LibError 70*ee05e790Sjeremyltfrom distutils.command.build import build as _build 71*ee05e790Sjeremylt 72*ee05e790Sjeremyltif sys.platform == "darwin": 73*ee05e790Sjeremylt library_file = "libceed.dylib" 74*ee05e790Sjeremyltelse: 75*ee05e790Sjeremylt library_file = "libceed.so" 76*ee05e790Sjeremylt 77*ee05e790Sjeremyltdef _build_libceed(): 78*ee05e790Sjeremylt try: 79*ee05e790Sjeremylt import cffi 80*ee05e790Sjeremylt import numpy 81*ee05e790Sjeremylt except ImportError: 82*ee05e790Sjeremylt raise LibError("You must install cffi and numpy before building libceed") 83*ee05e790Sjeremylt 84*ee05e790Sjeremylt env = os.environ.copy() 85*ee05e790Sjeremylt if subprocess.call(["make", "lib"], env=env) != 0: 86*ee05e790Sjeremylt raise LibError("Unable to build libceed") 87*ee05e790Sjeremylt 88*ee05e790Sjeremyltclass build(_build): 89*ee05e790Sjeremylt def run(self, *args): 90*ee05e790Sjeremylt self.execute(_build_libceed, (), msg="Building libceed") 91*ee05e790Sjeremylt _build.run(self, *args) 92*ee05e790Sjeremylt 93*ee05e790Sjeremyltcmdclass = { 94*ee05e790Sjeremylt "build": build, 95*ee05e790Sjeremylt} 96*ee05e790Sjeremylt 97*ee05e790Sjeremylttry: 98*ee05e790Sjeremylt from setuptools.command.develop import develop as _develop 99*ee05e790Sjeremylt class develop(_develop): 100*ee05e790Sjeremylt def run(self, *args): 101*ee05e790Sjeremylt self.execute(_build_libceed, (), msg="Building libceed") 102*ee05e790Sjeremylt _develop.run(self, *args) 103*ee05e790Sjeremylt 104*ee05e790Sjeremylt cmdclass["develop"] = develop 105*ee05e790Sjeremyltexcept ImportError: 106*ee05e790Sjeremylt pass 107*ee05e790Sjeremylt 108*ee05e790Sjeremyltif "bdist_wheel" in sys.argv: 109*ee05e790Sjeremylt sys.stderr.write("libceed cannot be built as a wheel\n") 110*ee05e790Sjeremylt sys.exit(1) 111*ee05e790Sjeremylt 112*ee05e790Sjeremyltsetup(name="libceed", 113*ee05e790Sjeremylt version=version(), 114*ee05e790Sjeremylt description="libceed python bindings", 115*ee05e790Sjeremylt long_description="\n".join(description), 116*ee05e790Sjeremylt classifiers= classifiers.split("\n")[1:-1], 117*ee05e790Sjeremylt keywords=["libCEED"], 118*ee05e790Sjeremylt platforms=["POSIX"], 119*ee05e790Sjeremylt license="BSD 2", 120*ee05e790Sjeremylt 121*ee05e790Sjeremylt url="https://github.com/CEED/libCEED", 122*ee05e790Sjeremylt 123*ee05e790Sjeremylt author="libCEED Team", 124*ee05e790Sjeremylt author_email="ceed-users@llnl.gov", 125*ee05e790Sjeremylt 126*ee05e790Sjeremylt requires=["numpy"], 127*ee05e790Sjeremylt packages=["libceed"], 128*ee05e790Sjeremylt package_dir={"libceed": "python"}, 129*ee05e790Sjeremylt 130*ee05e790Sjeremylt setup_requires=["cffi"], 131*ee05e790Sjeremylt cffi_modules=["python/build_ceed_cffi.py:ffibuilder"], 132*ee05e790Sjeremylt 133*ee05e790Sjeremylt cmdclass=cmdclass, 134*ee05e790Sjeremylt) 135*ee05e790Sjeremylt 136*ee05e790Sjeremylt# ------------------------------------------------------------------------------ 137