xref: /libCEED/setup.py (revision 37c134ea1c2371023999bef9ff6137dbfc025c20)
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
19*37c134eaSJed 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
30*37c134eaSJed Browndef requirements():
31*37c134eaSJed Brown    with open('requirements.txt') as f:
32*37c134eaSJed Brown        return f.readlines()
33*37c134eaSJed Brown
34*37c134eaSJed Brownclass libceed_build_ext(build_ext):
35*37c134eaSJed Brown    def run(self):
36*37c134eaSJed Brown        self.make_libceed_so()
37*37c134eaSJed Brown        build_ext.run(self)
38*37c134eaSJed Brown
39*37c134eaSJed Brown    def make_libceed_so(self):
40*37c134eaSJed Brown        import subprocess
41*37c134eaSJed Brown        subprocess.check_call(['make', '-j', 'MARCHFLAG=-march=generic', '-B'])
42*37c134eaSJed Brown        subprocess.check_call(['make', 'install', 'prefix=' + os.path.join(self.build_lib, 'libceed')])
43*37c134eaSJed Brown
44ee05e790Sjeremyltdescription = """
45*37c134eaSJed BrownlibCEED: Code for Efficient Extensible Discretization
46*37c134eaSJed Brown=====================================================
47ee05e790Sjeremylt
48*37c134eaSJed BrownlibCEED is a lightweight library for expressing and manipulating operators that
49*37c134eaSJed Brownarise in high-order element-based discretization of partial differential
50*37c134eaSJed Brownequations.  libCEED's representations are much for efficient than assembled
51*37c134eaSJed Brownsparse matrices, and can achieve very high performance on modern CPU and GPU
52*37c134eaSJed Brownhardware.  This approach is applicable to a broad range of linear and nonlinear
53*37c134eaSJed Brownproblems, and includes facilities for preconditioning.  libCEED is meant to be
54*37c134eaSJed Browneasy to incorporate into existing libraries and applications, and to build new
55*37c134eaSJed Browntools on top of.
56ee05e790Sjeremylt
57*37c134eaSJed BrownlibCEED has been developed as part of the DOE Exascale Computing Project
58*37c134eaSJed Brownco-design Center for Efficient Exascale Discretizations (CEED).
59ee05e790Sjeremylt"""
60ee05e790Sjeremylt
61ee05e790Sjeremyltclassifiers = """
62*37c134eaSJed 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
71*37c134eaSJed BrownProgramming Language :: Python :: 3.5
72*37c134eaSJed BrownProgramming Language :: Python :: 3.6
73*37c134eaSJed BrownProgramming Language :: Python :: 3.7
74*37c134eaSJed BrownProgramming Language :: Python :: 3.8
75*37c134eaSJed BrownProgramming Language :: Python :: 3 :: Only
76ee05e790SjeremyltTopic :: Scientific/Engineering
77ee05e790SjeremyltTopic :: Software Development :: Libraries
78ee05e790Sjeremylt"""
79ee05e790Sjeremylt
80ee05e790Sjeremyltsetup(name="libceed",
81ee05e790Sjeremylt      version=version(),
82*37c134eaSJed Brown      description="libCEED: Code for Efficient Extensible Discretization",
83*37c134eaSJed Brown      long_description=description,
84*37c134eaSJed 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",
89*37c134eaSJed Brown      license_file='LICENSE',
90*37c134eaSJed Brown      url="https://libceed.readthedocs.io",
91*37c134eaSJed Brown      download_url="https://github.com/CEED/libCEED/releases",
92*37c134eaSJed Brown      project_urls={
93*37c134eaSJed Brown        "Bug Tracker": "https://github.com/CEED/libCEED/issues",
94*37c134eaSJed Brown        "Documentation": "https://libceed.readthedocs.io",
95*37c134eaSJed Brown        "Source Code": "https://github.com/CEED/libCEED",
96*37c134eaSJed Brown      },
97ee05e790Sjeremylt      author="libCEED Team",
98ee05e790Sjeremylt      author_email="ceed-users@llnl.gov",
99ee05e790Sjeremylt
100*37c134eaSJed Brown      install_requires=requirements(),
101ee05e790Sjeremylt      packages=["libceed"],
102ee05e790Sjeremylt      package_dir={"libceed": "python"},
103*37c134eaSJed Brown      include_package_data=True,
104ee05e790Sjeremylt
105ee05e790Sjeremylt      setup_requires=["cffi"],
106ee05e790Sjeremylt      cffi_modules=["python/build_ceed_cffi.py:ffibuilder"],
107*37c134eaSJed Brown      cmdclass={'build_ext': libceed_build_ext},
108ee05e790Sjeremylt)
109ee05e790Sjeremylt
110ee05e790Sjeremylt# ------------------------------------------------------------------------------
111