# # FreeLoader # Copyright (C) 1998-2002 Brian Palmer # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # PATH_TO_TOP = ../../.. include ../rules.mak TARGET = i386 ifeq ($(DEBUG),) # Debugging information on (bigger binary) #DEBUG = yes # Debugging information off (smaller binary) DEBUG = no endif SRCDIR = . BOOTCD_DIR = $(PATH_TO_TOP)/bootcd TOOLSDIR = $(SRCDIR)/../tools DEPTOOL = $(subst /,$(SEP),$(FREELDR_TOOLS_PATH))$(SEP)deptool TOOLS = $(DEPTOOL) preall : all .PHONY: BUILD_TOOLS BUILD_TOOLS: @$(MAKE) --no-print-directory -C $(FREELDR_TOOLS_PATH) ############################################# .PHONY : clean clean: @-$(RM) $(ALL_OBJS) @-$(RM) $(ALL_OBJS:.o=.d) @-$(RM) freeldr.exe @-$(RM) freeldr.sys @-$(RM) freeldr.map @-$(RM) setupldr.exe @-$(RM) setupldr.sys @-$(RM) setupldr.map @$(MAKE) --no-print-directory -C $(FREELDR_TOOLS_PATH) @echo freeldr: Clean ALL done. ############################################# .PHONY : bootcd bootcd : bootcd_dirs setup_loader boot_loader .PHONY : bootcd_dirs bootcd_dirs: $(MKDIR) $(BOOTCD_DIR) $(MKDIR) $(BOOTCD_DIR)/disk $(MKDIR) $(BOOTCD_DIR)/disk/reactos $(MKDIR) $(BOOTCD_DIR)/disk/install $(MKDIR) $(BOOTCD_DIR)/disk/bootdisk $(MKDIR) $(BOOTCD_DIR)/disk/loader .PHONY : boot_loader boot_loader : freeldr.sys $(CP) freeldr.sys $(BOOTCD_DIR)/disk/loader/freeldr.sys $(CP) ../freeldr.ini $(BOOTCD_DIR)/disk/loader/freeldr.ini .PHONY : setup_loader setup_loader : setupldr.sys $(CP) setupldr.sys $(BOOTCD_DIR)/disk/loader/setupldr.sys COMPILER_OPTIONS = -Wall -Werror -nostdlib -ffreestanding -fno-builtin -fno-inline \ -fno-zero-initialized-in-bss -O1 -MD # FreeLoader does not use any of the standard libraries, includes, or built-in functions ifeq ($(DEBUG),yes) COMPILER_DEBUG_DEFINES = -DDEBUG else COMPILER_DEBUG_DEFINES = endif COMPILER_DEFINES = -D__$(TARGET)__ $(COMPILER_DEBUG_DEFINES) COMPILER_INCLUDES = -I$(SRCDIR)/include -I$(PATH_TO_TOP)/w32api/include -I$(PATH_TO_TOP)/include -I$(PATH_TO_TOP)/ntoskrnl/include CFLAGS = $(COMPILER_OPTIONS) \ $(COMPILER_DEFINES) \ $(COMPILER_INCLUDES) LINKER_OPTIONS = -N -Ttext=0x8000 LFLAGS = $(LINKER_OPTIONS) ifeq ($(HOST),mingw32-linux) NASMFLAGS = -f win32 else NASMFLAGS = -f elf endif # fathelp.o must come first in the link line because it contains bootsector helper code # arch.o must come second in the link line because it contains the startup code ARCH_I386_OBJS = fathelp.o \ arch.o \ i386idt.o \ i386trap.o \ i386cpu.o \ i386pnp.o \ boot.o \ linux.o \ mb.o \ i386rtl.o \ i386vid.o \ drvmap.o \ int386.o \ i386disk.o \ portio.o \ hardware.o \ hwacpi.o \ hwapm.o \ hwcpu.o \ hwpci.o \ archmach.o \ machpc.o \ machxbox.o \ pccons.o \ pcdisk.o \ pcmem.o \ pcrtc.o \ pcvideo.o \ xboxcons.o \ xboxdisk.o \ xboxfont.o \ xboxhw.o \ xboxmem.o \ xboxrtc.o \ xboxvideo.o \ _alloca.o # For Mingw32 builds ARCH_OBJS = $(addprefix i386/,$(ARCH_I386_OBJS)) RTL_OBJS = print.o \ stdlib.o \ string.o \ list.o \ memcmp.o \ memcpy.o \ memmove.o \ memset.o FS_OBJS = fs.o \ fat.o \ iso.o \ ext2.o \ ntfs.o \ fsrec.o UI_OBJS = tui.o \ tuimenu.o \ ui.o \ gui.o REACTOS_OBJS = arcname.o \ binhive.o \ registry.o COMM_OBJS = rs232.o DISK_OBJS = disk.o \ partition.o MM_OBJS = mm.o \ meminit.o CACHE_OBJS = cache.o \ blocklist.o INIFILE_OBJS = inifile.o \ ini_init.o \ parse.o INFFILE_OBJS = inffile.o VIDEO_OBJS = video.o \ fade.o \ palette.o \ pixel.o \ bank.o # libgcc2.o contains code (__udivdi3, __umoddi3) necessary to do # 64-bit division on the i386 (and other 32-bit) architectures # This code was taken from the GCC v3.1 source MATH_OBJS = libgcc2.o BASE_OBJS = freeldr.o \ debug.o \ multiboot.o \ version.o \ cmdline.o \ machine.o FREELDR_OBJS = bootmgr.o \ drivemap.o \ miscboot.o \ options.o \ linuxboot.o \ oslist.o \ custom.o ROSLDR_OBJS = reactos.o SETUPLDR_OBJS = setupldr.o COMMON_OBJS = $(addprefix arch/,$(ARCH_OBJS)) \ $(addprefix rtl/,$(RTL_OBJS)) \ $(addprefix fs/,$(FS_OBJS)) \ $(addprefix ui/,$(UI_OBJS)) \ $(addprefix reactos/,$(REACTOS_OBJS)) \ $(addprefix comm/,$(COMM_OBJS)) \ $(addprefix disk/,$(DISK_OBJS)) \ $(addprefix mm/,$(MM_OBJS)) \ $(addprefix cache/,$(CACHE_OBJS)) \ $(addprefix video/,$(VIDEO_OBJS)) \ $(addprefix math/,$(MATH_OBJS)) \ $(BASE_OBJS) SPECIAL_OBJS = $(addprefix inifile/,$(INIFILE_OBJS)) \ $(addprefix inffile/,$(INFFILE_OBJS)) \ $(FREELDR_OBJS) \ $(addprefix reactos/,$(ROSLDR_OBJS)) \ $(addprefix reactos/,$(SETUPLDR_OBJS)) F_OBJS = $(COMMON_OBJS) \ $(addprefix inifile/,$(INIFILE_OBJS)) \ $(addprefix reactos/,$(ROSLDR_OBJS)) \ $(FREELDR_OBJS) S_OBJS = $(COMMON_OBJS) \ $(addprefix inifile/,$(INIFILE_OBJS)) \ $(addprefix inffile/,$(INFFILE_OBJS)) \ $(addprefix reactos/,$(SETUPLDR_OBJS)) ALL_OBJS = $(COMMON_OBJS) \ $(SPECIAL_OBJS) all : freeldr.sys setupldr.sys @echo freeldr: Make ALL done. freeldr.sys : $(ALL_OBJS) $(PATH_TO_TOP)/dk/w32/lib/librossym.a @echo freeldr: LINKING $@ @$(LD) $(LFLAGS) -o freeldr.exe $(F_OBJS) $(PATH_TO_TOP)/dk/w32/lib/librossym.a ifeq ($(FULL_MAP),yes) @$(OBJDUMP) -d -S freeldr.exe > freeldr.map else @$(NM) --numeric-sort freeldr.exe > freeldr.map endif @$(OBJCOPY) -O binary freeldr.exe freeldr.sys setupldr.sys : $(ALL_OBJS) @echo freeldr: LINKING $@ @$(LD) $(LFLAGS) -Map setupldr.map -o setupldr.exe $(S_OBJS) ifeq ($(FULL_MAP),yes) @$(OBJDUMP) -d -S setupldr.exe > setupldr.map else @$(NM) --numeric-sort setupldr.exe > setupldr.map endif @$(OBJCOPY) -O binary setupldr.exe setupldr.sys %.o :: %.c @echo freeldr: Compiling $* @$(CC) $(CFLAGS) -o $@ -c $< @$(DEPTOOL) $*.d %.o :: %.S @echo freeldr: Assembling $* @$(CC) $(CFLAGS) -o $@ -c $< @$(DEPTOOL) $*.d %.o :: %.asm @echo freeldr: Assembling $* @$(NASM_CMD) $(NASMFLAGS) -o $@ $<