# 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"