// Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and // other CEED contributors. All Rights Reserved. // SPDX-License-Identifier: BSD-2-Clause // Relocatable replacement for libCEED's installed JIT source-root object. // Upstream normally compiles the installation prefix into libceed. Native // source bundles here are shared libraries, so derive ../include from the // loaded library instead. Emscripten has no runtime compiler/JIT filesystem. #if defined(__EMSCRIPTEN__) const char *CeedJitSourceRootDefault = ""; #else #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include #include #include #include #ifndef PATH_MAX #define PATH_MAX 4096 #endif static char ceed_jit_source_root[PATH_MAX]; const char *CeedJitSourceRootDefault = ceed_jit_source_root; __attribute__((constructor)) static void CeedSetRelocatableJitSourceRoot(void) { Dl_info info; char library_path[PATH_MAX]; if (!dladdr((void *)&CeedJitSourceRootDefault, &info) || !info.dli_fname) { return; } if (snprintf(library_path, sizeof library_path, "%s", info.dli_fname) < 0) { return; } char *separator = strrchr(library_path, '/'); if (!separator) { return; } *separator = '\0'; (void)snprintf(ceed_jit_source_root, sizeof ceed_jit_source_root, "%s/../include/", library_path); } #endif