1 //===-- runtime/environment.h -----------------------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #ifndef FORTRAN_RUNTIME_ENVIRONMENT_H_
10 #define FORTRAN_RUNTIME_ENVIRONMENT_H_
12 #include "flang/Common/optional.h"
13 #include "flang/Decimal/decimal.h"
15 struct EnvironmentDefaultList
;
17 namespace Fortran::runtime
{
21 RT_OFFLOAD_VAR_GROUP_BEGIN
23 constexpr bool isHostLittleEndian
{false};
24 #elif FLANG_LITTLE_ENDIAN
25 constexpr bool isHostLittleEndian
{true};
27 #error host endianness is not known
29 RT_OFFLOAD_VAR_GROUP_END
31 // External unformatted I/O data conversions
32 enum class Convert
{ Unknown
, Native
, LittleEndian
, BigEndian
, Swap
};
34 RT_API_ATTRS
Fortran::common::optional
<Convert
> GetConvertFromString(
35 const char *, std::size_t);
37 struct ExecutionEnvironment
{
39 // FIXME: https://github.com/llvm/llvm-project/issues/84942
42 ExecutionEnvironment(){};
43 void Configure(int argc
, const char *argv
[], const char *envp
[],
44 const EnvironmentDefaultList
*envDefaults
);
46 const char *name
, std::size_t name_length
, const Terminator
&terminator
);
49 const char **argv
{nullptr};
52 int listDirectedOutputLineLengthLimit
{79}; // FORT_FMT_RECL
53 enum decimal::FortranRounding defaultOutputRoundingMode
{
54 decimal::FortranRounding::RoundNearest
}; // RP(==PN)
55 Convert conversion
{Convert::Unknown
}; // FORT_CONVERT
56 bool noStopMessage
{false}; // NO_STOP_MESSAGE=1 inhibits "Fortran STOP"
57 bool defaultUTF8
{false}; // DEFAULT_UTF8
58 bool checkPointerDeallocation
{true}; // FORT_CHECK_POINTER_DEALLOCATION
61 RT_OFFLOAD_VAR_GROUP_BEGIN
62 extern RT_VAR_ATTRS ExecutionEnvironment executionEnvironment
;
63 RT_OFFLOAD_VAR_GROUP_END
65 } // namespace Fortran::runtime
67 #endif // FORTRAN_RUNTIME_ENVIRONMENT_H_