Document intent at no longer providing file length a priori
[profile/ivi/syslinux.git] / Makefile
index c393fd8..9fddb8a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,6 @@
-##  $Id$
 ## -----------------------------------------------------------------------
 ##
-##   Copyright 1998-2005 H. Peter Anvin - All Rights Reserved
+##   Copyright 1998-2008 H. Peter Anvin - All Rights Reserved
 ##
 ##   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
 # Main Makefile for SYSLINUX
 #
 
+# No builtin rules
+MAKEFLAGS = -r
+
+TMPFILE = $(shell mktemp /tmp/gcc_ok.XXXXXX)
+
+gcc_ok   = $(shell tmpf=$(TMPFILE); if gcc $(1) dummy.c -o $$tmpf 2>/dev/null; \
+                  then echo '$(1)'; else echo '$(2)'; fi; rm -f $$tmpf)
+
+comma   := ,
+LDHASH  := $(call gcc_ok,-Wl$(comma)--hash-style=both,)
+
 OSTYPE   = $(shell uname -msr)
 CC      = gcc
 INCLUDE  =
 CFLAGS   = -W -Wall -Os -fomit-frame-pointer -D_FILE_OFFSET_BITS=64
 PIC      = -fPIC
-LDFLAGS  = -O2 -s
+LDFLAGS  = -O2 -s $(LDHASH)
 AR      = ar
 RANLIB   = ranlib
 
-NASM    = nasm -O99
+NASM    = nasm
+NASMOPT  = -O9999
 NINCLUDE =
 BINDIR   = /usr/bin
 SBINDIR  = /sbin
 LIBDIR   = /usr/lib
 AUXDIR   = $(LIBDIR)/syslinux
+MANDIR  = /usr/man
 INCDIR   = /usr/include
 
 PERL     = perl
 
 VERSION  = $(shell cat version)
 
-.c.o:
+%.o: %.c
        $(CC) $(INCLUDE) $(CFLAGS) -c $<
 
 #
@@ -49,7 +61,7 @@ VERSION  = $(shell cat version)
 # with their own Makefiles.  Finally, there is a list of those
 # directories.
 #
-CSRC     = syslxmod.c gethostip.c
+CSRC     = gethostip.c
 NASMSRC  = $(wildcard *.asm)
 SOURCES = $(CSRC) *.h $(NASMSRC) *.inc
 
@@ -61,26 +73,33 @@ BINFILES = bootsect_bin.c ldlinux_bin.c mbr_bin.c \
 # mingw suite installed
 BTARGET  = kwdhash.gen version.gen version.h \
           ldlinux.bss ldlinux.sys ldlinux.bin \
-          pxelinux.0 mbr.bin isolinux.bin isolinux-debug.bin \
+          pxelinux.0 isolinux.bin isolinux-debug.bin \
           extlinux.bin extlinux.bss extlinux.sys
-BOBJECTS = $(BTARGET) dos/syslinux.com win32/syslinux.exe memdisk/memdisk
-BSUBDIRS = memdisk dos win32
+BOBJECTS = $(BTARGET) mbr/mbr.bin dos/syslinux.com win32/syslinux.exe \
+       memdisk/memdisk memdump/memdump.com
+# BESUBDIRS and IESUBDIRS are "early", i.e. before the root; BSUBDIRS
+# and ISUBDIRS are "late", after the root.
+BESUBDIRS = mbr
+BSUBDIRS = memdisk memdump dos win32
 ITARGET  = copybs.com gethostip mkdiskimage
 IOBJECTS = $(ITARGET) mtools/syslinux unix/syslinux extlinux/extlinux
+IESUBDIRS =
 ISUBDIRS = mtools unix extlinux sample com32
 DOCS     = COPYING NEWS README TODO BUGS *.doc sample menu com32
 OTHER    = Makefile bin2c.pl now.pl genhash.pl keywords findpatch.pl \
           keytab-lilo.pl version version.pl sys2ansi.pl \
-          ppmtolss16 lss16toppm memdisk bin2hex.pl mkdiskimage.in
+          ppmtolss16 lss16toppm memdisk bin2hex.pl mkdiskimage.in \
+          sha1pass md5pass
 OBSOLETE = pxelinux.bin
 
 # Things to install in /usr/bin
