This commit is contained in:
maksw committed 2026-10-27 09:28:31 +01:00
1 parent d36f19509c
commit 30d20457f0
309 files changed
+121746 -1963

No files matched your search

+25 -3
View File
@@ -6,7 +6,8 @@
// Compiler and linker flags stay in macros so they can be used in file-scope aggregate initializers.
// MSVC C rejects initializing a static object from another object, even when the source object is const.
// Drivers and user binaries do not inherit kernel include paths so private dependencies fail at compile time.
#define COMMON_CFLAGS_LITERAL "/nologo /W3 /WX /O2 /GS- /Gs999999 /Gz /Gy /EHsc- /GR- /Oi- /Z7 /std:c17 /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS /Icode\\public /Icode\\common\\include"
#define COMMON_CFLAGS_BASE_LITERAL "/nologo /WX /O2 /GS- /Gs999999 /Gz /Gy /EHsc- /GR- /Oi- /Z7 /std:c17 /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS /Icode\\public /Icode\\common\\include"
#define COMMON_CFLAGS_LITERAL COMMON_CFLAGS_BASE_LITERAL " /W3"
#define KERNEL_CFLAGS_LITERAL COMMON_CFLAGS_LITERAL " /Icode\\kernel\\include"
#define DRIVER_CFLAGS_LITERAL COMMON_CFLAGS_LITERAL
#define USER_CFLAGS_LITERAL COMMON_CFLAGS_LITERAL
@@ -22,6 +23,7 @@
#define POSIX_EXE_LIBS_LITERAL "bin\\posix.lib bin\\syscall.lib obj\\libc.obj obj\\runtime\\posix_start.obj"
#define NATIVE_EXE_ENTRY_LITERAL "/ENTRY:NtlNativeStart"
#define USER_IMAGE_FLAGS_LITERAL "/DYNAMICBASE /HIGHENTROPYVA"
#define ACPICA_CFLAGS_LITERAL COMMON_CFLAGS_BASE_LITERAL " /W0 /DACPI_NTLITE /Icode\\drivers\\platform\\acpi\\third_party\\acpica\\include /wd4100 /wd4101 /wd4127 /wd4214 /wd4244 /wd4267 /wd4706 /wd4702"
#define LWIP_CFLAGS_LITERAL DRIVER_CFLAGS_LITERAL " /Icode\\drivers\\net\\lwip\\include /Icode\\drivers\\net\\lwip\\third_party\\lwip\\src\\include /wd4005 /wd4100 /wd4103 /wd4127 /wd4244 /wd4267 /wd4706"
#define EXT4_CFLAGS_LITERAL DRIVER_CFLAGS_LITERAL " /Icode\\drivers\\fs\\ext4\\include /Icode\\drivers\\fs\\ext4\\third_party\\lwext4\\include /DCONFIG_USE_DEFAULT_CFG=1 /DCONFIG_HAVE_OWN_ERRNO=1 /DCONFIG_DEBUG_PRINTF=0 /DCONFIG_DEBUG_ASSERT=0 /DCONFIG_BLOCK_DEV_ENABLE_STATS=0 /DCONFIG_EXT4_BLOCKDEVS_COUNT=8 /DCONFIG_EXT4_MOUNTPOINTS_COUNT=8 /wd4005 /wd4100 /wd4101 /wd4103 /wd4127 /wd4244 /wd4267 /wd4706 /wd4996"
#define NTFS3G_CFLAGS_LITERAL DRIVER_CFLAGS_LITERAL " /Icode\\drivers\\fs\\ntfs\\ntfs3g\\include /Icode\\drivers\\fs\\ntfs\\ntfs3g\\third_party\\ntfs-3g\\include /Icode\\drivers\\fs\\ntfs\\ntfs3g\\third_party\\ntfs-3g\\include\\ntfs-3g /DHAVE_CONFIG_H=1 /DNO_NTFS_DEVICE_DEFAULT_IO_OPS=1 /wd4005 /wd4018 /wd4100 /wd4101 /wd4103 /wd4127 /wd4133 /wd4146 /wd4244 /wd4267 /wd4305 /wd4311 /wd4312 /wd4706 /wd4996"
@@ -75,7 +77,7 @@ static const Driver_Target STANDALONE_DRIVERS[] = {
// Creates layout.
void create_layout() {
const char* dirs[] = {
"obj", "bin", "obj\\boot", "obj\\ddk", "obj\\kernel", "obj\\lwip", "obj\\ext4", "obj\\ntfs3g", "obj\\hal",
"obj", "bin", "obj\\boot", "obj\\ddk", "obj\\kernel", "obj\\lwip", "obj\\ext4", "obj\\ntfs3g", "obj\\acpica", "obj\\hal",
"obj\\syscall", "obj\\runtime", "obj\\win32", "obj\\posix", "obj\\drivers", "obj\\init", "obj\\rssrv", "obj\\posixsrv", "obj\\dwm",
"obj\\shell_win32", "obj\\shell_posix", "obj\\shell_native",
"obj\\async_apc", "obj\\async_cancel", "obj\\apc_return_smoke", "obj\\edit", "obj\\httpget",
@@ -116,7 +118,7 @@ bool clean_object_directory(const char* obj_dir) {
// Cleans object directories that are linked through wildcards.
bool clean_build_object_directories(void) {
const char* dirs[] = {
"obj\\boot", "obj\\ddk", "obj\\kernel", "obj\\lwip", "obj\\ext4", "obj\\hal",
"obj\\boot", "obj\\ddk", "obj\\kernel", "obj\\lwip", "obj\\ext4", "obj\\acpica", "obj\\hal",
"obj\\syscall", "obj\\runtime", "obj\\win32", "obj\\posix",
"obj\\init", "obj\\rssrv", "obj\\posixsrv", "obj\\dwm", "obj\\shell_win32", "obj\\shell_posix", "obj\\shell_native",
"obj\\async_apc", "obj\\async_cancel", "obj\\apc_return_smoke", "obj\\edit", "obj\\httpget",
@@ -425,6 +427,25 @@ int main(int argc, char** argv) {
nob_da_append(&procs, run_async(cmd));
}
// Compile the pinned ACPICA interpreter from its reproducible source manifest.
Nob_String_Builder acpi_manifest = {0}, acpi_files = {0};
if (!nob_read_entire_file("code\\drivers\\platform\\acpi\\acpica_sources.txt", &acpi_manifest)) return 1;
Nob_String_View acpi_view = nob_sv_from_parts(acpi_manifest.items, acpi_manifest.count);
while (acpi_view.count > 0) {
Nob_String_View line = nob_sv_trim(nob_sv_chop_by_delim(&acpi_view, '\n'));
if (!line.count || line.data[0] == '#') continue;
nob_sb_append_cstr(&acpi_files, "code\\");
for (size_t i = 0; i < line.count; i++) {
char ch = line.data[i] == '/' ? '\\' : line.data[i];
nob_sb_append_buf(&acpi_files, &ch, 1);
}
nob_sb_append_cstr(&acpi_files, " ");
}
if (!nob_write_entire_file("obj\\acpica\\sources.rsp", acpi_files.items, acpi_files.count)) return 1;
nob_da_append(&procs, run_async(nob_temp_sprintf(
"cl %s /MP /c /Foobj\\acpica\\ code\\drivers\\platform\\acpi\\acpi.c code\\drivers\\platform\\acpi\\acpi_osl.c code\\drivers\\platform\\acpi\\acpi_ec.c @obj\\acpica\\sources.rsp && link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /NOENTRY /OUT:bin\\acpi.sys bin\\kernel.lib obj\\acpica\\*.obj",
ACPICA_CFLAGS_LITERAL)));
Nob_String_Builder sb = {0}, lwip_files = {0};
if (nob_read_entire_file("code\\drivers\\net\\lwip\\lwip_sources.txt", &sb)) {
Nob_String_View sv = nob_sv_from_parts(sb.items, sb.count);
@@ -614,6 +635,7 @@ int main(int argc, char** argv) {
"bin\\vmwaresvga.sys",
"bin\\lwip.sys",
"bin\\usb.sys",
"bin\\acpi.sys",
"bin\\rtl816x.sys",
"bin\\rtl8139.sys",
"code\\drivers\\drivers.ini",