xref: /libCEED/rust/libceed-sys/c-src/backends/memcheck/ceed-memcheck-serial.c (revision 1ef3f58f08373cfc32eb1b7a8e437c0dd90bedcd)
1*1ef3f58fSjeremylt // Copyright (c) 2017-2018, Lawrence Livermore National Security, LLC.
2*1ef3f58fSjeremylt // Produced at the Lawrence Livermore National Laboratory. LLNL-CODE-734707.
3*1ef3f58fSjeremylt // All Rights reserved. See files LICENSE and NOTICE for details.
4*1ef3f58fSjeremylt //
5*1ef3f58fSjeremylt // This file is part of CEED, a collection of benchmarks, miniapps, software
6*1ef3f58fSjeremylt // libraries and APIs for efficient high-order finite element and spectral
7*1ef3f58fSjeremylt // element discretizations for exascale applications. For more information and
8*1ef3f58fSjeremylt // source code availability see http://github.com/ceed.
9*1ef3f58fSjeremylt //
10*1ef3f58fSjeremylt // The CEED research is supported by the Exascale Computing Project 17-SC-20-SC,
11*1ef3f58fSjeremylt // a collaborative effort of two U.S. Department of Energy organizations (Office
12*1ef3f58fSjeremylt // of Science and the National Nuclear Security Administration) responsible for
13*1ef3f58fSjeremylt // the planning and preparation of a capable exascale ecosystem, including
14*1ef3f58fSjeremylt // software, applications, hardware, advanced system engineering and early
15*1ef3f58fSjeremylt // testbed platforms, in support of the nation's exascale computing imperative.
16*1ef3f58fSjeremylt 
17*1ef3f58fSjeremylt #include "ceed-memcheck.h"
18*1ef3f58fSjeremylt 
19*1ef3f58fSjeremylt static int CeedInit_Memcheck(const char *resource, Ceed ceed) {
20*1ef3f58fSjeremylt   int ierr;
21*1ef3f58fSjeremylt   if (strcmp(resource, "/cpu/self/memcheck/serial") &&
22*1ef3f58fSjeremylt       strcmp(resource, "/cpu/self/memcheck"))
23*1ef3f58fSjeremylt     // LCOV_EXCL_START
24*1ef3f58fSjeremylt     return CeedError(ceed, 1, "Valgrind Memcheck backend cannot use resource: %s",
25*1ef3f58fSjeremylt                      resource);
26*1ef3f58fSjeremylt   // LCOV_EXCL_STOP
27*1ef3f58fSjeremylt 
28*1ef3f58fSjeremylt   // Create refrence CEED that implementation will be dispatched
29*1ef3f58fSjeremylt   //   through unless overridden
30*1ef3f58fSjeremylt   Ceed ceedref;
31*1ef3f58fSjeremylt   CeedInit("/cpu/self/ref/serial", &ceedref);
32*1ef3f58fSjeremylt   ierr = CeedSetDelegate(ceed, ceedref); CeedChk(ierr);
33*1ef3f58fSjeremylt 
34*1ef3f58fSjeremylt   ierr = CeedSetBackendFunction(ceed, "Ceed", ceed, "QFunctionCreate",
35*1ef3f58fSjeremylt                                 CeedQFunctionCreate_Memcheck); CeedChk(ierr);
36*1ef3f58fSjeremylt 
37*1ef3f58fSjeremylt   return 0;
38*1ef3f58fSjeremylt }
39*1ef3f58fSjeremylt 
40*1ef3f58fSjeremylt __attribute__((constructor))
41*1ef3f58fSjeremylt static void Register(void) {
42*1ef3f58fSjeremylt   CeedRegister("/cpu/self/memcheck/serial", CeedInit_Memcheck, 100);
43*1ef3f58fSjeremylt }
44