/*===-- include/flang/Runtime/entry-names.h -------------------------*- C -*-=//
 *
 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 * See https://llvm.org/LICENSE.txt for license information.
 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 *
 *===------------------------------------------------------------------------===
 */

/* Defines the macro RTNAME(n) which decorates the external name of a runtime
 * library function or object with extra characters so that it
 * (a) is not in the user's name space,
 * (b) doesn't conflict with other libraries, and
 * (c) prevents incompatible versions of the runtime library from linking
 *
 * The value of REVISION should not be changed until/unless the API to the
 * runtime library must change in some way that breaks backward compatibility.
 */
#ifndef FORTRAN_RUNTIME_ENTRY_NAMES_H
#define FORTRAN_RUNTIME_ENTRY_NAMES_H

#include "flang/Runtime/api-attrs.h"

#ifndef RTNAME
#define NAME_WITH_PREFIX_AND_REVISION(prefix, revision, name) \
  prefix##revision##name
#define RTNAME(name) NAME_WITH_PREFIX_AND_REVISION(_Fortran, A, name)
#endif

#ifndef RTDECL
#define RTDECL(name) RT_API_ATTRS RTNAME(name)
#endif

#ifndef RTDEF
#define RTDEF(name) RT_API_ATTRS RTNAME(name)
#endif

#ifndef RTNAME_STRING
#define RTNAME_STRINGIFY_(x) #x
#define RTNAME_STRINGIFY(x) RTNAME_STRINGIFY_(x)
#define RTNAME_STRING(name) RTNAME_STRINGIFY(RTNAME(name))
#endif

#endif /* !FORTRAN_RUNTIME_ENTRY_NAMES_H */
