mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 11:26:42 +00:00

See discourse thread https://discourse.llvm.org/t/rfc-support-cmake-option-to-control-link-type-built-for-flang-runtime-libraries/71602/18 for full details. Flang-rt is the new library target for the flang runtime libraries. It builds the Flang-rt library (which contains the sources of FortranRuntime and FortranDecimal) and the Fortran_main library. See documentation in this patch for detailed description (flang-rt/docs/GettingStarted.md). This patch aims to: - integrate Flang's runtime into existing llvm infrasturcture so that Flang's runtime can be built similarly to other runtimes via the runtimes target or via the llvm target as an enabled runtime - decouple the FortranDecimal library sources that were used by both compiler and runtime so that different build configurations can be applied for compiler vs runtime - add support for running flang-rt testsuites, which were created by migrating relevant tests from `flang/test` and `flang/unittest` to `flang-rt/test` and `flang-rt/unittest`, using a new `check-flang-rt` target. - provide documentation on how to build and use the new FlangRT runtime Reviewed By: DanielCChen Differential Revision: https://reviews.llvm.org/D154869
39 lines
1.1 KiB
C
39 lines
1.1 KiB
C
/*
|
|
This test makes sure that flang's runtime does not depend on the C++ runtime
|
|
library. It tries to link this simple file against libFortranRuntime.a with
|
|
a C compiler.
|
|
|
|
REQUIRES: c-compiler
|
|
|
|
RUN: %cc -std=c99 %s -I%include %libruntime -lm -o /dev/null
|
|
*/
|
|
|
|
#include "flang/Runtime/entry-names.h"
|
|
#include <stdint.h>
|
|
|
|
/*
|
|
Manually add declarations for the runtime functions that we want to make sure
|
|
we're testing. We can't include any headers directly since they likely contain
|
|
C++ code that would explode here.
|
|
*/
|
|
struct EnvironmentDefaultList;
|
|
struct Descriptor;
|
|
|
|
double RTNAME(CpuTime)();
|
|
|
|
void RTNAME(ProgramStart)(
|
|
int, const char *[], const char *[], const struct EnvironmentDefaultList *);
|
|
int32_t RTNAME(ArgumentCount)();
|
|
int32_t RTNAME(GetCommandArgument)(int32_t, const struct Descriptor *,
|
|
const struct Descriptor *, const struct Descriptor *);
|
|
int32_t RTNAME(GetEnvVariable)();
|
|
|
|
int main() {
|
|
double x = RTNAME(CpuTime)();
|
|
RTNAME(ProgramStart)(0, 0, 0, 0);
|
|
int32_t c = RTNAME(ArgumentCount)();
|
|
int32_t v = RTNAME(GetCommandArgument)(0, 0, 0, 0);
|
|
int32_t e = RTNAME(GetEnvVariable)("FOO", 0, 0);
|
|
return x + c + v + e;
|
|
}
|