summaryrefslogtreecommitdiffhomepage
path: root/src/CommandLine/pef-amd64-drv.cpp
diff options
context:
space:
mode:
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;
+}