#****************************************************************************** # # mdk-stage1 - the program that will load second-stage install # # $Id$ # # Guillaume Cottenceau (gc@mandrakesoft.com) # # Copyright 2000 MandrakeSoft # # This software may be freely redistributed under the terms of the GNU # public license. # # 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. # # Portions from Erik Troan (ewt@redhat.com) Copyright 1996 Red Hat Software # #***************************************************************************** # # Currently: # # ix86 # init with minilibc # stage1 with dietlibc except some targets # # ppc # init with dietlibc # stage1 with glibc # # ia64 # init with glibc # stage1 with glibc # #***************************************************************************** PACKAGE = propagator RPM = /bin/rpm RPMSPEC = $(PACKAGE).spec VERSION = $(shell $(RPM) -q --qf '[%{VERSION} ]' --specfile $(RPMSPEC) |cut -f1 -d ' ') RELEASE = $(shell $(RPM) -q --qf '[%{RELEASE} ]' --specfile $(RPMSPEC) |cut -f1 -d ' ') TARFILE = $(PACKAGE)-$(VERSION).tar.bz2 TARDIR = $(shell $(RPM) --define 'name $(PACKAGE)' --eval %_sourcedir) METHODS = full medias network DESTDIR = BINSDIR ?= /usr/lib/propagator/bin MODDIR ?= /var/lib/propagator/modules include Makefile.common STAGE1BINS = $(METHODS:%=stage1-%) BINS = init $(STAGE1BINS) DIRS += pci-resource usb-resource DEFS = -DSPAWN_SHELL -DENABLE_USB COMPILE = $(CC) $(DEFS) $(CFLAGS) #- stage1 "loader" # i386 name is invalid to force this feature off ifeq (xi386, $(ARCH)) INITSRC = minilibc.c init.c INIT_DEFS = -DINIT_HEADERS=\"minilibc.h\" else INITSRC = init.c ifeq (ia64, $(ARCH)) INIT_DEFS = -DINIT_HEADERS=\"init-libc-headers.h\" $(GLIBC_INCLUDES) else INIT_DEFS = -DINIT_HEADERS=\"init-libc-headers.h\" $(DIETLIBC_INCLUDES) endif endif INITOBJS = $(subst .c,.o,$(INITSRC)) #- frontends NEWT_FRONTEND_SRC = newt-frontend.c GLIBC_NEWT_FRONTEND_LIBS = newt/libnewt.a slang/libslang.a DIETLIBC_NEWT_FRONTEND_LIBS = $(DIET_LIBDIR)/libnewt.a $(DIET_LIBDIR)/libslang.a STDIO_FRONTEND_SRC = stdio-frontend.c GLIBC_STDIO_FRONTEND_LIBS = DIETLIBC_STDIO_FRONTEND_LIBS = FRONTEND_OBJS = $(subst .c,.o,$($(F)_FRONTEND_SRC)) FRONTEND_LINK = $(FRONTEND_OBJS) $($(L)_$(F)_FRONTEND_LIBS) GLIBC_STAGE1_OWN_LIBS = mar/libmar.a /usr/lib/libbz2.a DIETLIBC_STAGE1_OWN_LIBS = $(DIET_LIBDIR)/libmar.a $(DIET_LIBDIR)/libbz2.a STAGE1_OWN_LIBS = $($(L)_STAGE1_OWN_LIBS) ifeq (DIETLIBC, $(L)) STAGE1_NETWORK_LIBS = $(DIET_LIBDIR)/librpc.a endif ifeq (GLIBC, $(L)) STAGE1_NETWORK_LIBS = /usr/lib/libresolv.a endif ############################################################################### # stage1 itself STAGE1SRC = stage1.c log.c tools.c modules.c probing.c mount.c automatic.c frontend-common.c MEDIASRC = cdrom.c disk.c lomount.c NETWORKSRC = network.c nfsmount.c dhcp.c url.c dns.c adsl.c ALLSRC = $(INITSRC) $(STAGE1SRC) $(MEDIASRC) $(NETWORKSRC) ############################################################################### STAGE1OBJS-MEDIA = $(subst .c,-MEDIA.o,$(STAGE1SRC) $(MEDIASRC)) MEDIA_DEFS = -DDISABLE_NETWORK -DAUTO_METHOD=\""cdrom"\" ##-DAUTO_METHOD=\""disk"\" STAGE1OBJS-NETWORK = $(subst .c,-NETWORK.o,$(STAGE1SRC) $(NETWORKSRC)) NETWORK_DEFS = -DDISABLE_CDROM -DDISABLE_DISK STAGE1OBJS-FULL = $(subst .c,-FULL.o,$(STAGE1SRC) $(MEDIASRC) $(NETWORKSRC)) USBNET_DEFS = -DENABLE_USBNET USBSTORAGE_DEFS = -DENABLE_USBSTORAGE ifeq (xi386, $(ARCH)) LDFLAGS_INIT = -static -nostdlib /usr/lib/crt1.o else ifeq (ia64, $(ARCH)) LDFLAGS_INIT = $(GLIBC_LDFLAGS_STAGE1) INIT_LIBC = $(GLIBC_LIBC) else LDFLAGS_INIT = $(DIETLIBC_LDFLAGS_STAGE1) INIT_LIBC = $(DIETLIBC_LIBC) endif endif all: version.h dirs $(BINS) dirs: @for n in . $(DIRS); do \ [ "$$n" = "." ] || make -C $$n ;\ done init: $(INITOBJS) $(INIT_LIBC) $(CC) -o $@ $^ $(LDFLAGS_INIT) $(STRIPCMD) $@ stage1-medias: $(STAGE1OBJS-MEDIA) $(STAGE1_OWN_LIBS) $(FRONTEND_LINK) $(STAGE1_LIBC) $(CC) -o $@ $^ $(LDFLAGS_STAGE1) $(STRIPCMD) $@ stage1-network: $(STAGE1OBJS-NETWORK) $(STAGE1_OWN_LIBS) $(STAGE1_NETWORK_LIBS) $(FRONTEND_LINK) $(STAGE1_LIBC) $(CC) -o $@ $^ $(LDFLAGS_STAGE1) $(STRIPCMD) $@ stage1-full: $(STAGE1OBJS-FULL) $(STAGE1_OWN_LIBS) $(STAGE1_NETWORK_LIBS) $(FRONTEND_LINK) $(STAGE1_LIBC) $(CC) -o $@ $^ $(LDFLAGS_STAGE1) $(STRIPCMD) $@ $(INITOBJS): %.o: %.c $(COMPILE) $(INIT_DEFS) -c $< $(STAGE1OBJS-MEDIA): %-MEDIA.o: %.c $(COMPILE) $(INCLUDES) $(MEDIA_DEFS) $(USBSTORAGE_DEFS) -c $< -o $@ $(STAGE1OBJS-NETWORK): %-NETWORK.o: %.c $(COMPILE) $(INCLUDES) $(NETWORK_DEFS) $(USBNET_DEFS) -c $< -o $@ $(STAGE1OBJS-FULL): %-FULL.o: %.c $(COMPILE) $(INCLUDES) $(USBNET_DEFS) $(USBSTORAGE_DEFS) -c $< -o $@ .c.o: $(COMPILE) $(INCLUDES) -c $< version.h: /etc/altlinux-release @sed 's|^ALT Linux \([^ ]\+\)\([^(]\+\)(\([^)]\+\))|\ echo \\#define VERSION \\"\2\\";echo \\#define DISTRIB_NAME \\"ALT Linux\2\1 \\(\3\\)\\"|' < $^ |sh > $@ clean: @for n in $(DIRS); do \ (cd $$n; make clean) \ done rm -f *.o .depend *.rdz *.img $(BINS) rm -f version.h .depend: $(CPP) $(CFLAGS) -M $(ALLSRC) > .depend ifeq (.depend,$(wildcard .depend)) include .depend endif *-MEDIA.o: %-MEDIA.o: %.o *-NETWORK.o: %-NETWORK.o: %.o *-FULL.o: %-FULL.o: %.o install: all mkdir -p $(DESTDIR)$(BINSDIR) install -m0755 init $(DESTDIR)$(BINSDIR) @methods='$(METHODS)'; for m in $$methods; do \ mkdir -p $(DESTDIR)$(BINSDIR)/$$m; \ install -m0755 stage1-$$m $(DESTDIR)$(BINSDIR)/$$m/stage1; \ done export: install bte: clean $(RPMSPEC) @tar c --exclude CVS --file $(TARDIR)/$(TARFILE) . cat $(RPMSPEC)