From ab6d9f2a6b4c4f6891c52147463b55b915cab6ce Mon Sep 17 00:00:00 2001 From: Brian Palmer Date: Fri, 3 May 2002 23:56:18 +0000 Subject: [PATCH] Changes in v1.2.1 (5/3/2002) - Makefile updates - Optimized the Makefile - Removed recursive make functionality (builds much faster now) - Places all output into one single directory - Added automagically generated dependencies svn path=/trunk/; revision=2904 --- freeldr/CHANGELOG | 8 + freeldr/freeldr/Makefile | 344 ++++++++++++------ freeldr/freeldr/arch/Makefile | 35 -- freeldr/freeldr/arch/i386/Makefile | 56 --- .../freeldr/arch/i386/{disk.S => diskint13.S} | 0 freeldr/freeldr/cache/Makefile | 39 -- freeldr/freeldr/comm/Makefile | 39 -- freeldr/freeldr/disk/Makefile | 42 --- freeldr/freeldr/fs/Makefile | 42 --- freeldr/freeldr/{ => include}/arch.h | 0 freeldr/freeldr/{ => include}/cache.h | 0 freeldr/freeldr/{ => include}/comm.h | 0 freeldr/freeldr/{ => include}/debug.h | 0 freeldr/freeldr/{ => include}/disk.h | 0 freeldr/freeldr/{ => include}/freeldr.h | 0 freeldr/freeldr/{ => include}/fs.h | 0 freeldr/freeldr/{ => include}/inifile.h | 0 freeldr/freeldr/{ => include}/linux.h | 0 freeldr/freeldr/{ => include}/miscboot.h | 0 freeldr/freeldr/{ => include}/mm.h | 0 freeldr/freeldr/{ => include}/multiboot.h | 0 freeldr/freeldr/{ => include}/options.h | 0 freeldr/freeldr/{ => include}/oslist.h | 0 freeldr/freeldr/{ => include}/reactos.h | 0 freeldr/freeldr/{ => include}/rtl.h | 0 freeldr/freeldr/{ => include}/ui.h | 0 freeldr/freeldr/{ => include}/version.h | 4 +- freeldr/freeldr/inifile/Makefile | 42 --- .../freeldr/inifile/{init.c => ini_init.c} | 0 freeldr/freeldr/{linux.c => linuxboot.c} | 0 freeldr/freeldr/mm/Makefile | 39 -- freeldr/freeldr/mm/{init.c => mm_init.c} | 0 freeldr/freeldr/reactos/Makefile | 48 --- freeldr/freeldr/rtl/Makefile | 48 --- freeldr/freeldr/rules.mk | 34 -- freeldr/freeldr/ui/Makefile | 39 -- freeldr/sed.exe | Bin 0 -> 46080 bytes 37 files changed, 251 insertions(+), 608 deletions(-) delete mode 100644 freeldr/freeldr/arch/Makefile delete mode 100644 freeldr/freeldr/arch/i386/Makefile rename freeldr/freeldr/arch/i386/{disk.S => diskint13.S} (100%) delete mode 100644 freeldr/freeldr/cache/Makefile delete mode 100644 freeldr/freeldr/comm/Makefile delete mode 100644 freeldr/freeldr/disk/Makefile delete mode 100644 freeldr/freeldr/fs/Makefile rename freeldr/freeldr/{ => include}/arch.h (100%) rename freeldr/freeldr/{ => include}/cache.h (100%) rename freeldr/freeldr/{ => include}/comm.h (100%) rename freeldr/freeldr/{ => include}/debug.h (100%) rename freeldr/freeldr/{ => include}/disk.h (100%) rename freeldr/freeldr/{ => include}/freeldr.h (100%) rename freeldr/freeldr/{ => include}/fs.h (100%) rename freeldr/freeldr/{ => include}/inifile.h (100%) rename freeldr/freeldr/{ => include}/linux.h (100%) rename freeldr/freeldr/{ => include}/miscboot.h (100%) rename freeldr/freeldr/{ => include}/mm.h (100%) rename freeldr/freeldr/{ => include}/multiboot.h (100%) rename freeldr/freeldr/{ => include}/options.h (100%) rename freeldr/freeldr/{ => include}/oslist.h (100%) rename freeldr/freeldr/{ => include}/reactos.h (100%) rename freeldr/freeldr/{ => include}/rtl.h (100%) rename freeldr/freeldr/{ => include}/ui.h (100%) rename freeldr/freeldr/{ => include}/version.h (94%) delete mode 100644 freeldr/freeldr/inifile/Makefile rename freeldr/freeldr/inifile/{init.c => ini_init.c} (100%) rename freeldr/freeldr/{linux.c => linuxboot.c} (100%) delete mode 100644 freeldr/freeldr/mm/Makefile rename freeldr/freeldr/mm/{init.c => mm_init.c} (100%) delete mode 100644 freeldr/freeldr/reactos/Makefile delete mode 100644 freeldr/freeldr/rtl/Makefile delete mode 100644 freeldr/freeldr/rules.mk delete mode 100644 freeldr/freeldr/ui/Makefile create mode 100644 freeldr/sed.exe diff --git a/freeldr/CHANGELOG b/freeldr/CHANGELOG index 2300ad733c9..ad5687bbe4b 100644 --- a/freeldr/CHANGELOG +++ b/freeldr/CHANGELOG @@ -1,3 +1,11 @@ +Changes in v1.2.1 (5/3/2002) + +- Makefile updates +- Optimized the Makefile +- Removed recursive make functionality (builds much faster now) +- Places all output into one single directory +- Added automagically generated dependencies + Changes in v1.2 (4/30/2002) - All Linux kernels are supported (zImage & bzImage, loaded high & low) diff --git a/freeldr/freeldr/Makefile b/freeldr/freeldr/Makefile index 049fd1b0861..6882935097d 100644 --- a/freeldr/freeldr/Makefile +++ b/freeldr/freeldr/Makefile @@ -17,110 +17,248 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -include rules.mk -# asmcode.o has to be first in the link line because it contains the startup code -#OBJS = asmcode.a asmcode.o mb.o boot.o freeldr.o rtl.o fs.a fs.o fat.o \ -# reactos.o tui.o menu.o miscboot.o options.o linux.o multiboot.o arcname.o \ -# mem.o memory.o debug.o parseini.o registry.o import.o -#ASM_OBJS = asmcode.o mb.o boot.o mem.o -OBJS = freeldr.o miscboot.o options.o linux.o multiboot.o debug.o oslist.o version.o -LIBS = arch rtl fs ui reactos comm disk mm cache inifile -LIB_FILES = arch/arch.a rtl/rtl.a fs/fs.a ui/ui.a reactos/reactos.a -LIB_FILES2 = comm/comm.a disk/disk.a mm/mm.a cache/cache.a inifile/inifile.a +############################################# +# CHANGE THESE FOR YOUR OUTPUT +# +TARGET = i386 +DEBUG = 1 # Debugging information on (bigger binary) +#DEBUG = 0 # Debugging information off (smaller binary) + +OBJDIR = obj +OUTPUT_DIR = $(OBJDIR)/$(TARGET) + +############################################# +# COMPILER AND LINKER PROGRAMS +# +CC = gcc +LD = ld +AR = ar +RM = cmd /C del +CP = cmd /C copy +MKDIR = cmd /C md +RMDIR = cmd /C rd +MAKE = cmd /C make +NASM_CMD = nasm +OBJCOPY = objcopy +SED = $(SRCDIR)/../sed + +#----------------------------------------------------------------------------------------------------- +# TEST IF WE ARE IN THE TARGET DIRECTORY +# IF NOT WE WILL CHANGE TO THE TARGET DIRECTORY AND RUN MAKE FROM THERE +#----------------------------------------------------------------------------------------------------- +#ifeq (,$(filter $(CURDIR)/$(OUTPUT_DIR),$(notdir $(CURDIR)))) +ifneq ($(CURDIR), $(SRCDIR)/$(OUTPUT_DIR)) + +.SUFFIXES: + +############################################# +# VARIABLE TO CHANGE TO TARGET DIRECTORY AND INVOKE MAKE FROM THERE +# +MAKETARGET = $(MAKE) --no-print-directory -C $(OUTPUT_DIR) \ + -f ../../Makefile SRCDIR=$(CURDIR) $(MAKECMDGOALS) + +.PHONY: CHANGE_TO_TARGET +CHANGE_TO_TARGET: $(OBJDIR) $(OBJDIR)/$(TARGET) + +@$(MAKETARGET) > nul +# If you are compiling on a linux box you can remove the above "> nul" +# it is only there because Microsoft likes to print its version string +# during my make and I don't like it to print it's version string + +$(OBJDIR): + @echo Creating directory: $(OBJDIR) + @$(MKDIR) $(OBJDIR) + +$(OBJDIR)/$(TARGET): $(OBJDIR) + @echo Creating directory: $(OBJDIR)\$(TARGET) + @$(MKDIR) $(OBJDIR)\$(TARGET) + +Makefile : ; + +% :: CHANGE_TO_TARGET + +############################################# .PHONY : clean - -all: freeldr.sys - -freeldr.sys: c_code.a end.o -# $(LD) -N -Ttext=0x8000 --oformat=binary -s -o freeldr.sys c_code.a end.o - $(LD) -N -Ttext=0x8000 -s -o freeldr.exe c_code.a end.o - $(OBJCOPY) -O binary freeldr.exe freeldr.sys - -freeldr.exe: asmcode.a c_code.a - $(LD) -o freeldr.exe asmcode.a c_code.a - -c_code.a: $(LIBS) c_code1.a c_code2.a - $(LD) -r -o c_code.a $(LIB_FILES) c_code1.a c_code2.a - -c_code1.a: $(LIBS) - $(LD) -r -o c_code1.a $(LIB_FILES2) - -c_code2.a: $(OBJS) - $(LD) -r -o c_code2.a $(OBJS) - -freeldr.o: freeldr.c freeldr.h rtl.h fs.h reactos.h ui.h arch.h miscboot.h - $(CC) $(FLAGS) -o freeldr.o -c freeldr.c - -miscboot.o: miscboot.c freeldr.h arch.h rtl.h fs.h ui.h miscboot.h - $(CC) $(FLAGS) -o miscboot.o -c miscboot.c - -options.o: options.c freeldr.h rtl.h ui.h options.h - $(CC) $(FLAGS) -o options.o -c options.c - -linux.o: linux.c freeldr.h rtl.h ui.h linux.h - $(CC) $(FLAGS) -o linux.o -c linux.c - -multiboot.o: multiboot.c freeldr.h rtl.h fs.h multiboot.h ui.h - $(CC) $(FLAGS) -o multiboot.o -c multiboot.c - -debug.o: debug.c debug.h - $(CC) $(FLAGS) -o debug.o -c debug.c - -oslist.o: oslist.c oslist.h - $(CC) $(FLAGS) -o oslist.o -c oslist.c - -version.o: version.c version.h - $(CC) $(FLAGS) -o version.o -c version.c - -end.o: end.S - $(CC) $(FLAGS) -o end.o -c end.S - -arch: - $(MAKE) -C arch - -rtl: - $(MAKE) -C rtl - -fs: - $(MAKE) -C fs - -ui: - $(MAKE) -C ui - -reactos: - $(MAKE) -C reactos - -comm: - $(MAKE) -C comm - -disk: - $(MAKE) -C disk - -mm: - $(MAKE) -C mm - -cache: - $(MAKE) -C cache - -inifile: - $(MAKE) -C inifile - -.PHONY : $(LIBS) - clean: - - $(RM) *.o - - $(RM) *.a - - $(RM) *.exe - - $(RM) *.sys - $(MAKE) -C arch clean - $(MAKE) -C reactos clean - $(MAKE) -C comm clean - $(MAKE) -C disk clean - $(MAKE) -C mm clean - $(MAKE) -C ui clean - $(MAKE) -C fs clean - $(MAKE) -C rtl clean - $(MAKE) -C cache clean - $(MAKE) -C inifile clean + @echo Cleaning directory $(OBJDIR)\$(TARGET) + @-$(RM) /Q $(OBJDIR)\$(TARGET)\*.* + @echo Removing directory $(OBJDIR)\$(TARGET) + @-$(RMDIR) $(OBJDIR)\$(TARGET) + @-$(RMDIR) $(OBJDIR) + @echo Clean ALL done. + +############################################# + +#----------------------------------------------------------------------------------------------------- +# END MAGIC TARGET DIRECTORY CHANGE STUFF +#----------------------------------------------------------------------------------------------------- +else + +############################################# +# COMPILER COMMAND LINE OPTIONS +# +COMPILER_OPTIONS = -Wall -nostdlib -nostdinc -fno-builtin -O3 -MD + +############################################# +# COMPILER DEFINES +# +ifeq ($(DEBUG),1) +COMPILER_DEFINES = -DDEBUG +else +COMPILERS_DEFINES = +endif + +############################################# +# INCLUDE DIRECTORY OPTIONS +# +COMPILER_INCLUDES = -I$(SRCDIR)/include + +############################################# +# COMPILER FLAGS +# +CFLAGS = $(COMPILER_OPTIONS) \ + $(COMPILER_DEFINES) \ + $(COMPILER_INCLUDES) + +############################################# +# LINKER COMMAND LINE OPTIONS +# +#LINKER_OPTIONS = -N -Ttext=0x8000 --oformat=binary -s +LINKER_OPTIONS = -N -Ttext=0x8000 -s + +############################################# +# LINKERS FLAGS +# +LFLAGS = $(LINKER_OPTIONS) + +############################################# +# LIST ALL THE OBJECT FILE GROUPS +# +# 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 +# end.o must come last in the link line +ARCH_OBJS = fathelp.o \ + arch.o \ + boot.o \ + linux.o \ + mb.o \ + mem.o \ + diskint13.o + +RTL_OBJS = memory.o \ + print.o \ + stdlib.o \ + string.o \ + list.o + +FS_OBJS = fs.o \ + fat.o \ + iso.o + +UI_OBJS = tui.o \ + menu.o + +REACTOS_OBJS= reactos.o \ + arcname.o \ + hwdetect.o \ + reghive.o \ + registry.o + +COMM_OBJS = rs232.o \ + portio.o + +DISK_OBJS = disk.o \ + geometry.o \ + partition.o + +MM_OBJS = mm.o \ + mm_init.o + +CACHE_OBJS = cache.o \ + blocklist.o + +INIFILE_OBJS= inifile.o \ + ini_init.o \ + parse.o + +FREELDR_OBJS= freeldr.o \ + miscboot.o \ + options.o \ + linuxboot.o \ + multiboot.o \ + debug.o \ + oslist.o \ + version.o \ + end.o # Must come last in the link line + +############################################# +# ALL THE OBJECTS +# +OBJS = $(ARCH_OBJS) \ + $(RTL_OBJS) \ + $(FS_OBJS) \ + $(UI_OBJS) \ + $(REACTOS_OBJS) \ + $(COMM_OBJS) \ + $(DISK_OBJS) \ + $(MM_OBJS) \ + $(CACHE_OBJS) \ + $(INIFILE_OBJS) \ + $(FREELDR_OBJS) + +############################################# +# SET THE VPATH SO MAKE CAN FIND THE SOURCE FILES +# +VPATH = $(SRCDIR)/ \ + $(SRCDIR)/arch/$(TARGET) \ + $(SRCDIR)/rtl \ + $(SRCDIR)/fs \ + $(SRCDIR)/ui \ + $(SRCDIR)/reactos \ + $(SRCDIR)/comm \ + $(SRCDIR)/disk \ + $(SRCDIR)/mm \ + $(SRCDIR)/cache \ + $(SRCDIR)/inifile \ + $(SRCDIR)/include + +############################################# + +all : freeldr.sys + @echo Make ALL done. + +############################################# + +freeldr.sys : $(OBJS) + @echo ===================================================== LINKING $@ +# @$(LD) -N -Ttext=0x8000 --oformat=binary -s -o freeldr.sys $(OBJS) + @$(LD) $(LFLAGS) -o freeldr.exe $(OBJS) + @$(OBJCOPY) -O binary freeldr.exe freeldr.sys + +############################################# + +%.o :: %.c + @echo ===================================================== Compiling $* + @$(CC) $(CFLAGS) -o $@ -c $< + @$(SED) -e "s/\($*\)\.o[ :]*/\1.o $*.dep : /g" < $*.d > $*.dep +# @$(SED) -e "s/#.*//" -e "s/^[^:]*: *//" -e "s/ *\\$$//" -e "/^$$/ d" -e "s/$$/ :/" < $*.d >> $*.P + +%.o :: %.S + @echo ===================================================== Assembling $* + @$(CC) $(CFLAGS) -o $@ -c $< + @$(SED) -e "s/\($*\)\.o[ :]*/\1.o $*.dep : /g" < $*.d > $*.dep +# @$(SED) -e "s/#.*//" -e "s/^[^:]*: *//" -e "s/ *\\$$//" -e "/^$$/ d" -e "s/$$/ :/" < $*.d >> $*.P + +%.o :: %.asm + @echo ===================================================== Assembling $* + @$(NASM_CMD) -o $@ -f coff $< + +############################################# + +# Include the automagically generated dependencies +-include $(OBJS:%.o=%.dep) + +############################################# + +endif diff --git a/freeldr/freeldr/arch/Makefile b/freeldr/freeldr/arch/Makefile deleted file mode 100644 index 5baf058a7c8..00000000000 --- a/freeldr/freeldr/arch/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -# -# 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. -# - -include ../rules.mk - -TARGET = i386 - -OBJS = $(TARGET)/arch.S $(TARGET)/boot.S $(TARGET)/mb.S $(TARGET)/mem.S $(TARGET)/disk.S - -.PHONY : clean - -all: arch.a - -arch.a: $(OBJS) - $(MAKE) -C $(TARGET) - -clean: - - $(RM) *.a - $(MAKE) -C $(TARGET) clean diff --git a/freeldr/freeldr/arch/i386/Makefile b/freeldr/freeldr/arch/i386/Makefile deleted file mode 100644 index 437c97747cf..00000000000 --- a/freeldr/freeldr/arch/i386/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -# -# 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. -# - -include ../../rules.mk - -OBJS = fathelp.o arch.o boot.o linux.o mb.o mem.o disk.o - -.PHONY : clean - -all: arch.a - -arch.a: $(OBJS) - $(LD) -r -o arch.a $(OBJS) - - $(RM) ..\arch.a - $(CP) arch.a ..\arch.a - -fathelp.o: fathelp.asm - $(NASM_CMD) -o fathelp.o -f coff fathelp.asm - -arch.o: arch.S - $(CC) $(FLAGS) -o arch.o -c arch.S - -boot.o: boot.S - $(CC) $(FLAGS) -o boot.o -c boot.S - -linux.o: linux.S - $(CC) $(FLAGS) -o linux.o -c linux.S - -mb.o: mb.S - $(CC) $(FLAGS) -o mb.o -c mb.S - -mem.o: mem.S - $(CC) $(FLAGS) -o mem.o -c mem.S - -disk.o: disk.S - $(CC) $(FLAGS) -o disk.o -c disk.S - -clean: - - $(RM) *.o - - $(RM) *.a diff --git a/freeldr/freeldr/arch/i386/disk.S b/freeldr/freeldr/arch/i386/diskint13.S similarity index 100% rename from freeldr/freeldr/arch/i386/disk.S rename to freeldr/freeldr/arch/i386/diskint13.S diff --git a/freeldr/freeldr/cache/Makefile b/freeldr/freeldr/cache/Makefile deleted file mode 100644 index 9b25a61bff6..00000000000 --- a/freeldr/freeldr/cache/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# 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. -# - -include ../rules.mk - -OBJS = cache.o blocklist.o - -.PHONY : clean - -all: cache.a - -cache.a: $(OBJS) - $(LD) -r -o cache.a $(OBJS) - -cache.o: cache.c cm.h - $(CC) $(FLAGS) -o cache.o -c cache.c - -blocklist.o: blocklist.c cm.h - $(CC) $(FLAGS) -o blocklist.o -c blocklist.c - -clean: - - $(RM) *.o - - $(RM) *.a diff --git a/freeldr/freeldr/comm/Makefile b/freeldr/freeldr/comm/Makefile deleted file mode 100644 index b543c4f3bfa..00000000000 --- a/freeldr/freeldr/comm/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# 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. -# - -include ../rules.mk - -OBJS = rs232.o portio.o - -.PHONY : clean - -all: comm.a - -comm.a: $(OBJS) - $(LD) -r -o comm.a $(OBJS) - -rs232.o: rs232.c ../comm.h - $(CC) $(FLAGS) -o rs232.o -c rs232.c - -portio.o: portio.c ../comm.h - $(CC) $(FLAGS) -o portio.o -c portio.c - -clean: - - $(RM) *.o - - $(RM) *.a diff --git a/freeldr/freeldr/disk/Makefile b/freeldr/freeldr/disk/Makefile deleted file mode 100644 index 2d918bb489c..00000000000 --- a/freeldr/freeldr/disk/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# 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. -# - -include ../rules.mk - -OBJS = disk.o geometry.o partition.o - -.PHONY : clean - -all: disk.a - -disk.a: $(OBJS) - $(LD) -r -o disk.a $(OBJS) - -disk.o: disk.c ../disk.h - $(CC) $(FLAGS) -o disk.o -c disk.c - -geometry.o: geometry.c ../disk.h - $(CC) $(FLAGS) -o geometry.o -c geometry.c - -partition.o: partition.c ../disk.h - $(CC) $(FLAGS) -o partition.o -c partition.c - -clean: - - $(RM) *.o - - $(RM) *.a diff --git a/freeldr/freeldr/fs/Makefile b/freeldr/freeldr/fs/Makefile deleted file mode 100644 index 35240262752..00000000000 --- a/freeldr/freeldr/fs/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# 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. -# - -include ../rules.mk - -OBJS = fs.o fat.o iso.o - -.PHONY : clean - -all: fs.a - -fs.a: $(OBJS) - $(LD) -r -o fs.a $(OBJS) - -fs.o: fs.c fat.h ../fs.h - $(CC) $(FLAGS) -o fs.o -c fs.c - -fat.o: fat.c fat.h ../fs.h - $(CC) $(FLAGS) -o fat.o -c fat.c - -iso.o: iso.c iso.h ../fs.h - $(CC) $(FLAGS) -o iso.o -c iso.c - -clean: - - $(RM) *.o - - $(RM) *.a diff --git a/freeldr/freeldr/arch.h b/freeldr/freeldr/include/arch.h similarity index 100% rename from freeldr/freeldr/arch.h rename to freeldr/freeldr/include/arch.h diff --git a/freeldr/freeldr/cache.h b/freeldr/freeldr/include/cache.h similarity index 100% rename from freeldr/freeldr/cache.h rename to freeldr/freeldr/include/cache.h diff --git a/freeldr/freeldr/comm.h b/freeldr/freeldr/include/comm.h similarity index 100% rename from freeldr/freeldr/comm.h rename to freeldr/freeldr/include/comm.h diff --git a/freeldr/freeldr/debug.h b/freeldr/freeldr/include/debug.h similarity index 100% rename from freeldr/freeldr/debug.h rename to freeldr/freeldr/include/debug.h diff --git a/freeldr/freeldr/disk.h b/freeldr/freeldr/include/disk.h similarity index 100% rename from freeldr/freeldr/disk.h rename to freeldr/freeldr/include/disk.h diff --git a/freeldr/freeldr/freeldr.h b/freeldr/freeldr/include/freeldr.h similarity index 100% rename from freeldr/freeldr/freeldr.h rename to freeldr/freeldr/include/freeldr.h diff --git a/freeldr/freeldr/fs.h b/freeldr/freeldr/include/fs.h similarity index 100% rename from freeldr/freeldr/fs.h rename to freeldr/freeldr/include/fs.h diff --git a/freeldr/freeldr/inifile.h b/freeldr/freeldr/include/inifile.h similarity index 100% rename from freeldr/freeldr/inifile.h rename to freeldr/freeldr/include/inifile.h diff --git a/freeldr/freeldr/linux.h b/freeldr/freeldr/include/linux.h similarity index 100% rename from freeldr/freeldr/linux.h rename to freeldr/freeldr/include/linux.h diff --git a/freeldr/freeldr/miscboot.h b/freeldr/freeldr/include/miscboot.h similarity index 100% rename from freeldr/freeldr/miscboot.h rename to freeldr/freeldr/include/miscboot.h diff --git a/freeldr/freeldr/mm.h b/freeldr/freeldr/include/mm.h similarity index 100% rename from freeldr/freeldr/mm.h rename to freeldr/freeldr/include/mm.h diff --git a/freeldr/freeldr/multiboot.h b/freeldr/freeldr/include/multiboot.h similarity index 100% rename from freeldr/freeldr/multiboot.h rename to freeldr/freeldr/include/multiboot.h diff --git a/freeldr/freeldr/options.h b/freeldr/freeldr/include/options.h similarity index 100% rename from freeldr/freeldr/options.h rename to freeldr/freeldr/include/options.h diff --git a/freeldr/freeldr/oslist.h b/freeldr/freeldr/include/oslist.h similarity index 100% rename from freeldr/freeldr/oslist.h rename to freeldr/freeldr/include/oslist.h diff --git a/freeldr/freeldr/reactos.h b/freeldr/freeldr/include/reactos.h similarity index 100% rename from freeldr/freeldr/reactos.h rename to freeldr/freeldr/include/reactos.h diff --git a/freeldr/freeldr/rtl.h b/freeldr/freeldr/include/rtl.h similarity index 100% rename from freeldr/freeldr/rtl.h rename to freeldr/freeldr/include/rtl.h diff --git a/freeldr/freeldr/ui.h b/freeldr/freeldr/include/ui.h similarity index 100% rename from freeldr/freeldr/ui.h rename to freeldr/freeldr/include/ui.h diff --git a/freeldr/freeldr/version.h b/freeldr/freeldr/include/version.h similarity index 94% rename from freeldr/freeldr/version.h rename to freeldr/freeldr/include/version.h index 4ba14d6b860..d43364a88c7 100644 --- a/freeldr/freeldr/version.h +++ b/freeldr/freeldr/include/version.h @@ -22,7 +22,7 @@ /* just some stuff */ -#define VERSION "FreeLoader v1.2" +#define VERSION "FreeLoader v1.2.1" #define COPYRIGHT "Copyright (C) 1998-2002 Brian Palmer " // FreeLoader version defines @@ -34,7 +34,7 @@ // #define FREELOADER_MAJOR_VERSION 1 #define FREELOADER_MINOR_VERSION 2 -#define FREELOADER_PATCH_VERSION 0 +#define FREELOADER_PATCH_VERSION 1 PUCHAR GetFreeLoaderVersionString(VOID); diff --git a/freeldr/freeldr/inifile/Makefile b/freeldr/freeldr/inifile/Makefile deleted file mode 100644 index 55309ff74c8..00000000000 --- a/freeldr/freeldr/inifile/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# 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. -# - -include ../rules.mk - -OBJS = inifile.o init.o parse.o - -.PHONY : clean - -all: inifile.a - -inifile.a: $(OBJS) - $(LD) -r -o inifile.a $(OBJS) - -inifile.o: inifile.c ../inifile.h - $(CC) $(FLAGS) -o inifile.o -c inifile.c - -init.o: init.c ../inifile.h - $(CC) $(FLAGS) -o init.o -c init.c - -parse.o: parse.c ../inifile.h - $(CC) $(FLAGS) -o parse.o -c parse.c - -clean: - - $(RM) *.o - - $(RM) *.a diff --git a/freeldr/freeldr/inifile/init.c b/freeldr/freeldr/inifile/ini_init.c similarity index 100% rename from freeldr/freeldr/inifile/init.c rename to freeldr/freeldr/inifile/ini_init.c diff --git a/freeldr/freeldr/linux.c b/freeldr/freeldr/linuxboot.c similarity index 100% rename from freeldr/freeldr/linux.c rename to freeldr/freeldr/linuxboot.c diff --git a/freeldr/freeldr/mm/Makefile b/freeldr/freeldr/mm/Makefile deleted file mode 100644 index 1e05a751c28..00000000000 --- a/freeldr/freeldr/mm/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# 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. -# - -include ../rules.mk - -OBJS = mm.o init.o - -.PHONY : clean - -all: mm.a - -mm.a: $(OBJS) - $(LD) -r -o mm.a $(OBJS) - -mm.o: mm.c ../mm.h mem.h - $(CC) $(FLAGS) -o mm.o -c mm.c - -init.o: init.c ../mm.h mem.h - $(CC) $(FLAGS) -o init.o -c init.c - -clean: - - $(RM) *.o - - $(RM) *.a diff --git a/freeldr/freeldr/mm/init.c b/freeldr/freeldr/mm/mm_init.c similarity index 100% rename from freeldr/freeldr/mm/init.c rename to freeldr/freeldr/mm/mm_init.c diff --git a/freeldr/freeldr/reactos/Makefile b/freeldr/freeldr/reactos/Makefile deleted file mode 100644 index 1206a5ea2dd..00000000000 --- a/freeldr/freeldr/reactos/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -# -# 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. -# - -include ../rules.mk - -OBJS = reactos.o arcname.o hwdetect.o reghive.o registry.o - -.PHONY : clean - -all: reactos.a - -reactos.a: $(OBJS) - $(LD) -r -o reactos.a $(OBJS) - -reactos.o: reactos.c ../reactos.h - $(CC) $(FLAGS) -o reactos.o -c reactos.c - -arcname.o: arcname.c ../reactos.h - $(CC) $(FLAGS) -o arcname.o -c arcname.c - -hwdetect.o: hwdetect.c ../reactos.h - $(CC) $(FLAGS) -o hwdetect.o -c hwdetect.c - -reghive.o: reghive.c ../reactos.h - $(CC) $(FLAGS) -o reghive.o -c reghive.c - -registry.o: registry.c ../reactos.h - $(CC) $(FLAGS) -o registry.o -c registry.c - -clean: - - $(RM) *.o - - $(RM) *.a diff --git a/freeldr/freeldr/rtl/Makefile b/freeldr/freeldr/rtl/Makefile deleted file mode 100644 index 8b76b5d50b0..00000000000 --- a/freeldr/freeldr/rtl/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -# -# 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. -# - -include ../rules.mk - -OBJS = memory.o print.o stdlib.o string.o list.o - -.PHONY : clean - -all: rtl.a - -rtl.a: $(OBJS) - $(LD) -r -o rtl.a $(OBJS) - -memory.o: memory.c ../rtl.h - $(CC) $(FLAGS) -o memory.o -c memory.c - -print.o: print.c ../rtl.h - $(CC) $(FLAGS) -o print.o -c print.c - -stdlib.o: stdlib.c ../rtl.h - $(CC) $(FLAGS) -o stdlib.o -c stdlib.c - -string.o: string.c ../rtl.h - $(CC) $(FLAGS) -o string.o -c string.c - -list.o: list.c ../rtl.h - $(CC) $(FLAGS) -o list.o -c list.c - -clean: - - $(RM) *.o - - $(RM) *.a diff --git a/freeldr/freeldr/rules.mk b/freeldr/freeldr/rules.mk deleted file mode 100644 index 7c1f7f79caf..00000000000 --- a/freeldr/freeldr/rules.mk +++ /dev/null @@ -1,34 +0,0 @@ -# -# 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. -# - - -CC = gcc -LD = ld -AR = ar -RM = cmd /C del -CP = cmd /C copy -MAKE = make -NASM_CMD = nasm -OBJCOPY = objcopy - -# For a release build uncomment this line -#FLAGS = -Wall -nostdlib -nostdinc -fno-builtin -I./ -I../ -I../../ -O3 - -# For a debug build uncomment this line -FLAGS = -Wall -nostdlib -nostdinc -fno-builtin -I./ -I../ -I../../ -DDEBUG -O3 diff --git a/freeldr/freeldr/ui/Makefile b/freeldr/freeldr/ui/Makefile deleted file mode 100644 index d7ba4317472..00000000000 --- a/freeldr/freeldr/ui/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# 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. -# - -include ../rules.mk - -OBJS = tui.o menu.o - -.PHONY : clean - -all: ui.a - -ui.a: $(OBJS) - $(LD) -r -o ui.a $(OBJS) - -tui.o: tui.c ../ui.h - $(CC) $(FLAGS) -o tui.o -c tui.c - -menu.o: menu.c ../ui.h - $(CC) $(FLAGS) -o menu.o -c menu.c - -clean: - - $(RM) *.o - - $(RM) *.a diff --git a/freeldr/sed.exe b/freeldr/sed.exe new file mode 100644 index 0000000000000000000000000000000000000000..db6416fe9bff6df4028fbeb68e0693e48240b0bc GIT binary patch literal 46080 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 z

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 F&mZ`QBqIO- literal 0 HcmV?d00001