-INSTALL_BIN   =        mtools/syslinux gethostip ppmtolss16 lss16toppm
+INSTALL_BIN   =        mtools/syslinux gethostip ppmtolss16 lss16toppm \
+               sha1pass md5pass
 # Things to install in /sbin
 INSTALL_SBIN  = extlinux/extlinux
 # Things to install in /usr/lib/syslinux
 INSTALL_AUX   =        pxelinux.0 isolinux.bin isolinux-debug.bin \
-               dos/syslinux.com copybs.com memdisk/memdisk mbr.bin
+               dos/syslinux.com copybs.com memdisk/memdisk mbr/mbr.bin
 INSTALL_AUX_OPT = win32/syslinux.exe
 
 # The DATE is set on the make command line when building binaries for
@@ -100,14 +119,17 @@ MAKE    += DATE=$(DATE) HEXDATE=$(HEXDATE)
 # error every time you try to build.
 #
 
-all:   all-local
-       set -e ; for i in $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
+all:
+       set -e ; for i in $(BESUBDIRS) $(IESUBDIRS) ; do $(MAKE) -C $$i $@ ; done
        $(MAKE) all-local
+       set -e ; for i in $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
        -ls -l $(BOBJECTS) $(IOBJECTS)
 
 all-local: $(BTARGET) $(ITARGET) $(BINFILES)
 
-installer: installer-local
+installer:
+       set -e ; for i in $(IESUBDIRS); do $(MAKE) -C $$i all ; done
+       $(MAKE) installer-local
        set -e ; for i in $(ISUBDIRS); do $(MAKE) -C $$i all ; done
        -ls -l $(BOBJECTS) $(IOBJECTS)
 
@@ -122,32 +144,19 @@ version.h: version version.pl
 kwdhash.gen: keywords genhash.pl
        $(PERL) genhash.pl < keywords > kwdhash.gen
 
-ldlinux.bin: ldlinux.asm kwdhash.gen version.gen
-       $(NASM) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
-               -DMAP=$(@:.bin=.map) -l $(@:.bin=.lst) -o $@ $<
-       $(PERL) checkov.pl ldlinux.map $@
-
-pxelinux.bin: pxelinux.asm kwdhash.gen version.gen
-       $(NASM) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
-               -DMAP=$(@:.bin=.map) -l $(@:.bin=.lst) -o $@ $<
-       $(PERL) checkov.pl $(@:.bin=.map) $@
-
-isolinux.bin: isolinux.asm kwdhash.gen version.gen checksumiso.pl
-       $(NASM) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
-               -DMAP=$(@:.bin=.map) -l $(@:.bin=.lst) -o $@ $<
-       $(PERL) checkov.pl $(@:.bin=.map) $@
+# Standard rule for {isolinux,isolinux-debug}.bin
+iso%.bin: iso%.asm kwdhash.gen version.gen
+       $(NASM) $(NASMOPT) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
+               -DMAP=$(@:.bin=.map) -l $(@:.bin=.lsr) -o $@ $<
+       $(PERL) lstadjust.pl $(@:.bin=.lsr) $(@:.bin=.map) $(@:.bin=.lst)
        $(PERL) checksumiso.pl $@
-
-# Special verbose version of isolinux.bin
-isolinux-debug.bin: isolinux-debug.asm kwdhash.gen version.gen checksumiso.pl
-       $(NASM) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
-               -DMAP=$(@:.bin=.map) -l $(@:.bin=.lst) -o $@ $<
        $(PERL) checkov.pl $(@:.bin=.map) $@
-       $(PERL) checksumiso.pl $@
 
-extlinux.bin: extlinux.asm kwdhash.gen version.gen
-       $(NASM) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
-               -DMAP=$(@:.bin=.map) -l $(@:.bin=.lst) -o $@ $<
+# Standard rule for {ldlinux,pxelinux,extlinux}.bin
+%.bin: %.asm kwdhash.gen version.gen
+       $(NASM) $(NASMOPT) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
+               -DMAP=$(@:.bin=.map) -l $(@:.bin=.lsr) -o $@ $<
+       $(PERL) lstadjust.pl $(@:.bin=.lsr) $(@:.bin=.map) $(@:.bin=.lst)
        $(PERL) checkov.pl $(@:.bin=.map) $@
 
 pxelinux.0: pxelinux.bin
@@ -165,14 +174,11 @@ extlinux.bss: extlinux.bin
 extlinux.sys: extlinux.bin
        dd if=$< of=$@ bs=512 skip=1
 
