summaryrefslogtreecommitdiffhomepage
path: root/src/CommandLine/asm.cc
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-12-12 02:34:07 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-12-12 02:37:30 +0100
commitfacb3edec9fd275d5a8fcabaa87f768087255768 (patch)
tree587c1fdd1e4b09a3c0f5243af46f7d09ac3722fd /src/CommandLine/asm.cc
parent37b8e34dc54f572fbfbd135742fa11c21c5e67c1 (diff)
chore! breaking API changes, rename project to Nectar, instead of NeCTI.v0.0.9
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src/CommandLine/asm.cc')
-rw-r--r--src/CommandLine/asm.cc95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/CommandLine/asm.cc b/src/CommandLine/asm.cc
new file mode 100644
index 0000000..3773ff3
--- /dev/null
+++ b/src/CommandLine/asm.cc
@@ -0,0 +1,95 @@
+/* ========================================
+
+ Copyright (C) 2024-2025 Amlal El Mahrouss, licensed under the Apache 2.0 license
+
+======================================== */
+
+/// @file asm.cc
+/// @brief Assembler frontend.
+
+#include <CompilerKit/Detail/Config.h>
+#include <cstring>
+#include <vector>
+
+CK_IMPORT_C Int32 AssemblerMainPower64(Int32 argc, Char const* argv[]);
+CK_IMPORT_C Int32 AssemblerMainARM64(Int32 argc, Char const* argv[]);
+CK_IMPORT_C Int32 AssemblerMain64x0(Int32 argc, Char const* argv[]);
+CK_IMPORT_C Int32 AssemblerMainAMD64(Int32 argc, Char const* argv[]);
+
+enum AsmKind : Int32 {
+ kInvalidAssembler = 0,
+ kX64Assembler = 100,
+ k64X0Assembler,
+ kPOWER64Assembler,
+ kARM64Assembler,
+ kAssemblerCount = kARM64Assembler - kX64Assembler + 1,
+};
+
+Int32 main(Int32 argc, Char const* argv[]) {
+ std::vector<const Char*> arg_vec_cstr;
+ arg_vec_cstr.push_back(argv[0]);
+
+ const Int32 kInvalidAssembler = -1;
+ Int32 asm_type = kInvalidAssembler;
+
+ for (size_t index_arg = 1; index_arg < argc; ++index_arg) {
+ if (strcmp(argv[index_arg], "-asm-h") == 0) {
+ std::printf("asm: Frontend Assembler (64x0, power64, arm64, x64).\n");
+ std::printf("asm: Version: %s, Release: %s.\n", kDistVersion, kDistRelease);
+ std::printf(
+ "asm: Designed by Amlal El Mahrouss, Copyright (C) 2024-2025 Amlal El Mahrouss, all "
+ "rights reserved.\n");
+ std::printf(
+ "CompilerKit: Designed by Amlal El Mahrouss, Copyright (C) 2024-2025 Amlal El Mahrouss, "
+ "Licensed under the Apache 2.0 license.\n");
+
+ return 0;
+ } else if (strcmp(argv[index_arg], "-asm-x64") == 0) {
+ asm_type = kX64Assembler;
+ } else if (strcmp(argv[index_arg], "-asm-aarch64") == 0) {
+ asm_type = kARM64Assembler;
+ } else if (strcmp(argv[index_arg], "-asm-64x0") == 0) {
+ asm_type = k64X0Assembler;
+ } else if (strcmp(argv[index_arg], "-asm-power64") == 0) {
+ asm_type = kPOWER64Assembler;
+ } else {
+ arg_vec_cstr.push_back(argv[index_arg]);
+ }
+ }
+
+ switch (asm_type) {
+ case kPOWER64Assembler: {
+ if (int32_t code = AssemblerMainPower64(arg_vec_cstr.size(), arg_vec_cstr.data()); code) {
+ std::printf("asm: frontend exited with code %i.\n", code);
+ return code;
+ }
+ break;
+ }
+ case k64X0Assembler: {
+ if (int32_t code = AssemblerMain64x0(arg_vec_cstr.size(), arg_vec_cstr.data()); code) {
+ std::printf("asm: frontend exited with code %i.\n", code);
+ return code;
+ }
+ break;
+ }
+ case kARM64Assembler: {
+ if (int32_t code = AssemblerMainARM64(arg_vec_cstr.size(), arg_vec_cstr.data()); code) {
+ std::printf("asm: frontend exited with code %i.\n", code);
+ return code;
+ }
+ break;
+ }
+ case kX64Assembler: {
+ if (int32_t code = AssemblerMainAMD64(arg_vec_cstr.size(), arg_vec_cstr.data()); code) {
+ std::printf("asm: frontend exited with code %i.\n", code);
+ return code;
+ }
+ break;
+ }
+ default: {
+ return EXIT_FAILURE;
+ }
+ }
+
+ return EXIT_SUCCESS;
+}