summaryrefslogtreecommitdiffhomepage
path: root/src/CommandLine/pef-amd64-drv.cpp
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2026-02-22 06:22:26 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2026-02-22 06:22:26 +0100
commit877de2b648ae76fa150f75269a23b8ec7476ca5f (patch)
treef4f2f4ceaa82fc6920fb98ff189632ceca396330 /src/CommandLine/pef-amd64-drv.cpp
parent2e2af63ba5fc011a0a0bba639ff776ce66001f50 (diff)
chore: .cc to .cpp conversion, define CK_POSIX in frontends, new driver system for Nectar/C++ frontend.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src/CommandLine/pef-amd64-drv.cpp')
-rw-r--r--src/CommandLine/pef-amd64-drv.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/CommandLine/pef-amd64-drv.cpp b/src/CommandLine/pef-amd64-drv.cpp
new file mode 100644
index 0000000..c8d8dbe
--- /dev/null
+++ b/src/CommandLine/pef-amd64-drv.cpp
@@ -0,0 +1,37 @@
+// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org)
+// Licensed under the Apache License, Version 2.0 (See accompanying
+// file LICENSE or copy at http://www.apache.org/licenses/LICENSE-2.0)
+// Official repository: https://github.com/nekernel-org/nectar
+
+/// @file pef-amd64-cxxdrv.cc
+/// @brief Nectar C++ frontend compiler for AMD64.
+
+#include <CompilerKit/Detail/Config.h>
+#include <CompilerKit/ErrorID.h>
+#include <CompilerKit/Utilities/Compiler.h>
+#include <CompilerKit/Utilities/DLL.h>
+
+#ifdef __APPLE__
+static auto kPath = "/usr/local/lib/libCompilerKit.dylib";
+#else
+static auto kPath = "/usr/lib/libCompilerKit.so";
+#endif
+
+static auto kSymbol = "CompilerNectarAMD64";
+
+Int32 main(Int32 argc, Char const* argv[]) {
+ CompilerKit::ModuleLoader dylib;
+ dylib(kPath, kSymbol);
+
+ CompilerKit::ModuleLoader::EntryT entrypoint_cxx =
+ reinterpret_cast<CompilerKit::ModuleLoader::EntryT>(dylib.fEntrypoint);
+
+ if (!entrypoint_cxx) {
+ kStdOut;
+ std::printf("error: Could not find entrypoint in %s: %s\n", kPath, dlerror());
+
+ return EXIT_FAILURE;
+ }
+
+ return (entrypoint_cxx(argc, argv) == NECTAR_SUCCESS) ? EXIT_SUCCESS : EXIT_FAILURE;
+}