5#include "preprocessor.h"
10 preprocessor_define_macro(pp,
"__KCC__",
"1");
11 preprocessor_define_macro(pp,
"__KCC_VERSION__",
"\"1.0.0\"");
14 preprocessor_define_macro(pp,
"__STDC__",
"1");
15 preprocessor_define_macro(pp,
"__STDC_VERSION__",
"201112L");
18 time_t now = time(NULL);
19 struct tm *tm_info = localtime(&now);
23 strftime(date_str,
sizeof(date_str),
"\"%b %d %Y\"", tm_info);
24 strftime(time_str,
sizeof(time_str),
"\"%H:%M:%S\"", tm_info);
26 preprocessor_define_macro(pp,
"__DATE__", date_str);
27 preprocessor_define_macro(pp,
"__TIME__", time_str);
31 preprocessor_define_macro(pp,
"__linux__",
"1");
32 preprocessor_define_macro(pp,
"__unix__",
"1");
33 preprocessor_define_macro(pp,
"__PLATFORM__",
"\"Linux\"");
34#elif defined(__APPLE__)
35 preprocessor_define_macro(pp,
"__APPLE__",
"1");
36 preprocessor_define_macro(pp,
"__unix__",
"1");
37 preprocessor_define_macro(pp,
"__PLATFORM__",
"\"macOS\"");
39 preprocessor_define_macro(pp,
"__PLATFORM__",
"\"Unknown\"");
43#if defined(__x86_64__) || defined(_M_X64)
44 preprocessor_define_macro(pp,
"__x86_64__",
"1");
45 preprocessor_define_macro(pp,
"__ARCH__",
"\"x86_64\"");
46 preprocessor_define_macro(pp,
"__POINTER_SIZE__",
"8");
47#elif defined(__aarch64__)
48 preprocessor_define_macro(pp,
"__aarch64__",
"1");
49 preprocessor_define_macro(pp,
"__ARCH__",
"\"ARM64\"");
50 preprocessor_define_macro(pp,
"__POINTER_SIZE__",
"8");
54 preprocessor_define_macro(pp,
"NULL",
"((void*)0)");
55 preprocessor_define_macro(pp,
"TRUE",
"1");
56 preprocessor_define_macro(pp,
"FALSE",
"0");
59 preprocessor_define_macro(pp,
"PI",
"3.141592653589793");
60 preprocessor_define_macro(pp,
"E",
"2.718281828459045");
63 preprocessor_define_macro(pp,
"KB",
"1024");
64 preprocessor_define_macro(pp,
"MB",
"(1024 * 1024)");
65 preprocessor_define_macro(pp,
"GB",
"(1024 * 1024 * 1024)");
69 preprocessor_define_macro(pp,
"BUILD_TYPE",
"\"Debug\"");
70 preprocessor_define_macro(pp,
"DEBUG_BUILD",
"1");
72 preprocessor_define_macro(pp,
"BUILD_TYPE",
"\"Release\"");
73 preprocessor_define_macro(pp,
"RELEASE_BUILD",
"1");
77 for (
int i = 0; i < pp->macro_count; i++) {
78 pp->macros[i].is_predefined =
true;
83void preprocessor_add_user_macros(
Preprocessor *pp,
const char *macro_definitions[],
int count) {
84 for (
int i = 0; i < count; i++) {
85 const char *def = macro_definitions[i];
86 char *name = strdup(def);
87 char *equals = strchr(name,
'=');
91 char *value = equals + 1;
92 preprocessor_define_macro(pp, name, value);
94 preprocessor_define_macro(pp, name,
"1");
102void preprocessor_add_environment_macros(
Preprocessor *pp) {
103 char *user = getenv(
"USER");
105 char *quoted = malloc(strlen(user) + 3);
106 sprintf(quoted,
"\"%s\"", user);
107 preprocessor_define_macro(pp,
"ENV_USER", quoted);
114 preprocessor_define_macro(pp,
"__SYSTEM_NAME__",
"\"Unix\"");
115 preprocessor_define_macro(pp,
"__MACHINE__",
"\"Unknown\"");