From 885c9e2c6995f4bf7cd895966490a67b19619e13 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 21 Feb 2026 06:08:11 +0100 Subject: feat: Docs: Add cpp_style.md. feat: CompilerKit: patch and update Compiler's README. feat: CompilerKit: Patch some part of the Linkers where we'd expand soon. feat: GenericsLibrary: Add documentation of GenericsLibrary' _start function. Signed-off-by: Amlal El Mahrouss --- doc/cpp_style.md | 10 ++++++++++ include/GenericsLibrary/nrt.nc | 2 ++ src/CompilerKit/src/Compilers/README.md | 5 +++-- src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc | 20 ++++++++++++-------- src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc | 4 ++-- 5 files changed, 29 insertions(+), 12 deletions(-) create mode 100644 doc/cpp_style.md diff --git a/doc/cpp_style.md b/doc/cpp_style.md new file mode 100644 index 0000000..67f9800 --- /dev/null +++ b/doc/cpp_style.md @@ -0,0 +1,10 @@ +# Nectar C++ Style Guide: + +## Abstract: + +Nectar uses the Google C++ Style. But applied to low-level systems. We use C++20 and later throughout all of our stack. As we keep iterating over time we will amend this document. + +## Privilege Templates and ZOA over C with Classes. + +Nectar doesn't limit itself to a C++ paradigm, as we may find fitting solutions by exploring other patterns. + diff --git a/include/GenericsLibrary/nrt.nc b/include/GenericsLibrary/nrt.nc index 446ce94..9d0c640 100644 --- a/include/GenericsLibrary/nrt.nc +++ b/include/GenericsLibrary/nrt.nc @@ -5,6 +5,8 @@ extern main; +//@ The main entrypoint is an external symbol defined by the user program. +//@ You may also define it as a library and then write your own main wrapper over it. let _start() { return main(); diff --git a/src/CompilerKit/src/Compilers/README.md b/src/CompilerKit/src/Compilers/README.md index c3c17d4..95cb450 100644 --- a/src/CompilerKit/src/Compilers/README.md +++ b/src/CompilerKit/src/Compilers/README.md @@ -4,7 +4,8 @@ The current status of Nectar's frontends. ## Current Status: +The following status of each frontend to be implemented for Nectar. + - Nectar (Implemented) -- C++ (Not implemented) -- C (Not implemented) + diff --git a/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc b/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc index 7d0bbc3..f44dcc8 100644 --- a/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc +++ b/src/CompilerKit/src/Linkers/DynamicLinker64+MachO.cc @@ -19,6 +19,8 @@ #include #include +#define kLatestOSX (15) + #define kMachODefaultEntrypoint "_main" #define kMachODefaultOutput {"a" kMachOExt} @@ -47,7 +49,7 @@ static std::vector kObjectList; static std::vector kTextBytes; static std::vector kDataBytes; -/* symbol table */ +/* @brief symbol tables */ static std::vector kSymbolTable; static std::vector kStringTable; static std::map kSymbolOffsets; @@ -61,6 +63,8 @@ struct SectionInfo { UInt64 size; }; +using SectionInfoVec = std::vector; + /// @brief Extract clean symbol name from AE record name /// AE format: ".code64$symbolname" or "symbolname.code64" static CompilerKit::STLString macho_extract_symbol_name(const CompilerKit::STLString& aeName) { @@ -116,7 +120,7 @@ static UInt32 macho_add_symbol(const CompilerKit::STLString& name, uint8_t type, return static_cast(kSymbolTable.size() - 1); } -/// @brief Nectar 64-bit Mach-O Linker. +/// @brief Nectar 64-bit Mach-O Linker. /// @note This linker outputs Mach-O executables for macOS/iOS. NECTAR_MODULE(DynamicLinker64MachO) { CompilerKit::install_signal(SIGSEGV, CompilerKit::Detail::drvi_crash_handler); @@ -124,7 +128,7 @@ NECTAR_MODULE(DynamicLinker64MachO) { /** * @brief parse flags and trigger options. */ - for (size_t linker_arg = 1; linker_arg < argc; ++linker_arg) { + for (size_t linker_arg{1}; linker_arg < argc; ++linker_arg) { if (std::strcmp(argv[linker_arg], "-help") == 0) { kLinkerSplash(); @@ -186,7 +190,7 @@ NECTAR_MODULE(DynamicLinker64MachO) { continue; } else { if (argv[linker_arg][0] == '-') { - kConsoleOut << "unknown flag: " << argv[linker_arg] << "\n"; + kConsoleOut << "unknown option: " << argv[linker_arg] << "\n"; return EXIT_FAILURE; } @@ -214,7 +218,7 @@ NECTAR_MODULE(DynamicLinker64MachO) { } } - std::vector sections; + SectionInfoVec sections; CompilerKit::Utils::AEReadableProtocol reader_protocol{}; entry_point_command entryCommand{}; @@ -371,7 +375,7 @@ NECTAR_MODULE(DynamicLinker64MachO) { UInt32 dysymtabCmdSize = sizeof(dysymtab_command); UInt32 linkeditCmdSize = sizeof(segment_command_64); // No sections UInt32 dylinkerCmdSize = - (sizeof(dylinker_command) + 13 + 1 + 7) & ~7; // "/usr/lib/dyld" + padding to 8-byte align + (strlen(dylinker_command) + 13 + 1 + 7) & ~7; // "/usr/lib/dyld" + padding to 8-byte align sizeOfCmds = pageZeroSize + textSegCmdSize + dataSegCmdSize + buildCmdSize + uuidCmdSize + symtabCmdSize + dysymtabCmdSize + linkeditCmdSize + dylinkerCmdSize; @@ -434,8 +438,8 @@ NECTAR_MODULE(DynamicLinker64MachO) { build_version_command build = {.cmd = LC_BUILD_VERSION, .cmdsize = sizeof(build_version_command), .platform = PLATFORM_MACOS, - .minos = (11 << 16), // macOS 11.0 - .sdk = (11 << 16), // macOS 11.0 + .minos = (kLatestOSX << 16), // macOS 11.0 + .sdk = (kLatestOSX << 16), // macOS 11.0 .ntools = 0}; output_fc.write(reinterpret_cast(&build), sizeof(build)); diff --git a/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc b/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc index 5cbbba6..6be6c58 100644 --- a/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc +++ b/src/CompilerKit/src/Linkers/DynamicLinker64+PEF.cc @@ -160,7 +160,7 @@ NECTAR_MODULE(DynamicLinker64PEF) { continue; } else { if (argv[linker_arg][0] == '-') { - kConsoleOut << "unknown flag: " << argv[linker_arg] << "\n"; + kConsoleOut << "unknown option: " << argv[linker_arg] << "\n"; return EXIT_FAILURE; } @@ -605,7 +605,7 @@ NECTAR_MODULE(DynamicLinker64PEF) { kConsoleOut << "Ignoring :UndefinedSymbol: headers...\n"; } - // ignore :UndefinedSymbol: headers, they do not contain code. + // Let's ignore :UndefinedSymbol: headers, they do not contain code. continue; } -- cgit v1.2.3