-mbr.bin: mbr.asm
-       $(NASM) -f bin -l mbr.lst -o mbr.bin mbr.asm
-
-mbr_bin.c: mbr.bin bin2c.pl
+mbr_bin.c: mbr/mbr.bin bin2c.pl
        $(PERL) bin2c.pl syslinux_mbr < $< > $@
 
 copybs.com: copybs.asm
-       $(NASM) -f bin -l copybs.lst -o copybs.com copybs.asm
+       $(NASM) $(NASMOPT) -f bin -l copybs.lst -o copybs.com copybs.asm
 
 bootsect_bin.c: ldlinux.bss bin2c.pl
        $(PERL) bin2c.pl syslinux_bootsect < $< > $@
@@ -184,22 +190,13 @@ extlinux_bss_bin.c: extlinux.bss bin2c.pl
        $(PERL) bin2c.pl extlinux_bootsect < $< > $@
 
 extlinux_sys_bin.c: extlinux.sys bin2c.pl
-       $(PERL) bin2c.pl extlinux_image < $< > $@
-
-libsyslinux.a: bootsect_bin.o ldlinux_bin.o mbr_bin.o syslxmod.o
-       rm -f $@
-       $(AR) cq $@ $^
-       $(RANLIB) $@
-
-$(LIB_SO): bootsect_bin.o ldlinux_bin.o syslxmod.o
-       $(CC) $(LDFLAGS) -shared -Wl,-soname,$(LIB_SONAME) -o $@ $^
-
-gethostip.o: gethostip.c
+       $(PERL) bin2c.pl extlinux_image 512 < $< > $@
 
 gethostip: gethostip.o
+       $(CC) $(LDFLAGS) -o $@ $^
 
-mkdiskimage: mkdiskimage.in mbr.bin bin2hex.pl
-       $(PERL) bin2hex.pl < mbr.bin | cat mkdiskimage.in - > $@
+mkdiskimage: mkdiskimage.in mbr/mbr.bin bin2hex.pl
+       $(PERL) bin2hex.pl < mbr/mbr.bin | cat mkdiskimage.in - > $@
        chmod a+x $@
 
 install: installer
@@ -210,6 +207,10 @@ install: installer
        mkdir -m 755 -p $(INSTALLROOT)$(AUXDIR)
        install -m 644 -c $(INSTALL_AUX) $(INSTALLROOT)$(AUXDIR)
        -install -m 644 -c $(INSTALL_AUX_OPT) $(INSTALLROOT)$(AUXDIR)
+       mkdir -m 755 -p $(INSTALLROOT)$(MANDIR)/man1
+       install -m 644 -c man/*.1 $(INSTALLROOT)$(MANDIR)/man1
+       : mkdir -m 755 -p $(INSTALLROOT)$(MANDIR)/man8
+       : install -m 644 -c man/*.8 $(INSTALLROOT)$(MANDIR)/man8
        $(MAKE) -C com32 install
 
 install-lib: installer
@@ -218,17 +219,17 @@ install-all: install install-lib
 
 local-tidy:
        rm -f *.o *_bin.c stupid.* patch.offset
-       rm -f *.lst *.map
+       rm -f *.lsr *.lst *.map
        rm -f $(OBSOLETE)
 
 tidy: local-tidy
-       set -e ; for i in $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
+       set -e ; for i in $(BESUBDIRS) $(IESUBDIRS) $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
 
 local-clean:
        rm -f $(ITARGET)
 
 clean: local-tidy local-clean
-       set -e ; for i in $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
+       set -e ; for i in $(BESUBDIRS) $(IESUBDIRS) $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
 
 dist: tidy
        for dir in . sample memdisk ; do \
@@ -239,7 +240,7 @@ local-spotless:
        rm -f $(BTARGET) .depend *.so.*
 
 spotless: local-clean dist local-spotless
-       set -e ; for i in $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
+       set -e ; for i in $(BESUBDIRS) $(IESUBDIRS) $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done
 
 .depend:
        rm -f .depend
@@ -256,10 +257,10 @@ depend: local-depend
 # Shortcut to build unix/syslinux using klibc
 klibc:
        $(MAKE) clean
-       $(MAKE) CC=klcc ITARGET= ISUBDIRS=unix BSUBDIRS=
+       $(MAKE) CC=klcc ITARGET= ISUBDIRS='unix extlinux' BSUBDIRS=
 
 # Hook to add private Makefile targets for the maintainer.
 -include Makefile.private
 
 # Include dependencies file
--include .depend
+include .depend