138 lines
5.2 KiB
Modula-2
138 lines
5.2 KiB
Modula-2
# 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"
|