diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-29 22:26:33 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-29 22:26:33 -0500 |
| commit | db929ce81ca026cabb6d61d3c7b80190262d3c83 (patch) | |
| tree | df8f090049f9a3893da80ab7aae5bd001297cd5b /src/CompilerKit/Config.h | |
| parent | 0c8f94db58637420fa3b9513823a3cdb3e92bf38 (diff) | |
| parent | f900849f98bad9988805ec89c587395752490486 (diff) | |
Merge pull request #40 from nekernel-org/developv0.0.7
chore: API and system design update.
Diffstat (limited to 'src/CompilerKit/Config.h')
| -rw-r--r-- | src/CompilerKit/Config.h | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/src/CompilerKit/Config.h b/src/CompilerKit/Config.h new file mode 100644 index 0000000..59efcf0 --- /dev/null +++ b/src/CompilerKit/Config.h @@ -0,0 +1,172 @@ +/* ======================================== + + Copyright (C) 2024-2025 Amlal El Mahrouss, Licensed under the Apache 2.0 license + +======================================== */ + +#ifndef __NECTI_DEFINES_H__ +#define __NECTI_DEFINES_H__ + +/// =========================================================== /// +/// @file Config.h +/// @author Amlal El Mahrouss +/// @brief Basic defines and types for CompilerKit. +/// =========================================================== /// + +#ifndef Yes +#define Yes true +#endif // ifndef Yes + +#ifndef No +#define No false +#endif // ifndef No + +#ifndef YES +#define YES true +#endif // ifndef YES + +#ifndef NO +#define NO false +#endif // ifndef NO + +#define SizeType size_t + +#define VoidPtr void* +#define voidPtr VoidPtr + +#define UIntPtr uintptr_t + +#define Int64 int64_t +#define UInt64 uint64_t + +#define Int32 int +#define UInt32 unsigned + +#define Bool bool + +#define Int16 int16_t +#define UInt16 uint16_t + +#define Int8 int8_t +#define UInt8 uint8_t + +#define Char char +#define Boolean bool + +#include <signal.h> +#include <unistd.h> +#include <cassert> +#include <cctype> +#include <cstdint> +#include <cstdio> +#include <cstring> +#include <filesystem> +#include <fstream> +#include <iostream> +#include <memory> +#include <new> +#include <string> +#include <utility> +#include <vector> + +#define nullPtr std::nullptr_t + +#define MUST_PASS(E) assert(E) + +#ifndef __FORCE_STRLEN +#define __FORCE_STRLEN 1 + +#define string_length(len) strlen(len) +#endif + +#ifndef __FORCE_MEMCPY +#define __FORCE_MEMCPY 1 + +#define rt_copy_memory(dst, src, len) memcpy(dst, src, len) +#endif + +#define ATTRIBUTE(X) __attribute__((X)) +#define PACKED ATTRIBUTE(packed) + +#define kObjectFileExt ".obj" +#define kBinaryFileExt ".bin" + +#define kAsmFileExts {".64x", ".32x", ".masm", ".s", ".S", ".asm", ".x64"} + +#define kAsmFileExtsMax (7U) + +#define NECTI_MODULE(name) extern "C" int name(int argc, char** argv) + +#ifdef MSVC +#pragma scalar_storage_order big - endian +#endif // ifdef MSVC + +#define NECTI_COPY_DELETE(KLASS) \ + KLASS& operator=(const KLASS&) = delete; \ + KLASS(const KLASS&) = delete; + +#define NECTI_COPY_DEFAULT(KLASS) \ + KLASS& operator=(const KLASS&) = default; \ + KLASS(const KLASS&) = default; + +#define NECTI_MOVE_DELETE(KLASS) \ + KLASS& operator=(KLASS&&) = delete; \ + KLASS(KLASS&&) = delete; + +#define NECTI_MOVE_DEFAULT(KLASS) \ + KLASS& operator=(KLASS&&) = default; \ + KLASS(KLASS&&) = default; + +#define CK_IMPORT_C extern "C" +#define CK_IMPORT extern +namespace CompilerKit { +inline constexpr int kBaseYear = 1900; + +typedef std::string STLString; + +inline STLString current_date() noexcept { + auto time_data = time(nullptr); + auto time_struct = gmtime(&time_data); + + STLString fmt = std::to_string(kBaseYear + time_struct->tm_year); + + fmt += "-"; + fmt += std::to_string(time_struct->tm_mon + 1); + fmt += "-"; + fmt += std::to_string(time_struct->tm_mday); + + return fmt; +} + +inline bool to_str(Char* str, Int32 limit, Int32 base) noexcept { + if (limit == 0) return false; + + Int32 copy_limit = limit; + Int32 cnt = 0; + Int32 ret = base; + + while (limit != 1) { + ret = ret % 10; + str[cnt] = ret; + + ++cnt; + --limit; + --ret; + } + + str[copy_limit] = '\0'; + return true; +} + +inline bool install_signal(Int32 signal, void (*handler)(int)) noexcept { + if (handler == nullptr) return false; + + if (::signal(signal, handler) == SIG_ERR) { + return false; + } + + return true; +} +} // namespace CompilerKit + +#endif /* ifndef __NECTI_DEFINES_H__ */ |
