replace nob with ms' build, move disk creation to build.bat, major comment cleanup, remove old and stupid tests, overhaul interrupt management with per-CPU vector allocation, affinity migration and safe teardown, add proper IOAPIC routing and PCI MSI/MSI-X/INTx support, migrate drivers to the new interrupt API, integrate ACPICA with a proper OS services layer, move ACPI firmware events, power button handling and S5 shutdown into acpi.sys, add parallel driver startup and atomic publication, replace PnP arrays with dynamic lists, redesign service startup again to be asynchronous, add delayed startup mode for services, allow omitting keys in services.ini, fix acpi ec deferred work handling, fix kernel threads having garbage exit code.

This commit is contained in:
maksw committed 2026-10-28 15:18:43 +01:00
1 parent d36f19509c
commit 36eef8f58d
696 files changed
+147281 -7530

No files matched your search

+137
View File
@@ -0,0 +1,137 @@
# Shared x64 build rules. BUILD owns source scanning and object dependencies.
!include sources
!IF "$(AMD64)" != "1"
!ERROR nt-lite currently targets AMD64 only.
!ENDIF
ARCHDIR=amd64
OBJDIR=$(TARGETPATH)\$(ARCHDIR)
_OBJ_DIR=obj
BINDIR=$(BASEDIR)\bin
CC=cl
CXX=cl
AS=ml64
RC=rc
COMMON=/nologo /WX /O2 /GS- /Gs999999 /Gz /Gy /EHsc- /GR- /Oi- /Z7 /std:c17 /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS /I"$(BASEDIR)\code\public" /I"$(BASEDIR)\code\common\include"
DRIVER_CFLAGS=$(COMMON) /W3
USER_CFLAGS=$(COMMON) /W3
KERNEL_CFLAGS=$(COMMON) /W3 /I"$(BASEDIR)\code\kernel\include"
POSIX_CFLAGS=/X /I"$(BASEDIR)\code\public\posix" /I"$(BASEDIR)\code\public\freestanding" $(USER_CFLAGS)
!IF "$(FLAVOR)" == "KERNEL"
CFLAGS=$(KERNEL_CFLAGS) $(EXTRA_CFLAGS)
!ELSEIF "$(FLAVOR)" == "BOOT"
CFLAGS=$(KERNEL_CFLAGS) $(EXTRA_CFLAGS)
!ELSEIF "$(FLAVOR)" == "LIBC"
CFLAGS=$(COMMON) /W3 $(EXTRA_CFLAGS)
!ELSEIF "$(FLAVOR)" == "COMMON"
CFLAGS=$(COMMON) /W3 $(EXTRA_CFLAGS)
!ELSEIF "$(FLAVOR)" == "ACPICA"
CFLAGS=$(COMMON) /W0 /DACPI_NTLITE /I"$(BASEDIR)\code\drivers\platform\acpi\third_party\acpica\include" /wd4100 /wd4101 /wd4127 /wd4214 /wd4244 /wd4267 /wd4706 /wd4702 $(EXTRA_CFLAGS)
!ELSEIF "$(FLAVOR)" == "LWIP"
CFLAGS=$(DRIVER_CFLAGS) /I"$(BASEDIR)\code\drivers\net\lwip\include" /I"$(BASEDIR)\code\drivers\net\lwip\third_party\lwip\src\include" /wd4005 /wd4100 /wd4103 /wd4127 /wd4244 /wd4267 /wd4706 $(EXTRA_CFLAGS)
!ELSEIF "$(FLAVOR)" == "EXT4"
CFLAGS=$(DRIVER_CFLAGS) /I"$(BASEDIR)\code\drivers\fs\ext4\include" /I"$(BASEDIR)\code\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 $(EXTRA_CFLAGS)
!ELSEIF "$(FLAVOR)" == "NTFS"
CFLAGS=$(DRIVER_CFLAGS) /I"$(BASEDIR)\code\drivers\fs\ntfs\ntfs3g\include" /I"$(BASEDIR)\code\drivers\fs\ntfs\ntfs3g\third_party\ntfs-3g\include" /I"$(BASEDIR)\code\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 $(EXTRA_CFLAGS)
!ELSEIF "$(FLAVOR)" == "POSIX"
CFLAGS=$(POSIX_CFLAGS) $(EXTRA_CFLAGS)
!ELSEIF "$(FLAVOR)" == "DRIVER"
CFLAGS=$(DRIVER_CFLAGS) $(EXTRA_CFLAGS)
!ELSE
CFLAGS=$(USER_CFLAGS) $(EXTRA_CFLAGS)
!ENDIF
CXXFLAGS=$(CFLAGS) /EHsc
ASFLAGS=/nologo $(EXTRA_ASFLAGS)
RCFLAGS=/nologo
LFLAGS=/nologo /NODEFAULTLIB /DEBUG
# Select the build before generated object rules.
all:
# Generated rules use the compiler and object-directory macros above.
!IF EXIST("obj\_objects.mac")
!include obj\_objects.mac
!ENDIF
OBJECTS=$(AMD64_OBJECTS)
!IF "$(TARGETTYPE)" == "LIBRARY"
TARGET=$(BINDIR)\$(TARGETNAME).lib
!ELSEIF "$(IMAGE_KIND)" == "EFI"
TARGET=$(BINDIR)\$(TARGETNAME).efi
!ELSEIF "$(IMAGE_KIND)" == "KERNEL"
TARGET=$(BINDIR)\$(TARGETNAME).exe
!ELSEIF "$(TARGETTYPE)" == "DRIVER"
TARGET=$(BINDIR)\$(TARGETNAME).sys
!ELSEIF "$(IMAGE_KIND)" == "DLL"
TARGET=$(BINDIR)\$(TARGETNAME).dll
!ELSEIF "$(TARGETTYPE)" == "PROGRAM"
TARGET=$(BINDIR)\$(TARGETNAME).exe
!ELSE
!ERROR Unsupported target type.
!ENDIF
!IF "$(PASS0ONLY)" == "1"
all:
@echo Pass zero complete.
!ELSEIF "$(TARGETTYPE)" == "LIBRARY"
# BUILD treats libraries as compile-pass targets.
all: $(TARGET)
!ELSEIF "$(NOLINK)" == "1"
all: $(OBJECTS)
!ELSE
all: $(TARGET)
!ENDIF
.SUFFIXES: .c .cpp .cxx .asm .obj
{.}.c{$(OBJDIR)}.obj:
@echo BUILDMSG: Compiling "$<"
@$(CC) $(CFLAGS) /c /Fo"$@" "$<"
{.}.cpp{$(OBJDIR)}.obj:
@echo BUILDMSG: Compiling "$<"
@$(CXX) $(CXXFLAGS) /c /Fo"$@" "$<"
{.}.asm{$(OBJDIR)}.obj:
@echo BUILDMSG: Compiling "$<"
@$(AS) $(ASFLAGS) /c /Fo"$@" "$<"
!IF "$(TARGETTYPE)" == "LIBRARY"
$(TARGET): $(OBJECTS)
@if not exist "$(BINDIR)" mkdir "$(BINDIR)"
@echo BUILDMSG: Archiving $(TARGET)
@lib /nologo /OUT:"$@" $(OBJECTS)
!ELSEIF "$(IMAGE_KIND)" == "EFI"
$(TARGET): $(OBJECTS) $(TARGETLIBS)
@if not exist "$(BINDIR)" mkdir "$(BINDIR)"
@echo BUILDMSG: Linking $(TARGET)
@link $(LFLAGS) /SUBSYSTEM:EFI_APPLICATION $(EXTRA_LFLAGS) /OUT:"$@" $(OBJECTS) $(TARGETLIBS)
!ELSEIF "$(IMAGE_KIND)" == "KERNEL"
$(TARGET): $(OBJECTS) $(TARGETLIBS)
@if not exist "$(BINDIR)" mkdir "$(BINDIR)"
@echo BUILDMSG: Linking $(TARGET)
@link $(LFLAGS) /SUBSYSTEM:NATIVE $(EXTRA_LFLAGS) /OUT:"$@" $(OBJECTS) $(TARGETLIBS)
!ELSEIF "$(IMAGE_KIND)" == "DLL"
$(TARGET): $(OBJECTS) $(TARGETLIBS)
@if not exist "$(BINDIR)" mkdir "$(BINDIR)"
@echo BUILDMSG: Linking $(TARGET)
@link $(LFLAGS) /SUBSYSTEM:NATIVE /DLL /IMPLIB:"$(BINDIR)\$(TARGETNAME).lib" $(EXTRA_LFLAGS) /OUT:"$@" $(OBJECTS) $(TARGETLIBS)
!ELSEIF "$(TARGETTYPE)" == "DRIVER"
$(TARGET): $(OBJECTS) $(TARGETLIBS)
@if not exist "$(BINDIR)" mkdir "$(BINDIR)"
@echo BUILDMSG: Linking $(TARGET)
@link $(LFLAGS) /SUBSYSTEM:NATIVE /DLL $(EXTRA_LFLAGS) /OUT:"$@" $(OBJECTS) $(TARGETLIBS)
!ELSE
$(TARGET): $(OBJECTS) $(TARGETLIBS)
@if not exist "$(BINDIR)" mkdir "$(BINDIR)"
@echo BUILDMSG: Linking $(TARGET)
@link $(LFLAGS) /SUBSYSTEM:NATIVE /DYNAMICBASE /HIGHENTROPYVA $(EXTRA_LFLAGS) /OUT:"$@" /PDB:"$(BINDIR)\$(TARGETNAME).pdb" $(OBJECTS) $(TARGETLIBS)
!ENDIF
clean:
@if exist "obj" rmdir /s /q "obj"