Hello!

The attached patch uses per-program flags where possible.
Feel free to remove stage2 and *stage1_5 directories after applying

gcc (not ld) links stage2 now. That stage2 has just booted my Linux.

Pavel Roskin
Index: Makefile.am
===================================================================
RCS file: /usr/local/cvs/grub/Makefile.am,v
retrieving revision 1.1.1.1
retrieving revision 1.5
diff -u -r1.1.1.1 -r1.5
--- Makefile.am 1999/06/19 21:30:04     1.1.1.1
+++ Makefile.am 1999/06/23 19:04:47     1.5
@@ -1,7 +1,5 @@
-SUBDIRS = grub stage1 stage2 \
-       e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
-       docs shared_src debian
-DISTCLEANFILES = ssrcrules.mk
+SUBDIRS = shared_src stage1 grub docs debian
+
 EXTRA_DIST = BUGS
 
 # We get $(PACKAGE) and $(VERSION) from debian/changelog.
Index: configure.in
===================================================================
RCS file: /usr/local/cvs/grub/configure.in,v
retrieving revision 1.1.1.2
retrieving revision 1.7
diff -u -r1.1.1.2 -r1.7
--- configure.in        1999/06/23 16:40:28     1.1.1.2
+++ configure.in        1999/06/23 19:14:57     1.7
@@ -49,6 +49,7 @@
 
 AC_CHECK_TOOL(CC, gcc)
 AC_PROG_CC
+AC_PROG_RANLIB
 
 # Enforce coding standards.
 CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused"
@@ -69,44 +70,11 @@
 fi
 
 # Check for curses libraries.
