xref: /libCEED/setup.py (revision dabe13fcea337c326325d5a5b4556f39d9ae1867)
1ee05e790Sjeremylt# Copyright (c) 2017, Lawrence Livermore National Security, LLC. Produced at
2ee05e790Sjeremylt# the Lawrence Livermore National Laboratory. LLNL-CODE-734707. All Rights
3ee05e790Sjeremylt# reserved. See files LICENSE and NOTICE for details.
4ee05e790Sjeremylt#
5ee05e790Sjeremylt# This file is part of CEED, a collection of benchmarks, miniapps, software
6ee05e790Sjeremylt# libraries and APIs for efficient high-order finite element and spectral
7ee05e790Sjeremylt# element discretizations for exascale applications. For more information and
8ee05e790Sjeremylt# source code availability see http://github.com/ceed.
9ee05e790Sjeremylt#
10ee05e790Sjeremylt# The CEED research is supported by the Exascale Computing Project 17-SC-20-SC,
11ee05e790Sjeremylt# a collaborative effort of two U.S. Department of Energy organizations (Office
12ee05e790Sjeremylt# of Science and the National Nuclear Security Administration) responsible for
13ee05e790Sjeremylt# the planning and preparation of a capable exascale ecosystem, including
14ee05e790Sjeremylt# software, applications, hardware, advanced system engineering and early
15ee05e790Sjeremylt# testbed platforms, in support of the nation"s exascale computing imperative.
16ee05e790Sjeremylt# pylint: disable=no-name-in-module,import-error,unused-variable
17ee05e790Sjeremyltimport os
18ee05e790Sjeremyltfrom setuptools import setup
1937c134eaSJed Brownfrom setuptools.command.build_ext import build_ext
20ee05e790Sjeremylt
21ee05e790Sjeremylt# ------------------------------------------------------------------------------
22ee05e790Sjeremylt# Setup
23ee05e790Sjeremylt# ------------------------------------------------------------------------------
24ee05e790Sjeremyltdef version():
25ee05e790Sjeremylt  with open(os.path.abspath("ceed.pc.template")) as template:
26ee05e790Sjeremylt    ceed_version = [line.split("Version:", 1)[1].strip() for line in template if
27ee05e790Sjeremylt                    line.startswith("Version: ")]
28ee05e790Sjeremylt  return ceed_version[0]
29ee05e790Sjeremylt
3037c134eaSJed Browndef requirements():
3137c134eaSJed Brown    with open('requirements.txt') as f:
3237c134eaSJed Brown        return f.readlines()
3337c134eaSJed Brown
3437c134eaSJed Brownclass libceed_build_ext(build_ext):
3537c134eaSJed Brown    def run(self):
3637c134eaSJed Brown        self.make_libceed_so()
3737c134eaSJed Brown        build_ext.run(self)
3837c134eaSJed Brown
3937c134eaSJed Brown    def make_libceed_so(self):
4037c134eaSJed Brown        import subprocess
41*dabe13fcSJed Brown        subprocess.check_call(['make', '-j', '-B'])
4237c134eaSJed Brown        subprocess.check_call(['make', 'install', 'prefix=' + os.path.join(self.build_lib, 'libceed')])
4337c134eaSJed Brown
44ee05e790Sjeremyltdescription = """
4537c134eaSJed BrownlibCEED: Code for Efficient Extensible Discretization
4637c134eaSJed Brown=====================================================
47ee05e790Sjeremylt
4837c134eaSJed BrownlibCEED is a lightweight library for expressing and manipulating operators that
4937c134eaSJed Brownarise in high-order element-based discretization of partial differential
5037c134eaSJed Brownequations.  libCEED's representations are much for efficient than assembled
5137c134eaSJed Brownsparse matrices, and can achieve very high performance on modern CPU and GPU
5237c134eaSJed Brownhardware.  This approach is applicable to a broad range of linear and nonlinear
5337c134eaSJed Brownproblems, and includes facilities for preconditioning.  libCEED is meant to be
5437c134eaSJed Browneasy to incorporate into existing libraries and applications, and to build new
5537c134eaSJed Browntools on top of.
56ee05e790Sjeremylt
5737c134eaSJed BrownlibCEED has been developed as part of the DOE Exascale Computing Project
5837c134eaSJed Brownco-design Center for Efficient Exascale Discretizations (CEED).
59ee05e790Sjeremylt"""
60ee05e790Sjeremylt
61ee05e790Sjeremyltclassifiers = """
6237c134eaSJed BrownDevelopment Status :: 4 - Beta
63ee05e790SjeremyltIntended Audience :: Developers
64ee05e790SjeremyltIntended Audience :: Science/Research
65ee05e790SjeremyltLicense :: OSI Approved :: BSD License
66ee05e790SjeremyltOperating System :: POSIX
67ee05e790SjeremyltProgramming Language :: C
68ee05e790SjeremyltProgramming Language :: C++
69ee05e790SjeremyltProgramming Language :: Fortran
70ee05e790SjeremyltProgramming Language :: Python
7137c134eaSJed BrownProgramming Language :: Python :: 3.5
7237c134eaSJed BrownProgramming Language :: Python :: 3.6
7337c134eaSJed BrownProgramming Language :: Python :: 3.7
7437c134eaSJed BrownProgramming Language :: Python :: 3.8
7537c134eaSJed BrownProgramming Language :: Python :: 3 :: Only
76ee05e790SjeremyltTopic :: Scientific/Engineering
77ee05e790SjeremyltTopic :: Software Development :: Libraries
78ee05e790Sjeremylt"""
79ee05e790Sjeremylt
80ee05e790Sjeremyltsetup(name="libceed",
81ee05e790Sjeremylt      version=version(),
8237c134eaSJed Brown      description="libCEED: Code for Efficient Extensible Discretization",
8337c134eaSJed Brown      long_description=description,
8437c134eaSJed Brown      long_description_content_type='text/x-rst',
85ee05e790Sjeremylt      classifiers= classifiers.split("\n")[1:-1],
86ee05e790Sjeremylt      keywords=["libCEED"],
87ee05e790Sjeremylt      platforms=["POSIX"],
88ee05e790Sjeremylt      license="BSD 2",
8937c134eaSJed Brown      license_file='LICENSE',
9037c134eaSJed Brown      url="https://libceed.readthedocs.io",
9137c134eaSJed Brown      download_url="https://github.com/CEED/libCEED/releases",
9237c134eaSJed Brown      project_urls={
9337c134eaSJed Brown        "Bug Tracker": "https://github.com/CEED/libCEED/issues",
9437c134eaSJed Brown        "Documentation": "https://libceed.readthedocs.io",
9537c134eaSJed Brown        "Source Code": "https://github.com/CEED/libCEED",
9637c134eaSJed Brown      },
97ee05e790Sjeremylt      author="libCEED Team",
98ee05e790Sjeremylt      author_email="ceed-users@llnl.gov",
99ee05e790Sjeremylt
10037c134eaSJed Brown      install_requires=requirements(),
101ee05e790Sjeremylt      packages=["libceed"],
102ee05e790Sjeremylt      package_dir={"libceed": "python"},
10337c134eaSJed Brown      include_package_data=True,
104ee05e790Sjeremylt
105ee05e790Sjeremylt      setup_requires=["cffi"],
106ee05e790Sjeremylt      cffi_modules=["python/build_ceed_cffi.py:ffibuilder"],
10737c134eaSJed Brown      cmdclass={'build_ext': libceed_build_ext},
108ee05e790Sjeremylt)
109ee05e790Sjeremylt
110ee05e790Sjeremylt# ------------------------------------------------------------------------------
111