1*7b8bbb42Svaleriabarra# Copyright (c) 2017, Lawrence Livermore National Security, LLC. Produced at 2*7b8bbb42Svaleriabarra# the Lawrence Livermore National Laboratory. LLNL-CODE-734707. All Rights 3*7b8bbb42Svaleriabarra# reserved. See files LICENSE and NOTICE for details. 4*7b8bbb42Svaleriabarra# 5*7b8bbb42Svaleriabarra# This file is part of CEED, a collection of benchmarks, miniapps, software 6*7b8bbb42Svaleriabarra# libraries and APIs for efficient high-order finite element and spectral 7*7b8bbb42Svaleriabarra# element discretizations for exascale applications. For more information and 8*7b8bbb42Svaleriabarra# source code availability see http://github.com/ceed. 9*7b8bbb42Svaleriabarra# 10*7b8bbb42Svaleriabarra# The CEED research is supported by the Exascale Computing Project 17-SC-20-SC, 11*7b8bbb42Svaleriabarra# a collaborative effort of two U.S. Department of Energy organizations (Office 12*7b8bbb42Svaleriabarra# of Science and the National Nuclear Security Administration) responsible for 13*7b8bbb42Svaleriabarra# the planning and preparation of a capable exascale ecosystem, including 14*7b8bbb42Svaleriabarra# software, applications, hardware, advanced system engineering and early 15*7b8bbb42Svaleriabarra# testbed platforms, in support of the nation's exascale computing imperative. 16*7b8bbb42Svaleriabarra 17*7b8bbb42Svaleriabarraimport os 18*7b8bbb42Svaleriabarrafrom cffi import FFI 19*7b8bbb42Svaleriabarraffibuilder = FFI() 20*7b8bbb42Svaleriabarra 21*7b8bbb42Svaleriabarra# ------------------------------------------------------------------------------ 22*7b8bbb42Svaleriabarra# Provide C definitions to CFFI 23*7b8bbb42Svaleriabarra# ------------------------------------------------------------------------------ 24*7b8bbb42Svaleriabarrawith open(os.path.abspath("include/ceed.h")) as f: 25*7b8bbb42Svaleriabarra lines = [line.strip() for line in f if 26*7b8bbb42Svaleriabarra not line.startswith("#") and 27*7b8bbb42Svaleriabarra not line.startswith(" static") and 28*7b8bbb42Svaleriabarra "CeedErrorImpl" not in line and 29*7b8bbb42Svaleriabarra "const char *, ...);" not in line and 30*7b8bbb42Svaleriabarra "///" not in line and 31*7b8bbb42Svaleriabarra not line.startswith("CEED_EXTERN const char *const")] 32*7b8bbb42Svaleriabarra lines = [line.replace("CEED_EXTERN", "extern") for line in lines] 33*7b8bbb42Svaleriabarra header = ''.join(lines) 34*7b8bbb42Svaleriabarra header = header.split("static inline CeedInt CeedIntPow", 1)[0] 35*7b8bbb42Svaleriabarraffibuilder.cdef(header) 36*7b8bbb42Svaleriabarra 37*7b8bbb42Svaleriabarra# ------------------------------------------------------------------------------ 38*7b8bbb42Svaleriabarra# Set source of libCEED header file 39*7b8bbb42Svaleriabarra# ------------------------------------------------------------------------------ 40*7b8bbb42Svaleriabarraffibuilder.set_source("_ceed_cffi", 41*7b8bbb42Svaleriabarra """ 42*7b8bbb42Svaleriabarra #include <ceed.h> // the C header of the library 43*7b8bbb42Svaleriabarra """, 44*7b8bbb42Svaleriabarra include_dirs=[os.path.abspath("include")], # include path 45*7b8bbb42Svaleriabarra libraries=["ceed"], # library name, for the linker 46*7b8bbb42Svaleriabarra library_dirs=[os.path.abspath("lib")], # library path, for the linker 47*7b8bbb42Svaleriabarra runtime_library_dirs=[os.path.abspath("lib")] # library path, at runtime 48*7b8bbb42Svaleriabarra) 49*7b8bbb42Svaleriabarra 50*7b8bbb42Svaleriabarra# ------------------------------------------------------------------------------ 51*7b8bbb42Svaleriabarra# Builder 52*7b8bbb42Svaleriabarra# ------------------------------------------------------------------------------ 53*7b8bbb42Svaleriabarraif __name__ == "__main__": 54*7b8bbb42Svaleriabarra ffibuilder.compile(verbose=True) 55*7b8bbb42Svaleriabarra 56*7b8bbb42Svaleriabarra# ------------------------------------------------------------------------------ 57