-AC_CHECK_LIB(ncurses, getch, [LIBS="$LIBS -lncurses"
+AC_CHECK_LIB(ncurses, getch, [GRUB_LIBS="$GRUB_LIBS -lncurses"
 AC_DEFINE(HAVE_LIBCURSES)],
                [AC_CHECK_LIB(curses, getch, [LIBS="$LIBS -lcurses"
 AC_DEFINE(HAVE_LIBCURSES)])])
+AC_SUBST(GRUB_LIBS)
 
-# Create rules for our shared sources.
-AC_SUBST_FILE(SHARED_SRC_RULES)dnl
-SHARED_SRC_RULES=./ssrcrules.mk
-echo creating $SHARED_SRC_RULES
-rm -f $SHARED_SRC_RULES
-cat > $SHARED_SRC_RULES <<EOF
-# $SHARED_SRC_RULES - Rules for building objects from files in shared_src.
-# Generated automatically by configure.
-asm.o: \$(top_srcdir)/shared_src/asm.S
-       @echo '\$(COMPILE) -c \$(top_srcdir)/shared_src/asm.S'; \\
-       if test -d .deps; then \\
-         \$(COMPILE) -Wp,-MD,.deps/asm.P -c \$(top_srcdir)/shared_src/asm.S; \\
-       else \\
-         \$(COMPILE) -c \$(top_srcdir)/shared_src/asm.S; \\
-       fi
-EOF
-for f in boot common char_io cmdline disk_io gunzip fsys_ffs \
-         fsys_ext2fs fsys_fat stage1_5 stage2 bios; do
-
-  cat >> $SHARED_SRC_RULES <<EOF
-
-$f.o: \$(top_srcdir)/shared_src/$f.c
-       @echo '\$(COMPILE) -c \$(top_srcdir)/shared_src/$f.c'; \\
-       if test -d .deps; then \\
-         \$(COMPILE) -Wp,-MD,.deps/$f.P -c \$(top_srcdir)/shared_src/$f.c; \\
-       else \\
-         \$(COMPILE) -c \$(top_srcdir)/shared_src/$f.c; \\
-       fi
-
-EOF
-done
-
-AC_OUTPUT([Makefile grub/Makefile stage1/Makefile stage2/Makefile \
-       e2fs_stage1_5/Makefile fat_stage1_5/Makefile \
-       ffs_stage1_5/Makefile docs/Makefile shared_src/Makefile \
-       debian/Makefile])
+AC_OUTPUT([Makefile grub/Makefile stage1/Makefile docs/Makefile \
+       shared_src/Makefile debian/Makefile])
Index: grub/Makefile.am
===================================================================
RCS file: /usr/local/cvs/grub/grub/Makefile.am,v
retrieving revision 1.1.1.2
retrieving revision 1.5
diff -u -r1.1.1.2 -r1.5
--- grub/Makefile.am    1999/06/23 16:40:28     1.1.1.2
+++ grub/Makefile.am    1999/06/23 19:14:57     1.5
@@ -1,14 +1,8 @@
 sbin_PROGRAMS = grub
 CLEANFILES = $(EXTRA_PROGRAMS)
 
-COMPILE = $(CC) -DGRUB_UTIL=1 -fwritable-strings $(DEFS) $(INCLUDES) $(CPPFLAGS) 
$(CFLAGS)
-INCLUDES = -I$(top_srcdir)/shared_src
+AM_CFLAGS = -DGRUB_UTIL=1 -fwritable-strings -I$(srcdir)/../shared_src
 
 grub_SOURCES = main.c asmstub.c
-grub_LDADD = boot.o common.o char_io.o cmdline.o disk_io.o gunzip.o \
-       fsys_ffs.o fsys_ext2fs.o fsys_fat.o stage2.o
 
-# FIXME: Automake hackery.
-DEP_FILES = .deps/main.P .deps/asmstub.P $(wildcard .deps/*.P)
-
-@SHARED_SRC_RULES@
+grub_LDADD = ../shared_src/libgrub.a @GRUB_LIBS@
Index: shared_src/Makefile.am
===================================================================
RCS file: /usr/local/cvs/grub/shared_src/Makefile.am,v
retrieving revision 1.1.1.2
retrieving revision 1.8
diff -u -r1.1.1.2 -r1.8
--- shared_src/Makefile.am      1999/06/23 16:40:28     1.1.1.2
+++ shared_src/Makefile.am      1999/06/23 19:35:20     1.8
@@ -2,6 +2,105 @@
        fat.h filesys.h freebsd.h fs.h i386-elf.h imgact_aout.h \
        mb_header.h mb_info.h pc_slice.h shared.h smp-imps.h
 
-EXTRA_DIST = asm.S bios.c boot.c char_io.c cmdline.c common.c \
-       disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c gunzip.c \
-       smp-imps.c stage1_5.c stage2.c
+EXTRA_DIST = smp-imps.c
+
+noinst_LIBRARIES = libgrub.a
+
+pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
+pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5
+CLEANFILES = $(pkgdata_DATA) *T
+MOSTLYCLEANFILES = *.exec
+
+noinst_PROGRAMS = stage2.exec e2fs_stage1_5.exec \
+       fat_stage1_5.exec ffs_stage1_5.exec
+
+# Stage 1.5 can be installed into the first cylinder after MBR, so the
+# limit is (63 - 1) * 512 = 31744.
+MBR_SIZE_LIMIT = 31744
+FFS_SIZE_LIMIT = 7168
+
+stage2_LINK =   -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000
+
+stage2_COMPILE = -fno-builtin -nostdinc
+
+stage1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
+
+stage1_5_COMPILE = $(stage2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 \
+       -DCONFIG_FILE_ASM='.string "/boot/grub/stage2"'
+
+
+# asm.S absolutely needs to come first!
+stage2_exec_SOURCES = asm.S boot.c common.c char_io.c cmdline.c disk_io.c \
+       gunzip.c fsys_ffs.c fsys_ext2fs.c fsys_fat.c stage2.c bios.c
+
+stage2_exec_CFLAGS = $(stage2_COMPILE)
+
+stage2_exec_LDFLAGS = $(stage2_LINK)
+
+stage2: stage2.exec
+       $(OBJCOPY) -O binary stage2.exec stage2
+
+
+e2fs_stage1_5_exec_SOURCES = asm.S common.c char_io.c disk_io.c \
+       stage1_5.c fsys_ext2fs.c bios.c
+
+e2fs_stage1_5_exec_CFLAGS = $(stage1_5_COMPILE) -DFSYS_EXT2FS=1 \
+       -DNO_BLOCK_FILES=1
+
+e2fs_stage1_5_exec_LDFLAGS = $(stage1_5_LINK)
+
+e2fs_stage1_5: e2fs_stage1_5.exec
+       rm -f $@T $@
+       $(OBJCOPY) -O binary e2fs_stage1_5.exec $@T
+       @set dummy `ls -l $@T`; size=$$6; \
+       if test $$size -le $(MBR_SIZE_LIMIT); then \
+         :; \
+       else \
+         echo "WARNING: stage 1.5 is too big for boot block area ($$size > 
+$(MBR_SIZE_LIMIT))."; \
+       fi
+       mv -f $@T $@
+
+
+fat_stage1_5_exec_SOURCES = asm.S common.c char_io.c disk_io.c \
+       stage1_5.c fsys_fat.c bios.c
+
+fat_stage1_5_exec_CFLAGS = $(stage1_5_COMPILE) -DFSYS_FAT=1
+
+fat_stage1_5_exec_LDFLAGS = $(stage1_5_LINK)
+
+fat_stage1_5: fat_stage1_5.exec
+       rm -f $@T $@
+       $(OBJCOPY) -O binary fat_stage1_5.exec $@T
+       @set dummy `ls -l $@T`; size=$$6; \
+       if test $$size -le $(MBR_SIZE_LIMIT); then \
+         :; \
+       else \
+         echo "WARNING: stage 1.5 is too big for boot block area ($$size > 
+$(MBR_SIZE_LIMIT))."; \
+       fi
+       mv -f $@T $@
+
+
+ffs_stage1_5_exec_SOURCES = asm.S common.c char_io.c disk_io.c \
+       stage1_5.c fsys_ffs.c bios.c
+
+ffs_stage1_5_exec_CFLAGS = $(stage1_5_COMPILE) -DFSYS_FFS=1 \
+       -DNO_BLOCK_FILES=1
+
+ffs_stage1_5_exec_LDFLAGS = $(stage1_5_LINK)
+
+ffs_stage1_5: ffs_stage1_5.exec
+       rm -f $@T $@
+       $(OBJCOPY) -O binary ffs_stage1_5.exec $@T
+       @set dummy `ls -l $@T`; size=$$6; \
+       if test $$size -le $(FFS_SIZE_LIMIT); then \
+         :; \
+       else \
+         echo "WARNING: stage 1.5 is too big for boot block area ($$size > 
+$(FFS_SIZE_LIMIT))."; \
+       fi
+       mv -f $@T $@
+
+
+libgrub_a_SOURCES = boot.c common.c char_io.c cmdline.c disk_io.c \
+       gunzip.c fsys_ffs.c fsys_ext2fs.c fsys_fat.c stage2.c
+
+libgrub_a_CFLAGS = -DGRUB_UTIL=1 -fwritable-strings

Reply via email to