diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-12 19:45:09 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-12 19:45:09 +0800 |
| commit | 09e8ef3e0dae29be7aa21a6e22a118a3f545945f (patch) | |
| tree | cfc5a7148aca9e768df16743c2c637e8c00a9d44 /backend/include/rcc/CodeGen/CommandFlags.h | |
| parent | 1775d50ba02dab033c639f5c8fedd46cb6613bef (diff) | |
| download | rcc-project-09e8ef3e0dae29be7aa21a6e22a118a3f545945f.tar.gz rcc-project-09e8ef3e0dae29be7aa21a6e22a118a3f545945f.tar.xz | |
[Tooling] Complete the LLVM MIR command-line contract
Diffstat (limited to 'backend/include/rcc/CodeGen/CommandFlags.h')
| -rw-r--r-- | backend/include/rcc/CodeGen/CommandFlags.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/backend/include/rcc/CodeGen/CommandFlags.h b/backend/include/rcc/CodeGen/CommandFlags.h new file mode 100644 index 0000000..0ee2f0d --- /dev/null +++ b/backend/include/rcc/CodeGen/CommandFlags.h @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef RCC_CODEGEN_COMMANDFLAGS_H +#define RCC_CODEGEN_COMMANDFLAGS_H + +#include "rcc/Support/Error.h" + +#include <cstddef> +#include <cstdint> +#include <optional> +#include <span> +#include <string> +#include <string_view> +#include <vector> + +namespace rcc { + +enum class RelocationModel : std::uint8_t { + Static, + PositionIndependent, +}; + +enum class CodeModel : std::uint8_t { + Small, + Medium, + Large, +}; + +enum class OptimizationLevel : std::uint8_t { + O0, + O1, + O2, + O3, + Os, + Oz, +}; + +enum class CodeGenFileType : std::uint8_t { + AssemblyFile, + ObjectFile, + Null, +}; + +struct CodeGenCommandFlags final { + std::optional<std::string> Triple; + std::optional<std::string> CPU; + std::optional<std::string> TuneCPU; + std::optional<std::string> ABI; + std::vector<std::string> FeatureOverrides; + std::optional<RelocationModel> Relocation; + std::optional<CodeModel> Code; + std::optional<OptimizationLevel> Optimization; + CodeGenFileType FileType = CodeGenFileType::AssemblyFile; + bool FileTypeWasSpecified = false; +}; + +[[nodiscard]] std::string_view spelling(RelocationModel Value) noexcept; +[[nodiscard]] std::string_view spelling(CodeModel Value) noexcept; +[[nodiscard]] std::string_view spelling(OptimizationLevel Value) noexcept; +[[nodiscard]] std::string_view spelling(CodeGenFileType Value) noexcept; + +[[nodiscard]] Expected<RelocationModel> parseRelocationModel(std::string_view Value); +[[nodiscard]] Expected<CodeModel> parseCodeModel(std::string_view Value); +[[nodiscard]] Expected<OptimizationLevel> parseOptimizationLevel(std::string_view Value); +[[nodiscard]] Expected<CodeGenFileType> parseCodeGenFileType(std::string_view Value); +[[nodiscard]] Expected<bool> parseCodeGenCommandFlag(std::span<const std::string_view> Arguments, + std::size_t &Index, + CodeGenCommandFlags &Flags); + +} // namespace rcc + +#endif // RCC_CODEGEN_COMMANDFLAGS_H |
