diff options
50 files changed, 552 insertions, 296 deletions
@@ -14,8 +14,89 @@ # # Main Makefile for SYSLINUX # -topdir = . + +# +# topdir is only set when we are doing a recursive make. Do a bunch of +# initialisation if it's unset since this is the first invocation. +# +ifeq ($(topdir),) + +topdir = $(CURDIR) + +# +# Because we need to build modules multiple times, e.g. for BIOS, +# efi32, efi64, we output all object and executable files to a +# separate object directory for each firmware. +# +# The output directory can be customised by setting the O=/obj/path/ +# variable when invoking make. If no value is specified the default +# directory is 'obj'. +# +ifeq ("$(origin O)", "command line") + OBJDIR := $(O) +else + OBJDIR = $(CURDIR)/obj + foo := $(shell mkdir -p $(OBJDIR) && /bin/true) +endif + +# If the output directory does not exist we bail because that is the +# least surprising thing to do. +cd-output := $(shell cd $(OBJDIR) && /bin/pwd) +$(if $(cd-output),, \ + $(error output directory "$(OBJDIR)" does not exist)) + +# +# These environment variables are exported to every invocation of +# make, +# +# 'topdir' - the top-level directory containing the Syslinux source +# 'objdir' - the top-level directory of output files +# 'MAKEDIR' - contains Makefile fragments +# +# There are also a handful of variables that are passed to each +# sub-make, +# +# SRC - source tree location of the module being compiled +# OBJ - output tree location of the module being compiled +# +# A couple of rules for writing Makefiles, +# +# - Do not use relative paths, use the above variables +# - You can write $(SRC) a lot less if you add it to VPATH +# + MAKEDIR = $(topdir)/mk +export MAKEDIR topdir + +ifeq ($(MAKECMDGOALS),) + MAKECMDGOALS += all +endif + +# +# The 'bios', 'efi32' and 'efi64' are dummy targets. Their only +# purpose is to instruct us which output directories need +# creating. Which means that we always need a *real* target, such as +# 'all', appended to the make goals. +# +firmware = bios efi32 efi64 +real-target := $(filter-out $(firmware), $(MAKECMDGOALS)) +real-firmware := $(filter $(firmware), $(MAKECMDGOALS)) + +ifeq ($(real-target),) + real-target = all +endif + +ifeq ($(real-firmware),) + real-firmware = $(firmware) +endif + +.PHONY: $(MAKECMDGOALS) +$(MAKECMDGOALS): + $(MAKE) -C $(OBJDIR) -f $(CURDIR)/Makefile SRC="$(topdir)" \ + OBJ=$(OBJDIR) objdir=$(OBJDIR) $(MAKECMDGOALS) + +else # ifeq ($(topdir),) + include $(MAKEDIR)/syslinux.mk -include $(topdir)/version.mk @@ -41,8 +122,7 @@ MODULES = memdisk/memdisk memdump/memdump.com modules/*.com \ else # memdump is BIOS specific code exclude it for EFI # FIXME: Prune other BIOS-centric modules -MODULES = memdisk/memdisk modules/*.com \ - com32/menu/*.c32 com32/modules/*.c32 com32/mboot/*.c32 \ +MODULES = com32/menu/*.c32 com32/modules/*.c32 com32/mboot/*.c32 \ com32/hdt/*.c32 com32/rosh/*.c32 com32/gfxboot/*.c32 \ com32/sysdump/*.c32 com32/lua/src/*.c32 com32/chain/*.c32 \ com32/lib/*.c32 com32/libutil/*.c32 com32/gpllib/*.c32 \ @@ -66,15 +146,19 @@ BOBJECTS = $(BTARGET) \ # Note: libinstaller is both a BSUBDIR and an ISUBDIR. It contains # files that depend only on the B phase, but may have to be regenerated # for "make installer". -ifndef EFI_BUILD -BSUBDIRS = codepage com32 lzo core memdisk modules mbr memdump gpxe sample \ - diag libinstaller dos win32 win64 dosutil efi + +ifdef EFI_BUILD + +BSUBDIRS = codepage com32 lzo core modules mbr sample efi +ISUBDIRS = efi utils + +INSTALLSUBDIRS = efi + else -# memdump is BIOS specific code exclude it for EFI -# FIXME: Prune other BIOS-centric modules -BSUBDIRS = codepage com32 lzo core memdisk modules mbr gpxe sample \ - diag libinstaller win32 win64 dosutil efi -endif + +BSUBDIRS = codepage com32 lzo core memdisk sample diag mbr memdump dos \ + modules gpxe libinstaller win32 win64 dosutil + ITARGET = IOBJECTS = $(ITARGET) \ utils/gethostip utils/isohybrid utils/mkdiskimage \ @@ -104,33 +188,117 @@ EXTBOOTINSTALL = $(MODULES) NETINSTALLABLE = core/pxelinux.0 gpxe/gpxelinux.0 \ $(MODULES) -all: - $(MAKE) all-local - set -e ; for i in $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done - -ls -l $(BOBJECTS) $(IOBJECTS) +endif # ifdef EFI_BUILD -all-local: $(BTARGET) $(ITARGET) +.PHONY: subdirs $(BSUBDIRS) $(ISUBDIRS) + +ifeq ($(HAVE_FIRMWARE),) + +firmware = bios efi32 efi64 + +# If no firmware was specified the rest of MAKECMDGOALS applies to all +# firmware. +ifeq ($(filter $(firmware),$(MAKECMDGOALS)),) +all strip tidy clean dist spotless install installer: bios efi32 efi64 + +else + +# Don't do anything for the rest of MAKECMDGOALS at this level. It +# will be handled for each of $(firmware). +strip tidy clean dist spotless install installer: + +endif + +# Convert 'make bios strip' to 'make strip', etc for rest of the Makefiles. +MAKECMDGOALS := $(filter-out $(firmware),$(MAKECMDGOALS)) +ifeq ($(MAKECMDGOALS),) + MAKECMDGOALS += all +endif + +# +# You'd think that we'd be able to use the 'define' directive to +# abstract the code for invoking make(1) in the output directory, but +# by using 'define' we lose the ability to build in parallel. +# +.PHONY: $(firmware) +bios: + @mkdir -p $(OBJ)/bios + $(MAKE) -C $(OBJ)/bios -f $(SRC)/Makefile SRC="$(SRC)" \ + objdir=$(OBJ)/bios OBJ=$(OBJ)/bios HAVE_FIRMWARE=1 \ + ARCH=i386 $(MAKECMDGOALS) + +efi32: + @mkdir -p $(OBJ)/efi32 + $(MAKE) -C $(OBJ)/efi32 -f $(SRC)/Makefile SRC="$(SRC)" \ + objdir=$(OBJ)/efi32 OBJ=$(OBJ)/efi32 HAVE_FIRMWARE=1 \ + ARCH=i386 BITS=32 EFI_BUILD=1 $(MAKECMDGOALS) + +efi64: + @mkdir -p $(OBJ)/efi64 + $(MAKE) -C $(OBJ)/efi64 -f $(SRC)/Makefile SRC="$(SRC)" \ + objdir=$(OBJ)/efi64 OBJ=$(OBJ)/efi64 HAVE_FIRMWARE=1 \ + ARCH=x86_64 BITS=64 EFI_BUILD=1 $(MAKECMDGOALS) + +else # ifeq($(HAVE_FIRMWARE),) + +all: all-local subdirs -installer: - $(MAKE) installer-local - set -e ; for i in $(ISUBDIRS); do $(MAKE) -C $$i all ; done +all-local: $(BTARGET) $(ITARGET) -ls -l $(BOBJECTS) $(IOBJECTS) +subdirs: $(BSUBDIRS) $(ISUBDIRS) + +# Note the double-colon which avoids the make warning about redefining +# a rule for libinstaller. +$(BSUBDIRS): + @mkdir -p $@ + $(MAKE) -C $@ SRC="$(SRC)/$@" OBJ="$(OBJ)/$@" \ + -f $(SRC)/$@/Makefile $(MAKECMDGOALS) + +$(ISUBDIRS): + @mkdir -p $@ + $(MAKE) -C $@ SRC="$(SRC)/$@" OBJ="$(OBJ)/$@" \ + -f $(SRC)/$@/Makefile $(MAKECMDGOALS) + +$(ITARGET): + @mkdir -p $@ + $(MAKE) -C $@ SRC="$(SRC)/$@" OBJ="$(OBJ)/$@" \ + -f $(SRC)/$@/Makefile $(MAKECMDGOALS) + +$(BINFILES): + @mkdir -p $@ + $(MAKE) -C $@ SRC="$(SRC)/$@" OBJ="$(OBJ)/$@" \ + -f $(SRC)/$@/Makefile $(MAKECMDGOALS) + +# +# List the dependencies to help out parallel builds. +dos extlinux linux mtools win32 win64: libinstaller +libinstaller: core +utils: mbr +core: com32 +efi: core + +installer: installer-local + set -e; for i in $(ISUBDIRS); \ + do $(MAKE) -C $$i SRC="$(SRC)/$$i" OBJ="$(OBJ)/$$i" \ + -f $(SRC)/$$i/Makefile all; done + installer-local: $(ITARGET) $(BINFILES) -strip: - $(MAKE) strip-local - set -e ; for i in $(ISUBDIRS); do $(MAKE) -C $$i strip ; done +strip: strip-local + set -e; for i in $(ISUBDIRS); \ + do $(MAKE) -C $$i SRC="$(SRC)/$$i" OBJ="$(OBJ)/$$i" \ + -f $(SRC)/$$i/Makefile strip; done -ls -l $(BOBJECTS) $(IOBJECTS) strip-local: -version.gen: version version.pl - $(PERL) version.pl $< $@ '%define < @' -version.h: version version.pl - $(PERL) version.pl $< $@ '#define < @' -version.mk: version version.pl - $(PERL) version.pl $< $@ '< := @' +version.gen: $(topdir)/version $(topdir)/version.pl + $(PERL) $(topdir)/version.pl $< $@ '%define < @' +version.h: $(topdir)/version $(topdir)/version.pl + $(PERL) $(topdir)/version.pl $< $@ '#define < @' +version.mk: $(topdir)/version $(topdir)/version.pl + $(PERL) $(topdir)/version.pl $< $@ '< := @' local-install: installer mkdir -m 755 -p $(INSTALLROOT)$(BINDIR) @@ -143,12 +311,24 @@ local-install: installer mkdir -m 755 -p $(INSTALLROOT)$(DIAGDIR) install -m 644 -c $(INSTALL_DIAG) $(INSTALLROOT)$(DIAGDIR) mkdir -m 755 -p $(INSTALLROOT)$(MANDIR)/man1 - install -m 644 -c man/*.1 $(INSTALLROOT)$(MANDIR)/man1 + install -m 644 -c $(topdir)/man/*.1 $(INSTALLROOT)$(MANDIR)/man1 : mkdir -m 755 -p $(INSTALLROOT)$(MANDIR)/man8 : install -m 644 -c man/*.8 $(INSTALLROOT)$(MANDIR)/man8 +ifndef EFI_BUILD install: local-install - set -e ; for i in $(INSTALLSUBDIRS) ; do $(MAKE) -C $$i $@ ; done + set -e ; for i in $(INSTALLSUBDIRS) ; \ + do $(MAKE) -C $$i SRC="$(SRC)/$$i" OBJ="$(OBJ)/$$i" \ + -f $(SRC)/$$i/Makefile $@; done +else +install: + set -e ; for i in $(INSTALLSUBDIRS) ; \ + do $(MAKE) -C $$i SRC="$(SRC)/$$i" OBJ="$(OBJ)/$$i" \ + BITS="$(BITS)" -f $(SRC)/$$i/Makefile $@; done + + mkdir -m 755 -p $(INSTALLROOT)$(AUXDIR)/efi$(BITS) + install -m 755 $(MODULES) $(INSTALLROOT)$(AUXDIR)/efi$(BITS) +endif netinstall: installer mkdir -p $(INSTALLROOT)$(TFTPBOOT) @@ -165,33 +345,32 @@ local-tidy: rm -f *.lsr *.lst *.map *.sec *.tmp rm -f $(OBSOLETE) -tidy: local-tidy - set -e ; for i in $(BESUBDIRS) $(IESUBDIRS) $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done +tidy: local-tidy $(BESUBDIRS) $(IESUBDIRS) $(BSUBDIRS) $(ISUBDIRS) local-clean: rm -f $(ITARGET) -clean: local-tidy local-clean - set -e ; for i in $(BESUBDIRS) $(IESUBDIRS) $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done +clean: local-tidy local-clean $(BESUBDIRS) $(IESUBDIRS) $(BSUBDIRS) $(ISUBDIRS) local-dist: find . \( -name '*~' -o -name '#*' -o -name core \ -o -name '.*.d' -o -name .depend \) -type f -print0 \ | xargs -0rt rm -f -dist: local-dist local-tidy - set -e ; for i in $(BESUBDIRS) $(IESUBDIRS) $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done +dist: local-dist local-tidy $(BESUBDIRS) $(IESUBDIRS) $(BSUBDIRS) $(ISUBDIRS) local-spotless: rm -f $(BTARGET) .depend *.so.* -spotless: local-clean local-dist local-spotless - set -e ; for i in $(BESUBDIRS) $(IESUBDIRS) $(BSUBDIRS) $(ISUBDIRS) ; do $(MAKE) -C $$i $@ ; done +spotless: local-clean local-dist local-spotless $(BESUBDIRS) $(IESUBDIRS) $(ISUBDIRS) $(BSUBDIRS) # Shortcut to build linux/syslinux using klibc klibc: $(MAKE) clean $(MAKE) CC=klcc ITARGET= ISUBDIRS='linux extlinux' BSUBDIRS= +endif # ifeq ($(HAVE_FIRMWARE),) # Hook to add private Makefile targets for the maintainer. -include Makefile.private + +endif # ifeq ($(topdir),) diff --git a/codepage/Makefile b/codepage/Makefile index 2a6fd126..18a590f3 100644 --- a/codepage/Makefile +++ b/codepage/Makefile @@ -1,6 +1,8 @@ +VPATH = $(SRC) PERL = perl -CPSRC = $(wildcard *.txt) -GENFILES = $(patsubst %.txt,%.cp,$(CPSRC)) +CPSRC = $(wildcard $(SRC)/*.txt) +CPOBJ = $(notdir $(CPSRC)) +GENFILES = $(patsubst %.txt,%.cp,$(CPOBJ)) .SUFFIXES: .txt .cp @@ -9,7 +11,7 @@ all: $(GENFILES) # This generates codepage files where the display and filesystem # codepages are both the same. %.cp: %.txt cptable.pl UnicodeData - $(PERL) cptable.pl UnicodeData $< $< $@ + $(PERL) $(SRC)/cptable.pl $(SRC)/UnicodeData $< $< $@ tidy: rm -f *.cp *.bin diff --git a/com32/Makefile b/com32/Makefile index c4699cfd..7ea1b01c 100644 --- a/com32/Makefile +++ b/com32/Makefile @@ -1,5 +1,22 @@ SUBDIRS = libupload tools lib elflink/ldlinux gpllib libutil modules mboot \ menu samples elflink rosh cmenu hdt gfxboot sysdump lua/src chain -all tidy dist clean spotless install: - set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d $@; done +.PHONY: subdirs $(SUBDIRS) +subdirs: $(SUBDIRS) +$(SUBDIRS): + @mkdir -p $(OBJ)/$@ + $(MAKE) -C $(OBJ)/$@ SRC="$(SRC)"/$@ OBJ="$(OBJ)"/$@/ \ + -f $(SRC)/$@/Makefile $(MAKECMDGOALS) + +all tidy dist clean spotless install: subdirs + +# Parallel dependencies +chain lua/src mboot menu: libutil gpllib +cmenu: lib libutil +elflink/ldlinux: lib +gfxboot: libutil +hdt: lib libupload cmenu gpllib libutil +modules: lib libutil gpllib +rosh: lib libutil +samples: libutil elflink/ldlinux +sysdump: libupload gpllib diff --git a/com32/chain/Makefile b/com32/chain/Makefile index 9a298fae..32385509 100644 --- a/com32/chain/Makefile +++ b/com32/chain/Makefile @@ -11,9 +11,7 @@ ## ## ----------------------------------------------------------------------- - -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk OBJS = chain.o partiter.o utility.o options.o mangle.o diff --git a/com32/cmenu/Makefile b/com32/cmenu/Makefile index beb8dd28..80fff368 100644 --- a/com32/cmenu/Makefile +++ b/com32/cmenu/Makefile @@ -18,31 +18,34 @@ NOGPL := 1 LIBS = libmenu/libmenu.c32 \ - $(com32)/libutil/libutil_com.c32 \ - $(com32)/lib/libcom32.c32 + $(objdir)/com32/libutil/libutil_com.c32 \ + $(objdir)/com32/lib/libcom32.c32 -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk -CFLAGS += -I./libmenu +CFLAGS += -I$(SRC)/libmenu -LIBMENU = libmenu/syslnx.o libmenu/com32io.o libmenu/tui.o \ - libmenu/menu.o libmenu/passwords.o libmenu/des.o libmenu/help.o \ - $(com32)/libutil/libutil_com.c32 $(com32)/lib/libcom32.c32 +LIBMENU = $(objdir)/com32/libutil/libutil_com.c32 \ + $(objdir)/com32/lib/libcom32.c32 \ + libmenu/syslnx.o libmenu/com32io.o libmenu/tui.o \ + libmenu/menu.o libmenu/passwords.o libmenu/des.o libmenu/help.o -CMENUS = $(patsubst %.c,%.c32,$(wildcard *.c)) -IMENUS = $(patsubst %.menu,%.c32,$(wildcard *.menu)) +CMENUS = $(patsubst %.c,%.c32,$(wildcard $(SRC)/*.c)) +IMENUS = $(patsubst %.menu,%.c32,$(wildcard $(SRC)/*.menu)) -MENUS = $(LIBS) $(CMENUS) $(IMENUS) +MENUS = $(LIBS) $(subst $(SRC)/,,$(CMENUS) $(IMENUS)) .SUFFIXES: .S .c .o .elf .c32 .menu .PRECIOUS: %.c %.c: %.menu adv_menu.tpl - python menugen.py --input=$< --output=$@ --template=adv_menu.tpl + python $(SRC)/menugen.py --input=$< --output=$@ --template=$(SRC)/adv_menu.tpl -all: menus +all: makeoutputdirs menus + +makeoutputdirs: + @mkdir -p $(OBJ)/libmenu libmenu/libmenu.c32: $(LIBMENU) $(LD) -shared $(LDFLAGS) -o $@ $^ diff --git a/com32/elflink/ldlinux/Makefile b/com32/elflink/ldlinux/Makefile index dc48ca97..58fc9c94 100644 --- a/com32/elflink/ldlinux/Makefile +++ b/com32/elflink/ldlinux/Makefile @@ -10,18 +10,19 @@ ## ## ----------------------------------------------------------------------- -topdir = ../../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk CFLAGS += -I$(topdir)/core/elflink -I$(topdir)/core/include -LIBS = --whole-archive $(com32)/lib/libcom32min.a +LIBS = --whole-archive $(objdir)/com32/lib/libcom32min.a + +OBJS = ldlinux.o cli.o readconfig.o refstr.o colors.o getadv.o adv.o \ + execute.o chainboot.o kernel.o get_key.o advwrite.o setadv.o \ + eprintf.o loadhigh.o all: ldlinux.c32 ldlinux_lnx.a -ldlinux.c32 : ldlinux.o cli.o readconfig.o refstr.o colors.o getadv.o \ - adv.o execute.o chainboot.o kernel.o get_key.o \ - advwrite.o setadv.o eprintf.o loadhigh.o +ldlinux.c32 : $(OBJS) $(LD) $(LDFLAGS) -o $@ $^ $(LIBS) LNXLIBOBJS = get_key.lo diff --git a/com32/gfxboot/Makefile b/com32/gfxboot/Makefile index a2420c42..98d6a032 100644 --- a/com32/gfxboot/Makefile +++ b/com32/gfxboot/Makefile @@ -11,15 +11,16 @@ ## ## ----------------------------------------------------------------------- -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk MODULES = gfxboot.c32 all: $(MODULES) -gfxboot.c32 : gfxboot.o realmode_callback.o $(LIBS) $(C_LIBS) +OBJS = gfxboot.o realmode_callback.o + +gfxboot.c32 : $(OBJS) $(LIBS) $(C_LIBS) $(LD) $(LDFLAGS) -o $@ $^ realmode_callback.o: realmode_callback.asm diff --git a/com32/gpllib/Makefile b/com32/gpllib/Makefile index 4f41ca8b..3e2bd03d 100644 --- a/com32/gpllib/Makefile +++ b/com32/gpllib/Makefile @@ -3,14 +3,12 @@ # # Include configuration rules -topdir = ../.. -MAKEDIR = $(topdir)/mk include $(MAKEDIR)/lib.mk -REQFLAGS += -I../gplinclude -I../gplinclude/zzjson +REQFLAGS += -I$(SRC)/../gplinclude -I$(SRC)/../gplinclude/zzjson -GPLDIRS := . disk dmi vpd acpi zzjson -LIBOBJS := $(foreach dir,$(GPLDIRS),$(patsubst %.c,%.o,$(wildcard $(dir)/*.c))) +GPLDIRS := $(SRC) $(addprefix $(SRC)/,disk dmi vpd acpi zzjson) +LIBOBJS := $(subst $(SRC)/,,$(foreach dir,$(GPLDIRS),$(patsubst %.c,%.o,$(wildcard $(dir)/*.c)))) BINDIR = /usr/bin LIBDIR = /usr/lib @@ -19,7 +17,11 @@ AUXDIR = $(DATADIR)/syslinux INCDIR = /usr/include COM32DIR = $(AUXDIR)/com32 -all: libcom32gpl.c32 +all: makeoutputdirs libcom32gpl.c32 + +makeoutputdirs: + @mkdir -p $(foreach b, \ + $(addprefix $(OBJ),$(sort $(dir $(LIBOBJS)))),$(b)) libcom32gpl.c32 : $(LIBOBJS) $(LD) -shared $(LDFLAGS) -o $@ $^ @@ -38,6 +40,6 @@ install: all mkdir -m 755 -p $(INSTALLROOT)$(COM32DIR) install -m 644 libcom32gpl.c32 $(INSTALLROOT)$(COM32DIR) mkdir -p $(INSTALLROOT)$(COM32DIR)/include/ - cp -r ../gplinclude $(INSTALLROOT)$(COM32DIR)/include/ + cp -r $(SRC)/../gplinclude $(INSTALLROOT)$(COM32DIR)/include/ -include .*.d */.*.d */*/.*.d diff --git a/com32/hdt/Makefile b/com32/hdt/Makefile index ff0fa2e2..386c7472 100644 --- a/com32/hdt/Makefile +++ b/com32/hdt/Makefile @@ -15,20 +15,20 @@ ## Hardware Detection Tool ## -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk -LIBS = ../libupload/libcom32upload.a -C_LIBS += $(com32)/cmenu/libmenu/libmenu.c32 \ - $(com32)/libutil/libutil_com.c32 \ - $(com32)/lib/libcom32.c32 $(com32)/gpllib/libcom32gpl.c32 +LIBS = $(objdir)/com32/libupload/libcom32upload.a +C_LIBS += $(objdir)/com32/cmenu/libmenu/libmenu.c32 \ + $(objdir)/com32/libutil/libutil_com.c32 \ + $(objdir)/com32/lib/libcom32.c32 \ + $(objdir)/com32/gpllib/libcom32gpl.c32 CFLAGS += -I$(com32)/cmenu/libmenu -I$(com32) MODULES = hdt.c32 TESTFILES = -OBJS = $(patsubst %.c,%.o,$(wildcard *.c)) +OBJS = $(subst $(SRC)/,,$(patsubst %.c,%.o,$(wildcard $(SRC)/*.c))) VERSION = $(shell $(SED) -n 's/\#define VERSION \"\(.*\)\"/\1/p' hdt.h) CODENAME = $(shell $(SED) -n 's/\#define CODENAME \"\(.*\)\"/\1/p' hdt.h) NODASH_VERSION = $(shell echo $(VERSION) | $(SED) -e 's/-/_/g' | $(SED) -e 's/\./_/g') diff --git a/com32/lib/Makefile b/com32/lib/Makefile index 705feb3f..eb0d6124 100644 --- a/com32/lib/Makefile +++ b/com32/lib/Makefile @@ -4,8 +4,7 @@ # Include configuration rules NOGPL := 1 -topdir = ../../ -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/lib.mk ## OPTIONAL OBJECTS, AVAILABLE AS DYNAMIC LINKED MODULES @@ -77,8 +76,7 @@ DYNLIBOBJS = \ $(DYNENTRY_OBJS) -LIBOBJS = \ - $(DYNLIBOBJS) +LIBOBJS = $(DYNLIBOBJS) BINDIR = /usr/bin LIBDIR = /usr/lib @@ -87,7 +85,11 @@ AUXDIR = $(DATADIR)/syslinux INCDIR = /usr/include COM32DIR = $(AUXDIR)/com32 -all: libcom32.c32 libcom32min.a libcom32core.a +all: makeoutputdirs libcom32.c32 libcom32min.a libcom32core.a + +makeoutputdirs: + @mkdir -p $(foreach b, \ + $(addprefix $(OBJ)/,$(sort $(dir $(LIBOBJS) $(MINLIBOBJS) $(CORELIBOBJS)))),$(b)) libcom32.c32 : $(LIBOBJS) rm -f $@ @@ -114,9 +116,9 @@ spotless: clean install: all mkdir -m 755 -p $(INSTALLROOT)$(COM32DIR) - install -m 644 com32.ld $(INSTALLROOT)$(COM32DIR) + install -m 644 $(SRC)/com32.ld $(INSTALLROOT)$(COM32DIR) -rm -rf $(INSTALLROOT)$(COM32DIR)/include - cp -r ../include $(INSTALLROOT)$(COM32DIR) + cp -r $(SRC)/../include $(INSTALLROOT)$(COM32DIR) # These files are performance critical, and doesn't compile well with -Os #FIXME: determine if drawtxt.c is really EFI-dependent diff --git a/com32/lib/syslinux/version.c b/com32/lib/syslinux/version.c index 1cd2efd3..6f0554d5 100644 --- a/com32/lib/syslinux/version.c +++ b/com32/lib/syslinux/version.c @@ -28,7 +28,7 @@ #include <syslinux/config.h> #include <klibc/compiler.h> #include <core.h> -#include <../../../version.h> +#include <version.h> struct syslinux_version __syslinux_version; diff --git a/com32/libupload/Makefile b/com32/libupload/Makefile index 83053350..f9440c57 100644 --- a/com32/libupload/Makefile +++ b/com32/libupload/Makefile @@ -1,12 +1,10 @@ # Include configuration rules -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/com32.mk -REQFLAGS += -I./ +REQFLAGS += -I$(SRC) -SUBDIRS := . -LIBOBJS := $(foreach dir,$(SUBDIRS),$(patsubst %.c,%.o,$(wildcard $(dir)/*.c))) +LIBOBJS := $(notdir $(patsubst %.c,%.o,$(wildcard $(SRC)/*.c))) BINDIR = /usr/bin LIBDIR = /usr/lib @@ -34,6 +32,6 @@ install: all mkdir -m 755 -p $(INSTALLROOT)$(COM32DIR) install -m 644 libcom32upload.a $(INSTALLROOT)$(COM32DIR) mkdir -p $(INSTALLROOT)$(COM32DIR)/include/ - cp -r *.h $(INSTALLROOT)$(COM32DIR)/include/ + cp -r $(SRC)/*.h $(INSTALLROOT)$(COM32DIR)/include/ -include .*.d */.*.d */*/.*.d diff --git a/com32/libutil/Makefile b/com32/libutil/Makefile index 93c0c11c..535b4aba 100644 --- a/com32/libutil/Makefile +++ b/com32/libutil/Makefile @@ -29,8 +29,7 @@ ## Utility companion library for the COM32 library ## -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk LIBOBJS = ansiline.o ansiraw.o keyname.o \ diff --git a/com32/lua/src/Makefile b/com32/lua/src/Makefile index 01d1f81c..70a7e808 100644 --- a/com32/lua/src/Makefile +++ b/com32/lua/src/Makefile @@ -15,8 +15,7 @@ ## Lua Makefile ## -topdir = ../../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk LNXLIBS = diff --git a/com32/mboot/Makefile b/com32/mboot/Makefile index 02e9f49e..a3f61ba8 100644 --- a/com32/mboot/Makefile +++ b/com32/mboot/Makefile @@ -15,11 +15,10 @@ ## Multiboot module ## -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk -LNXLIBS = ../libutil/libutil_lnx.a +LNXLIBS = $(objdir)/com32/libutil/libutil_lnx.a MODULES = mboot.c32 TESTFILES = diff --git a/com32/menu/Makefile b/com32/menu/Makefile index 2096b4c4..9f7a0e46 100644 --- a/com32/menu/Makefile +++ b/com32/menu/Makefile @@ -14,26 +14,19 @@ ## Simple menu system ## -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk -LNXLIBS = ../libutil/libutil_lnx.a +LNXLIBS = $(objdir)/com32/libutil/libutil_lnx.a MODULES = menu.c32 vesamenu.c32 TESTFILES = -COMMONOBJS = menumain.o readconfig.o passwd.o drain.o printmsg.o colors.o \ - background.o refstr.o +COMMONOBJS = menumain.o readconfig.o passwd.o drain.o \ + printmsg.o colors.o background.o refstr.o all: $(MODULES) $(TESTFILES) -menu.c32 : menu.o $(COMMONOBJS) $(C_LIBS) - $(LD) $(LDFLAGS) -o $@ $^ - -vesamenu.c32 : vesamenu.o $(COMMONOBJS) $(C_LIBS) - $(LD) $(LDFLAGS) -o $@ $^ - vesamenu.c32: vesamenu.o $(COMMONOBJS) $(C_LIBS) $(LD) $(LDFLAGS) -o $@ $^ diff --git a/com32/modules/Makefile b/com32/modules/Makefile index 8f5b7692..392c720f 100644 --- a/com32/modules/Makefile +++ b/com32/modules/Makefile @@ -15,11 +15,11 @@ ## COM32 standard modules ## -LIBS = $(com32)/gpllib/libcom32gpl.c32 $(com32)/lib/libcom32.c32 \ - $(com32)/libutil/libutil_com.c32 +LIBS = $(objdir)/com32/gpllib/libcom32gpl.c32 \ + $(objdir)/com32/lib/libcom32.c32 \ + $(objdir)/com32/libutil/libutil_com.c32 -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk MODULES = config.c32 ethersel.c32 dmitest.c32 cpuidtest.c32 \ @@ -37,7 +37,7 @@ all: $(MODULES) $(TESTFILES) dmitest.o: dmitest.c $(CC) $(CFLAGS) $(GPLINCLUDE) -c -o $@ $< -dmitest.c32 : dmi_utils.o dmitest.o $(GPLLIB) $(LIBS) $(C_LIBS) +dmitest.c32 : dmi_utils.o dmitest.o $(GPLLIB) $(LIBS) $(C_LIBS) $(LD) $(LDFLAGS) -o $@ $^ tidy dist: diff --git a/com32/rosh/Makefile b/com32/rosh/Makefile index 309dde43..a4c0bc28 100644 --- a/com32/rosh/Makefile +++ b/com32/rosh/Makefile @@ -16,10 +16,10 @@ ## ROSH Read Only Shell ## -LIBS = $(com32)/libutil/libutil_com.c32 $(com32)/lib/libcom32.c32 +LIBS = $(objdir)/com32/libutil/libutil_com.c32 \ + $(objdir)/com32/lib/libcom32.c32 -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/rosh.mk # from com32/sysdump/Makefile diff --git a/com32/rosh/rosh.c b/com32/rosh/rosh.c index 68dad3f3..8198a2ba 100644 --- a/com32/rosh/rosh.c +++ b/com32/rosh/rosh.c @@ -37,7 +37,7 @@ * debugging enabled; Comment to remove. */ #include "rosh.h" -#include "../../version.h" +#include "version.h" #define APP_LONGNAME "Read-Only Shell" #define APP_NAME "rosh" diff --git a/com32/samples/Makefile b/com32/samples/Makefile index c7abaddb..ca04f644 100644 --- a/com32/samples/Makefile +++ b/com32/samples/Makefile @@ -14,17 +14,16 @@ ## samples for syslinux users ## -LIBS = $(com32)/libutil/libutil_com.c32 +LIBS = $(objdir)/com32/libutil/libutil_com.c32 -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk all: hello.c32 resolv.c32 serialinfo.c32 \ - localboot.c32 \ - fancyhello.c32 fancyhello.lnx \ - keytest.c32 keytest.lnx \ - advdump.c32 entrydump.c32 + localboot.c32 \ + fancyhello.c32 fancyhello.lnx \ + keytest.c32 keytest.lnx \ + advdump.c32 entrydump.c32 tidy dist: rm -f *.o *.lo *.a *.lst *.elf .*.d *.tmp diff --git a/com32/sysdump/Makefile b/com32/sysdump/Makefile index 8763b3c8..dca5d717 100644 --- a/com32/sysdump/Makefile +++ b/com32/sysdump/Makefile @@ -15,21 +15,20 @@ ## Simple menu system ## -topdir = ../.. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/elf.mk -include $(topdir)/version.mk -LIBS = ../libupload/libcom32upload.a -LNXLIBS = ../libutil/libutil_lnx.a +LIBS = $(objdir)/com32/libupload/libcom32upload.a +LNXLIBS = $(objdir)/com32/libutil/libutil_lnx.a CFLAGS += -I$(com32) -I$(topdir) MODULES = sysdump.c32 TESTFILES = -SRCS = $(wildcard *.c) -OBJS = $(patsubst %.c,%.o,$(SRCS)) +SRCS = $(wildcard $(SRC)/*.c) +OBJS = $(subst $(SRC)/,,$(patsubst %.c,%.o,$(SRCS))) # The DATE is set on the make command line when building binaries for # official release. Otherwise, substitute a hex string that is pretty much diff --git a/com32/tools/Makefile b/com32/tools/Makefile index 0161baf1..9c0ea708 100644 --- a/com32/tools/Makefile +++ b/com32/tools/Makefile @@ -10,12 +10,12 @@ ## ## ----------------------------------------------------------------------- -MAKEDIR = ../../mk +VPATH = $(SRC) include $(MAKEDIR)/build.mk BINS = relocs -INCLUDES += -I./include +INCLUDES += -I$(SRC)/include all : $(BINS) diff --git a/core/Makefile b/core/Makefile index 1f68da67..0276f312 100644 --- a/core/Makefile +++ b/core/Makefile @@ -15,17 +15,22 @@ # Makefile for the SYSLINUX core # +VPATH = $(SRC) + # No builtin rules MAKEFLAGS += -r MAKE += -r -topdir = .. -MAKEDIR = $(topdir)/mk +ifdef EFI_BUILD +include $(MAKEDIR)/lib.mk +include $(MAKEDIR)/efi.mk +else include $(MAKEDIR)/embedded.mk --include $(topdir)/version.mk +-include $(objdir)/version.mk +endif OPTFLAGS = -INCLUDES = -I./include -I$(com32)/include -I$(com32)/include/sys -I$(com32)/lib +INCLUDES = -I$(SRC)/include -I$(com32)/include -I$(com32)/include/sys -I$(com32)/lib # This is very similar to cp437; technically it's for Norway and Denmark, # but it's unlikely the characters that are different will be used in @@ -38,29 +43,29 @@ BTARGET = kwdhash.gen \ isolinux.bin isolinux-debug.bin pxelinux.0 # All primary source files for the main syslinux files -NASMSRC := $(wildcard *.asm) -NASMHDR := $(wildcard *.inc) -CSRC := $(wildcard *.c */*.c */*/*.c) -SSRC := $(wildcard *.S */*.S */*/*.S) -CHDR := $(wildcard *.h */*.h */*/*.h) +NASMSRC := $(wildcard $(SRC)/*.asm) +NASMHDR := $(wildcard $(SRC)/*.inc) +CSRC := $(wildcard $(SRC)/*.c $(SRC)/*/*.c $(SRC)/*/*/*.c) +SSRC := $(wildcard $(SRC)/*.S $(SRC)/*/*.S $(SRC)/*/*/*.S) +CHDR := $(wildcard $(SRC)/*.h $(SRC)/*/*.h $(SRC)/*/*/*.h) OTHERSRC := keywords ALLSRC = $(NASMSRC) $(NASMHDR) $(CSRC) $(SSRC) $(CHDR) $(OTHERSRC) -COBJ := $(patsubst %.c,%.o,$(CSRC)) -SOBJ := $(patsubst %.S,%.o,$(SSRC)) +COBJ := $(subst $(SRC)/,,$(patsubst %.c,%.o,$(CSRC))) +SOBJ := $(subst $(SRC)/,,$(patsubst %.S,%.o,$(SSRC))) # Don't include derivative-specific objects -COBJS = $(filter-out rawcon.o plaincon.o pxelinux-c.o ldlinux-c.o isolinux-c.o,$(COBJ)) +COBJS = $(filter-out %rawcon.o %plaincon.o %pxelinux-c.o %ldlinux-c.o %isolinux-c.o,$(COBJ)) LIB = libcom32.a -LIBS = $(LIB) --whole-archive $(com32)/lib/libcom32core.a +LIBS = $(LIB) --whole-archive $(objdir)/com32/lib/libcom32core.a LIBDEP = $(filter-out -% %start%,$(LIBS)) LIBOBJS = $(COBJS) $(SOBJ) NASMDEBUG = -g -F dwarf NASMOPT += $(NASMDEBUG) -PREPCORE = ../lzo/prepcore +PREPCORE = $(OBJ)/../lzo/prepcore CFLAGS += -D__SYSLINUX_CORE__ @@ -68,10 +73,10 @@ CFLAGS += -D__SYSLINUX_CORE__ # official release. Otherwise, substitute a hex string that is pretty much # guaranteed to be unique to be unique from build to build. ifndef HEXDATE -HEXDATE := $(shell $(PERL) ../now.pl $(SRCS)) +HEXDATE := $(shell $(PERL) $(SRC)/../now.pl $(SRCS)) endif ifndef DATE -DATE := $(shell sh ../gen-id.sh $(VERSION) $(HEXDATE)) +DATE := $(shell sh $(SRC)/../gen-id.sh $(VERSION) $(HEXDATE)) endif # Set up the NASM and LD options for the architecture @@ -87,10 +92,17 @@ ifeq ($(ARCH),x86_64) LD_PIE = endif -all: $(BTARGET) clean +ifdef EFI_BUILD +all: makeoutputdirs $(filter-out %bios.o,$(COBJS)) codepage.o +else +all: makeoutputdirs $(BTARGET) +endif + +makeoutputdirs: + @mkdir -p $(sort $(dir $(COBJ) $(SOBJ))) kwdhash.gen: keywords genhash.pl - $(PERL) genhash.pl < keywords > kwdhash.gen + $(PERL) $(SRC)/genhash.pl < $(SRC)/keywords > $(OBJ)/kwdhash.gen .PRECIOUS: %.elf @@ -98,25 +110,27 @@ kwdhash.gen: keywords genhash.pl $(OBJCOPY) -O binary -S $< $(@:.bin=.raw) # GNU make 3.82 gets confused by the first form -.PRECIOUS: %.raw +.PRECIOUS: $(OBJ)/%.raw %.bin: %.raw $(PREPCORE) $(PREPCORE) $< $@ -%.o: %.asm kwdhash.gen ../version.gen +%.o: %.asm kwdhash.gen $(OBJ)/../version.gen $(NASM) -f $(NASM_ELF) $(NASMOPT) -DDATE_STR="'$(DATE)'" \ -DHEXDATE="$(HEXDATE)" \ -D$(ARCH) \ - -l $(@:.o=.lsr) -o $@ -MP -MD .$@.d $< + -I$(SRC)/ \ + -l $(@:.o=.lsr) -o $@ -MP -MD $(dir $@).$(notdir $@).d $< AUXLIBS = libisolinux.a libisolinux-debug.a libldlinux.a libpxelinux.a +LDSCRIPT = $(SRC)/$(ARCH)/syslinux.ld -%.elf: %.o $(LIBDEP) $(ARCH)/syslinux.ld $(AUXLIBS) - $(LD) $(LDFLAGS) -Bsymbolic $(LD_PIE) -E --hash-style=gnu -T $(ARCH)/syslinux.ld -M -o $@ $< \ - --start-group $(LIBS) lib$(patsubst %.elf,%.a,$@) --end-group \ +%.elf: %.o $(LIBDEP) $(LDSCRIPT) $(AUXLIBS) + $(LD) $(LDFLAGS) -Bsymbolic $(LD_PIE) -E --hash-style=gnu -T $(LDSCRIPT) -M -o $@ $< \ + --start-group $(LIBS) $(subst $(*F).elf,lib$(*F).a,$@) --end-group \ > $(@:.elf=.map) $(OBJDUMP) -h $@ > $(@:.elf=.sec) - $(PERL) lstadjust.pl $(@:.elf=.lsr) $(@:.elf=.sec) $(@:.elf=.lst) + $(PERL) $(SRC)/lstadjust.pl $(@:.elf=.lsr) $(@:.elf=.sec) $(@:.elf=.lst) libisolinux.a: rawcon.o isolinux-c.o rm -f $@ @@ -150,7 +164,7 @@ ldlinux.bss: ldlinux.bin ldlinux.sys: ldlinux.bin dd if=$< of=$@ bs=512 skip=2 -codepage.cp: ../codepage/$(CODEPAGE).cp +codepage.cp: $(OBJ)/../codepage/$(CODEPAGE).cp cp -f $< $@ codepage.o: codepage.S codepage.cp diff --git a/diag/Makefile b/diag/Makefile index 969acbb3..e3353753 100644 --- a/diag/Makefile +++ b/diag/Makefile @@ -1,4 +1,7 @@ SUBDIRS = mbr geodsp all tidy dist clean spotless install: - set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d $@; done + @mkdir -p $(addprefix $(OBJ)/,$(SUBDIRS)) + set -e; for d in $(SUBDIRS); \ + do $(MAKE) -C $(OBJ)/$$d -f $(SRC)/$$d/Makefile \ + SRC="$(SRC)"/$$d OBJ="$(OBJ)"/$$d $@; done diff --git a/diag/geodsp/Makefile b/diag/geodsp/Makefile index 55160859..1217c9cc 100644 --- a/diag/geodsp/Makefile +++ b/diag/geodsp/Makefile @@ -18,15 +18,14 @@ # Makefile for the SYSLINUX geometry display for diagnostics # -topdir = ../.. -MAKEDIR = $(topdir)/mk include $(MAKEDIR)/embedded.mk coredir = $(topdir)/core +VPATH = $(SRC) BTARGET = geodsp1s.bin geodspms.bin \ geodsp1s.img.xz geodspms.img.xz -NASMOPT = -i $(coredir)/ -Ox -f bin +NASMOPT = -i $(coredir)/ -i $(SRC)/ -Ox -f bin NASMOPT += -w+orphan-labels CFLAGS = -g -O @@ -34,10 +33,10 @@ all: $(BTARGET) # Higher compression levels result in larger files %.img.xz: %.bin mk-lba-img.pl - $(PERL) mk-lba-img $< | $(XZ) -0 > $@ || ( rm -f $@ ; false ) + $(PERL) $(SRC)/mk-lba-img $< | $(XZ) -0 > $@ || ( rm -f $@ ; false ) %.img.gz: %.bin mk-lba-img.pl - $(PERL) mk-lba-img $< | $(GZIPPROG) -9 > $@ || ( rm -f $@ ; false ) + $(PERL) $(SRC)/mk-lba-img $< | $(GZIPPROG) -9 > $@ || ( rm -f $@ ; false ) # in case someone really wants these without needing a decompressor %.img: %.bin mk-lba-img.pl diff --git a/diag/mbr/Makefile b/diag/mbr/Makefile index f8582053..5b7153c9 100644 --- a/diag/mbr/Makefile +++ b/diag/mbr/Makefile @@ -15,10 +15,9 @@ # Makefile for MBR # -topdir = ../.. mbrdir = $(topdir)/mbr -MAKEDIR = $(topdir)/mk include $(MAKEDIR)/embedded.mk +VPATH = $(SRC) all: handoff.bin diff --git a/doc/building.txt b/doc/building.txt new file mode 100644 index 00000000..d0f50680 --- /dev/null +++ b/doc/building.txt @@ -0,0 +1,40 @@ + Building Syslinux + +From Syslinux 6.0 onwards there is support for three different +firmware backends, BIOS, 32-bit EFI and 64-bit EFI. To allow users the +flexibility to build only the firmware they need the Syslinux make +infrastructure has become more complex. + +The Syslinux make infrastructure understands the following syntax, + + make [firmware[,firwmware]] [target[,target]] + +If no firmware is specified then any targets will be applied to all +three firmware backends. If no target is specified then the 'all' +target is implicitly built. + +For example, to build the installers for BIOS, 32-bit EFI and 64-bit +EFI type, + + make installer + +TO build the BIOS and 64-bit EFI installers type, + + make bios efi64 installer + +To delete all object files and build the installer for 32-bit EFI +type, + + make efi32 spotless installer + + + ++++ THE OBJECT DIRECTORY ++++ + +A custom top-level object directory can be specified on the make +command-line by using the O= variable, e.g. + + make O=/tmp/syslinux-obj efi32 + +will build the 32-bit object files under /tmp/syslinux-obj/efi32. If +no object directory is specified then object files will be written to +an 'obj' directory in the top-level of the Syslinux source. diff --git a/dos/Makefile b/dos/Makefile index f9420084..1371205e 100644 --- a/dos/Makefile +++ b/dos/Makefile @@ -14,17 +14,17 @@ ## MS-DOS FAT installer ## -topdir = .. -MAKEDIR = $(topdir)/mk include $(MAKEDIR)/embedded.mk CFLAGS += -D__MSDOS__ # CFLAGS += -DDEBUG -LDFLAGS = -T dosexe.ld +LDFLAGS = -T $(SRC)/dosexe.ld OPTFLAGS = -g INCLUDES = -include code16.h -nostdinc -iwithprefix include \ - -I. -I.. -I../libfat -I ../libinstaller -I ../libinstaller/getopt + -I$(SRC) -I$(SRC)/.. -I$(SRC)/../libfat \ + -I $(SRC)/../libinstaller -I $(SRC)/../libinstaller/getopt \ + -I$(objdir) SRCS = syslinux.c \ ../libinstaller/fs.c \ @@ -34,14 +34,14 @@ SRCS = syslinux.c \ ../libinstaller/getopt/getopt_long.c \ ../libinstaller/bootsect_bin.c \ ../libinstaller/mbr_bin.c \ - $(wildcard ../libfat/*.c) + $(wildcard $(SRC)/../libfat/*.c) OBJS = header.o crt0.o ldlinux.o \ $(patsubst %.c,%.o,$(notdir $(SRCS))) LIBOBJS = int2526.o conio.o memcpy.o memset.o memmove.o skipatou.o atou.o \ malloc.o free.o getopt_long.o getsetsl.o strchr.o strtoul.o \ strntoumax.o argv.o printf.o __divdi3.o __udivmoddi4.o -VPATH = .:../libfat:../libinstaller:../libinstaller/getopt +VPATH = $(SRC):$(SRC)/../libfat:$(SRC)/../libinstaller:$(SRC)/../libinstaller/getopt:$(OBJ)/../libinstaller TARGETS = syslinux.com @@ -74,6 +74,6 @@ syslinux.com: syslinux.elf %.com: %.asm $(NASM) $(NASMOPT) -f bin -o $@ -MP -MD .$@.d -l $*.lst $< -ldlinux.o: ldlinux.S ../core/ldlinux.sys +ldlinux.o: ldlinux.S $(OBJ)/../core/ldlinux.sys -include .*.d *.tmp diff --git a/dosutil/Makefile b/dosutil/Makefile index 6bce6248..9dc88d1f 100644 --- a/dosutil/Makefile +++ b/dosutil/Makefile @@ -1,8 +1,7 @@ # # OpenWatcom compile and link utility # -topdir = .. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/syslinux.mk WCL = wcl @@ -15,6 +14,8 @@ NASMOPT = -Ox WCTARGETS = mdiskchk.com NSTARGETS = eltorito.sys copybs.com +WCOBJS = $(addprefix $(SRC)/,$(WCTARGETS)) +NSOBJS = $(addprefix $(OBJ)/,$(NSTARGETS)) TARGETS = $(WCTARGETS) $(NSTARGETS) %.obj: %.c @@ -58,4 +59,5 @@ installer: all install: installer mkdir -m 755 -p $(INSTALLROOT)$(AUXDIR)/dosutil - install -m 644 $(TARGETS) $(INSTALLROOT)$(AUXDIR)/dosutil + install -m 644 $(WCOBJS) $(INSTALLROOT)$(AUXDIR)/dosutil + install -m 644 $(NSOBJS) $(INSTALLROOT)$(AUXDIR)/dosutil diff --git a/efi/Makefile b/efi/Makefile index 19c1a4db..1cb9361d 100644 --- a/efi/Makefile +++ b/efi/Makefile @@ -10,26 +10,23 @@ ## ## ----------------------------------------------------------------------- -topdir = .. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/lib.mk include $(MAKEDIR)/efi.mk CORE_CSRC := $(wildcard $(core)/*.c $(core)/*/*.c $(core)/*/*/*.c) -CORE_COBJ := $(patsubst %.c,%.o,$(CORE_CSRC)) +CORE_COBJ := $(subst $(core),$(OBJ)/../core/,$(patsubst %.c,%.o,$(CORE_CSRC))) # Don't include console objects -CORE_OBJS = $(filter-out $(core)/hello.o $(core)/rawcon.o \ - $(core)/plaincon.o $(core)/strcasecmp.o $(core)/bios.o \ - $(core)/fs/diskio_bios.o $(core)/ldlinux-c.o $(core)/isolinux-c.o \ - $(core)/pxelinux-c.o,$(CORE_COBJ)) -LIB_OBJS = $(addprefix $(com32)/lib/,$(CORELIBOBJS)) +CORE_OBJS = $(filter-out %hello.o %rawcon.o %plaincon.o %strcasecmp.o %bios.o \ + %diskio_bios.o %ldlinux-c.o %isolinux-c.o %pxelinux-c.o,$(CORE_COBJ)) -CSRC = $(wildcard *.c) -OBJ = $(patsubst %.c,%.o,$(CSRC)) -OBJS = $(filter-out wrapper.o,$(OBJ)) +LIB_OBJS = $(addprefix $(objdir)/com32/lib/,$(CORELIBOBJS)) -OBJS += $(core)/codepage.o +CSRC = $(wildcard $(SRC)/*.c) +OBJS = $(subst $(SRC)/,,$(filter-out %wrapper.o, $(patsubst %.c,%.o,$(CSRC)))) + +OBJS += $(objdir)/core/codepage.o # The targets to build in this directory BTARGET = syslinux.efi @@ -49,14 +46,20 @@ wrapper: wrapper.c # # Build the wrapper app and wrap our .so to produce a .efi syslinux.efi: syslinux.so wrapper - ./wrapper syslinux.so $@ + $(OBJ)/wrapper syslinux.so $@ all: $(BTARGET) -$(core)/codepage.o: ../codepage/cp865.cp - cp ../codepage/cp865.cp codepage.cp +codepage.o: ../codepage/cp865.cp + cp $(objdir)/../codepage/cp865.cp codepage.cp $(CC) $(SFLAGS) -c -o $@ $(core)/codepage.S +installer: syslinux.efi + +install: all + mkdir -m 755 -p $(INSTALLROOT)$(AUXDIR)/efi$(BITS) + install -m 755 $(BTARGET) $(INSTALLROOT)$(AUXDIR)/efi$(BITS) + tidy dist: rm -f *.so *.o find . \( -name \*.o -o -name \*.a -o -name .\*.d -o -name \*.tmp \) -print0 | \ diff --git a/extlinux/Makefile b/extlinux/Makefile index 6cde574e..b1a76a0a 100644 --- a/extlinux/Makefile +++ b/extlinux/Makefile @@ -14,12 +14,10 @@ ## Linux vfat, ntfs, ext2/ext3/ext4 and btrfs installer ## -topdir = .. -MAKEDIR = $(topdir)/mk include $(MAKEDIR)/syslinux.mk OPTFLAGS = -g -Os -INCLUDES = -I. -I.. -I../libinstaller +INCLUDES = -I$(SRC) -I$(objdir) -I$(SRC)/../libinstaller CFLAGS = $(GCCWARN) -Wno-sign-compare -D_FILE_OFFSET_BITS=64 \ $(OPTFLAGS) $(INCLUDES) LDFLAGS = @@ -37,7 +35,7 @@ OBJS = $(patsubst %.c,%.o,$(notdir $(SRCS))) .SUFFIXES: .c .o .i .s .S -VPATH = .:../libinstaller +VPATH = $(SRC):$(SRC)/../libinstaller:$(OBJ)/../libinstaller all: installer diff --git a/extlinux/main.c b/extlinux/main.c index 73f3fbe1..b72bee2b 100644 --- a/extlinux/main.c +++ b/extlinux/main.c @@ -46,7 +46,7 @@ #include "btrfs.h" #include "fat.h" #include "ntfs.h" -#include "../version.h" +#include "version.h" #include "syslxint.h" #include "syslxcom.h" /* common functions shared with extlinux and syslinux */ #include "syslxfs.h" diff --git a/gpxe/Makefile b/gpxe/Makefile index fe754c62..d2f5e756 100644 --- a/gpxe/Makefile +++ b/gpxe/Makefile @@ -17,9 +17,10 @@ # Very simple, really... # +VPATH = $(SRC) TARGETS = gpxelinux.0 gpxelinuxk.0 -PXEMAKE = $(MAKE) -C src NO_WERROR=1 +PXEMAKE = $(MAKE) -C $(SRC)/src NO_WERROR=1 all: $(TARGETS) @@ -28,7 +29,7 @@ tidy: clean: tidy dist: - $(MAKE) -C src veryclean > /dev/null 2>&1 + $(MAKE) -C $(SRC)/src veryclean > /dev/null 2>&1 #spotless: clean dist #Including 'dist' errors out for make ARCH=x86_64 spotless @@ -42,14 +43,14 @@ installer: src/bin/blib.a: $(PXEMAKE) bin/blib.a -src/bin/undionly.kkpxe: src/bin/blib.a pxelinux.gpxe ../core/pxelinux.0 - $(PXEMAKE) bin/undionly.kkpxe EMBEDDED_IMAGE=../pxelinux.gpxe,../../core/pxelinux.0 +src/bin/undionly.kkpxe: src/bin/blib.a pxelinux.gpxe $(objdir)/core/pxelinux.0 + $(PXEMAKE) bin/undionly.kkpxe EMBEDDED_IMAGE=$(SRC)/pxelinux.gpxe,$(objdir)/core/pxelinux.0 gpxelinux.0: src/bin/undionly.kkpxe - cp -f $< $@ + cp -f $(SRC)/$< $@ -src/bin/undionly.kpxe: src/bin/blib.a pxelinuxk.gpxe ../core/pxelinux.0 - $(PXEMAKE) bin/undionly.kpxe EMBEDDED_IMAGE=../pxelinuxk.gpxe,../../core/pxelinux.0 +src/bin/undionly.kpxe: src/bin/blib.a pxelinuxk.gpxe $(objdir)/core/pxelinux.0 + $(PXEMAKE) bin/undionly.kpxe EMBEDDED_IMAGE=$(SRC)/pxelinuxk.gpxe,$(objdir)/core/pxelinux.0 gpxelinuxk.0: src/bin/undionly.kpxe - cp -f $< $@ + cp -f $(SRC)/$< $@ diff --git a/libinstaller/Makefile b/libinstaller/Makefile index e67a4686..30c3d3d6 100644 --- a/libinstaller/Makefile +++ b/libinstaller/Makefile @@ -4,19 +4,23 @@ BINFILES = bootsect_bin.c ldlinux_bin.c \ PERL = perl -all: $(BINFILES) +VPATH = $(SRC) -bootsect_bin.c: ../core/ldlinux.bss bin2c.pl - $(PERL) bin2c.pl syslinux_bootsect < $< > $@ +all: installer -ldlinux_bin.c: ../core/ldlinux.sys bin2c.pl - $(PERL) bin2c.pl syslinux_ldlinux 512 < $< > $@ +bootsect_bin.c: $(OBJ)/../core/ldlinux.bss bin2c.pl + $(PERL) $(SRC)/bin2c.pl syslinux_bootsect < $< > $@ -mbr_bin.c: ../mbr/mbr.bin bin2c.pl - $(PERL) bin2c.pl syslinux_mbr < $< > $@ +ldlinux_bin.c: $(OBJ)/../core/ldlinux.sys bin2c.pl + $(PERL) $(SRC)/bin2c.pl syslinux_ldlinux 512 < $< > $@ -gptmbr_bin.c: ../mbr/gptmbr.bin bin2c.pl - $(PERL) bin2c.pl syslinux_gptmbr < $< > $@ +mbr_bin.c: $(OBJ)/../mbr/mbr.bin bin2c.pl + $(PERL) $(SRC)/bin2c.pl syslinux_mbr < $< > $@ + +gptmbr_bin.c: $(OBJ)/../mbr/gptmbr.bin bin2c.pl + $(PERL) $(SRC)/bin2c.pl syslinux_gptmbr < $< > $@ + +installer: $(BINFILES) tidy: rm -f $(BINFILES) diff --git a/libinstaller/syslxopt.c b/libinstaller/syslxopt.c index b739752f..a73cd10a 100644 --- a/libinstaller/syslxopt.c +++ b/libinstaller/syslxopt.c @@ -23,7 +23,7 @@ #include <string.h> #include <getopt.h> #include <sysexits.h> -#include "../version.h" +#include "version.h" #include "syslxcom.h" #include "syslxfs.h" #include "syslxopt.h" diff --git a/linux/Makefile b/linux/Makefile index 08a3ed49..d63306af 100644 --- a/linux/Makefile +++ b/linux/Makefile @@ -14,12 +14,10 @@ ## Linux FAT/NTFS installer ## -topdir = .. -MAKEDIR = $(topdir)/mk include $(MAKEDIR)/syslinux.mk OPTFLAGS = -g -Os -INCLUDES = -I. -I.. -I../libinstaller +INCLUDES = -I$(SRC) -I$(objdir) -I$(SRC)/../libinstaller CFLAGS = $(GCCWARN) -D_FILE_OFFSET_BITS=64 $(OPTFLAGS) $(INCLUDES) LDFLAGS = @@ -36,7 +34,7 @@ OBJS = $(patsubst %.c,%.o,$(notdir $(SRCS))) .SUFFIXES: .c .o .i .s .S -VPATH = .:../libinstaller +VPATH = $(SRC):$(SRC)/../libinstaller:$(OBJ)/../libinstaller all: installer diff --git a/lzo/Makefile b/lzo/Makefile index cf8f985a..0c5d2965 100644 --- a/lzo/Makefile +++ b/lzo/Makefile @@ -10,17 +10,19 @@ ## ## ----------------------------------------------------------------------- -topdir = .. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/build.mk -INCLUDES += -I./include +INCLUDES += -I$(SRC)/include -LIBOBJS = $(patsubst %.c,%.o,$(wildcard src/*.c)) +LIBOBJS = $(patsubst %.c,%.o,$(subst $(SRC)/,,$(wildcard $(SRC)/src/*.c))) LIB = lzo.a BINS = prepcore -all : $(BINS) +all : makeoutputdirs $(BINS) + +makeoutputdirs: + @mkdir -p $(OBJ)/src $(LIB) : $(LIBOBJS) rm -f $@ diff --git a/mbr/Makefile b/mbr/Makefile index 8b46452a..be2bded7 100644 --- a/mbr/Makefile +++ b/mbr/Makefile @@ -15,8 +15,8 @@ # Makefile for MBR # -topdir = .. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) + include $(MAKEDIR)/embedded.mk all: mbr.bin altmbr.bin gptmbr.bin isohdpfx.bin isohdppx.bin \ @@ -34,16 +34,18 @@ all: mbr.bin altmbr.bin gptmbr.bin isohdpfx.bin isohdppx.bin \ .PRECIOUS: %.elf #%.elf: %.o mbr.ld -%.elf: %.o $(ARCH)/mbr.ld - $(LD) $(LDFLAGS) -T $(ARCH)/mbr.ld -e _start -o $@ $< +%.elf: %.o $(SRC)/$(ARCH)/mbr.ld + $(LD) $(LDFLAGS) -T $(SRC)/$(ARCH)/mbr.ld -e _start -o $@ $< -%.bin: %.elf checksize.pl +%.bin: %.elf $(SRC)/checksize.pl $(OBJCOPY) -O binary $< $@ - $(PERL) checksize.pl $@ + $(PERL) $(SRC)/checksize.pl $@ $(CHMOD) -x $@ mbr_bin.c: mbr.bin +install: + tidy dist: rm -f *.o *.elf *.lst .*.d diff --git a/memdisk/Makefile b/memdisk/Makefile index 36689979..4ae08554 100644 --- a/memdisk/Makefile +++ b/memdisk/Makefile @@ -11,29 +11,28 @@ ## ## ----------------------------------------------------------------------- -topdir = .. -MAKEDIR = $(topdir)/mk include $(MAKEDIR)/embedded.mk -include $(topdir)/version.mk -INCLUDES = -I$(topdir)/com32/include +INCLUDES = -I$(topdir)/com32/include -I$(objdir) CFLAGS += -D__MEMDISK__ -DDATE='"$(DATE)"' LDFLAGS = $(GCCOPT) -g NASM = nasm NASMOPT = -Ox NFLAGS = -dDATE='"$(DATE)"' -NINCLUDE = +NINCLUDE = -I$(SRC)/ +VPATH = $(SRC) SRCS = $(wildcard *.asm *.c *.h) # The DATE is set on the make command line when building binaries for # official release. Otherwise, substitute a hex string that is pretty much # guaranteed to be unique to be unique from build to build. ifndef HEXDATE -HEXDATE := $(shell $(PERL) ../now.pl $(SRCS)) +HEXDATE := $(shell $(PERL) $(SRC)/../now.pl $(SRCS)) endif ifndef DATE -DATE := $(shell sh ../gen-id.sh $(VERSION) $(HEXDATE)) +DATE := $(shell sh $(SRC)/../gen-id.sh $(VERSION) $(HEXDATE)) endif # Important: init.o16 must be first!! @@ -92,7 +91,7 @@ memdisk32.elf: $(ARCH)/memdisk.ld $(OBJS32) $(OBJCOPY) -O binary $< $@ memdisk: memdisk16.bin memdisk32.bin postprocess.pl - $(PERL) postprocess.pl $@ memdisk16.bin memdisk32.bin + $(PERL) $(SRC)/postprocess.pl $@ memdisk16.bin memdisk32.bin e820test: e820test.c e820func.c msetup.c $(CC) -m32 -g $(GCCWARN) -DTEST -o $@ $^ diff --git a/memdisk/setup.c b/memdisk/setup.c index b6093b7a..72c67852 100644 --- a/memdisk/setup.c +++ b/memdisk/setup.c @@ -22,7 +22,7 @@ #include "conio.h" #include "version.h" #include "memdisk.h" -#include "../version.h" +#include <version.h> const char memdisk_version[] = "MEMDISK " VERSION_STR " " DATE; const char copyright[] = diff --git a/memdump/Makefile b/memdump/Makefile index 6a30431a..e5c27969 100644 --- a/memdump/Makefile +++ b/memdump/Makefile @@ -14,13 +14,12 @@ ## memory dump utility ## -topdir = .. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/embedded.mk OPTFLAGS = -INCLUDES = -include code16.h -I. -LDFLAGS = -T com16.ld +INCLUDES = -include $(SRC)/code16.h -I$(SRC) +LDFLAGS = -T $(SRC)/com16.ld SRCS = main.c serial.c ymsend.c srecsend.c OBJS = crt0.o $(patsubst %.c,%.o,$(notdir $(SRCS))) @@ -40,7 +40,7 @@ CFLAGS = -I$(EFIINC) -I$(EFIINC)/$(EFI_SUBARCH) \ CRT0 := $(shell find $(LIBDIR) -name crt0-efi-$(EFI_SUBARCH).o 2>/dev/null | tail -n1) LDSCRIPT := $(shell find $(LIBDIR) -name elf_$(EFI_SUBARCH)_efi.lds 2>/dev/null | tail -n1) -LDFLAGS = -T $(ARCH)/syslinux.ld -Bsymbolic -pie -nostdlib -znocombreloc \ +LDFLAGS = -T $(SRC)/$(ARCH)/syslinux.ld -Bsymbolic -pie -nostdlib -znocombreloc \ -L$(LIBDIR) --hash-style=gnu -m elf_$(ARCH) $(CRT0) -E SFLAGS = $(GCCOPT) $(GCCWARN) $(SARCHOPT) \ @@ -47,7 +47,7 @@ com32 = $(topdir)/com32 core = $(topdir)/core ifneq ($(NOGPL),1) -GPLLIB = $(com32)/gpllib/libcom32gpl.c32 +GPLLIB = $(objdir)/com32/gpllib/libcom32gpl.c32 GPLINCLUDE = -I$(com32)/gplinclude else GPLLIB = @@ -58,7 +58,8 @@ CFLAGS = $(GCCOPT) -W -Wall \ -fomit-frame-pointer -D__COM32__ -DDYNAMIC_MODULE \ -nostdinc -iwithprefix include \ -I$(com32)/libutil/include -I$(com32)/include \ - -I$(com32)/include/sys $(GPLINCLUDE) -I$(core)/include + -I$(com32)/include/sys $(GPLINCLUDE) -I$(core)/include \ + -I$(objdir) SFLAGS = $(GCCOPT) -D__COM32__ LDFLAGS = -m elf_$(ARCH) -shared --hash-style=gnu -T $(com32)/lib/$(ARCH)/elf.ld --as-needed LIBGCC := $(shell $(CC) $(GCCOPT) --print-libgcc) @@ -67,10 +68,10 @@ LNXCFLAGS = -I$(com32)/libutil/include -W -Wall -O -g -D_GNU_SOURCE LNXSFLAGS = -g LNXLDFLAGS = -g -C_LIBS = $(com32)/libutil/libutil_com.c32 $(GPLLIB) \ - $(com32)/lib/libcom32.c32 -C_LNXLIBS = $(com32)/libutil/libutil_lnx.a \ - $(com32)/elflink/ldlinux/ldlinux_lnx.a +C_LIBS = $(objdir)/com32/libutil/libutil_com.c32 $(GPLLIB) \ + $(objdir)/com32/lib/libcom32.c32 +C_LNXLIBS = $(objdir)/com32/libutil/libutil_lnx.a \ + $(objdir)/com32/elflink/ldlinux/ldlinux_lnx.a .SUFFIXES: .lss .c .o @@ -29,7 +29,7 @@ GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0) GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0) GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0) -INCLUDE = -I. +INCLUDE = -I$(SRC) STRIP = strip --strip-all -R .comment -R .note # zlib and libpng configuration flags @@ -44,9 +44,10 @@ LIBFLAGS = -DDYNAMIC_CRC_TABLE -DPNG_NO_CONSOLE_IO \ # LIBFLAGS += -DPNG_NO_FLOATING_POINT_SUPPORTED REQFLAGS = $(GCCOPT) -g -D__COM32__ \ - -nostdinc -iwithprefix include -I. -I./sys -I../include \ - -I../include/sys -I../../core/include -I$(com32)/lib/ \ - -I$(com32)/lib/sys/module + -nostdinc -iwithprefix include -I. -I$(SRC)/sys \ + -I$(SRC)/../include -I$(com32)/include/sys \ + -I$(topdir)/core/include -I$(com32)/lib/ \ + -I$(com32)/lib/sys/module -I$(OBJ)/../.. OPTFLAGS = -Os -march=$(MARCH) -falign-functions=0 -falign-jumps=0 \ -falign-labels=0 -ffast-math -fomit-frame-pointer WARNFLAGS = $(GCCWARN) -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Winline @@ -64,6 +65,7 @@ REQFLAGS += $(EFIINC) endif CFLAGS = $(OPTFLAGS) $(REQFLAGS) $(WARNFLAGS) $(LIBFLAGS) +VPATH = $(SRC) LIBOTHER_OBJS = \ atoi.o atol.o atoll.o calloc.o creat.o \ fgets.o fprintf.o fputc.o \ @@ -181,13 +183,13 @@ LIBZLIB_OBJS = \ sys/zfile.o sys/zfopen.o MINLIBOBJS = \ - syslinux/ipappend.o \ + $(addprefix $(OBJ)/,syslinux/ipappend.o \ syslinux/dsinfo.o \ $(LIBOTHER_OBJS) \ $(LIBGCC_OBJS) \ $(LIBCONSOLE_OBJS) \ $(LIBLOAD_OBJS) \ - $(LIBZLIB_OBJS) + $(LIBZLIB_OBJS)) # $(LIBVESA_OBJS) CORELIBOBJS = \ @@ -214,16 +216,16 @@ LDFLAGS = -m elf_$(ARCH) --hash-style=gnu -T $(com32)/lib/$(ARCH)/elf.ld % : %.S -.c.o: +%.o: %.c $(CC) $(MAKEDEPS) $(CFLAGS) -c -o $@ $< .c.i: $(CC) $(MAKEDEPS) $(CFLAGS) -E -o $@ $< -.c.s: +%.s: %.c $(CC) $(MAKEDEPS) $(CFLAGS) -S -o $@ $< -.S.o: +%.o: %.S $(CC) $(MAKEDEPS) $(CFLAGS) -D__ASSEMBLY__ -c -o $@ $< .S.s: @@ -235,7 +237,7 @@ LDFLAGS = -m elf_$(ARCH) --hash-style=gnu -T $(com32)/lib/$(ARCH)/elf.ld .S.ls: $(CC) $(MAKEDEPS) $(CFLAGS) $(SOFLAGS) -D__ASSEMBLY__ -E -o $@ $< -.s.o: +%(OBJ)/%.o: $(SRC)/%.s $(CC) $(MAKEDEPS) $(CFLAGS) -x assembler -c -o $@ $< .ls.lo: diff --git a/modules/Makefile b/modules/Makefile index f878c70d..e985af4a 100644 --- a/modules/Makefile +++ b/modules/Makefile @@ -14,11 +14,11 @@ ## Non-COM32 simple Syslinux modules ## -topdir = .. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/embedded.mk INCLUDES = -I$(com32)/include +NASMOPT = -I$(SRC)/ -I$(SRC)/../core/ BINS = pxechain.com poweroff.com int18.com ver.com diff --git a/mtools/Makefile b/mtools/Makefile index 78cea1e2..3544388e 100755 --- a/mtools/Makefile +++ b/mtools/Makefile @@ -1,9 +1,7 @@ -topdir = .. -MAKEDIR = $(topdir)/mk include $(MAKEDIR)/syslinux.mk OPTFLAGS = -g -Os -INCLUDES = -I. -I.. -I../libfat -I../libinstaller +INCLUDES = -I$(SRC) -I$(objdir) -I$(SRC)/../libfat -I$(SRC)/../libinstaller CFLAGS = $(GCCWARN) -D_FILE_OFFSET_BITS=64 $(OPTFLAGS) $(INCLUDES) LDFLAGS = @@ -14,12 +12,12 @@ SRCS = syslinux.c \ ../libinstaller/setadv.c \ ../libinstaller/bootsect_bin.c \ ../libinstaller/ldlinux_bin.c \ - $(wildcard ../libfat/*.c) + $(wildcard $(SRC)/../libfat/*.c) OBJS = $(patsubst %.c,%.o,$(notdir $(SRCS))) .SUFFIXES: .c .o .i .s .S -VPATH = .:../libfat:../libinstaller +VPATH = $(SRC):$(SRC)/../libfat:$(SRC)/../libinstaller:$(OBJ)/../libinstaller all: installer diff --git a/sample/Makefile b/sample/Makefile index 9e504d96..1515a068 100644 --- a/sample/Makefile +++ b/sample/Makefile @@ -14,9 +14,8 @@ ## samples for syslinux users ## -topdir = .. -MAKEDIR = $(topdir)/mk include $(MAKEDIR)/embedded.mk +VPATH = $(SRC) PPMTOLSS16 = $(topdir)/utils/ppmtolss16 diff --git a/utils/Makefile b/utils/Makefile index be739935..dfe62590 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -14,23 +14,23 @@ # SYSLINUX utilities # -topdir = .. -MAKEDIR = $(topdir)/mk +VPATH = $(SRC) include $(MAKEDIR)/syslinux.mk -CFLAGS = $(GCCWARN) -Os -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 +CFLAGS = $(GCCWARN) -Os -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 -I$(SRC) LDFLAGS = -O2 C_TARGETS = isohybrid gethostip memdiskfind SCRIPT_TARGETS = mkdiskimage SCRIPT_TARGETS += isohybrid.pl # about to be obsoleted -ASIS = keytab-lilo lss16toppm md5pass ppmtolss16 sha1pass \ - syslinux2ansi pxelinux-options +ASIS = $(addprefix $(SRC)/,keytab-lilo lss16toppm md5pass \ + ppmtolss16 sha1pass syslinux2ansi pxelinux-options) TARGETS = $(C_TARGETS) $(SCRIPT_TARGETS) -ISOHDPFX = ../mbr/isohdpfx.bin ../mbr/isohdpfx_f.bin ../mbr/isohdpfx_c.bin \ - ../mbr/isohdppx.bin ../mbr/isohdppx_f.bin ../mbr/isohdppx_c.bin +ISOHDPFX = $(addprefix $(OBJ)/,../mbr/isohdpfx.bin ../mbr/isohdpfx_f.bin \ + ../mbr/isohdpfx_c.bin \ + ../mbr/isohdppx.bin ../mbr/isohdppx_f.bin ../mbr/isohdppx_c.bin) all: $(TARGETS) @@ -38,17 +38,17 @@ all: $(TARGETS) $(CC) $(UMAKEDEPS) $(CFLAGS) -c -o $@ $< mkdiskimage: mkdiskimage.in ../mbr/mbr.bin bin2hex.pl - $(PERL) bin2hex.pl < ../mbr/mbr.bin | cat mkdiskimage.in - > $@ + $(PERL) $(SRC)/bin2hex.pl < $(OBJ)/../mbr/mbr.bin | cat $(SRC)/mkdiskimage.in - > $@ chmod a+x $@ # Works on anything with a Perl interpreter... isohybrid.pl: isohybrid.in $(ISOHDPFX) bin2hex.pl - cp -f isohybrid.in $@ - for f in $(ISOHDPFX) ; do $(PERL) bin2hex.pl < $$f >> $@ ; done + cp -f $(SRC)/isohybrid.in $@ + for f in $(ISOHDPFX) ; do $(PERL) $(SRC)/bin2hex.pl < $$f >> $@ ; done chmod a+x $@ isohdpfx.c: $(ISOHDPFX) isohdpfxarray.pl - $(PERL) isohdpfxarray.pl $(ISOHDPFX) > $@ + $(PERL) $(SRC)/isohdpfxarray.pl $(ISOHDPFX) > $@ isohybrid: isohybrid.o isohdpfx.o $(CC) $(LDFLAGS) -o $@ $^ -luuid diff --git a/win32/Makefile b/win32/Makefile index f960998a..943a966a 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -29,21 +29,22 @@ else ifeq ($(findstring MINGW32,$(OSTYPE)),MINGW32) WINPREFIX := else -WINPREFIX := $(shell ./find-mingw32.sh gcc) +WINPREFIX := $(shell $(SRC)/find-mingw32.sh gcc) endif WINCFLAGS := $(GCCWARN) -Wno-sign-compare -Os -fomit-frame-pointer \ -D_FILE_OFFSET_BITS=64 WINLDFLAGS := -Os -s endif -WINCFLAGS += -I. -I../win -I.. -I../libfat -I../libinstaller \ - -I../libinstaller/getopt +WINCFLAGS += -I$(SRC) -I$(SRC)/../win -I$(objdir) \ + -I$(SRC)/../libfat -I$(SRC)/../libinstaller \ + -I$(SRC)/../libinstaller/getopt WINCC := $(WINPREFIX)gcc WINAR := $(WINPREFIX)ar WINRANLIB := $(WINPREFIX)ranlib WINCC_IS_GOOD := $(shell $(WINCC) $(WINCFLAGS) $(WINLDFLAGS) \ - -o hello.exe ../win/hello.c >/dev/null 2>&1 ; echo $$?) + -o hello.exe $(SRC)/../win/hello.c >/dev/null 2>&1 ; echo $$?) .SUFFIXES: .c .obj .lib .exe .i .s .S @@ -57,12 +58,12 @@ LIBSRC = ../libinstaller/fs.c \ ../libinstaller/bootsect_bin.c \ ../libinstaller/ldlinux_bin.c \ ../libinstaller/mbr_bin.c \ - $(wildcard ../libfat/*.c) + $(wildcard $(SRC)/../libfat/*.c) LIBOBJS = $(patsubst %.c,%.obj,$(notdir $(LIBSRC))) LIB = syslinux.lib -VPATH = .:../win:../libfat:../libinstaller:../libinstaller/getopt +VPATH = $(SRC):$(SRC)/../win:$(SRC)/../libfat:$(SRC)/../libinstaller:$(SRC)/../libinstaller/getopt:$(OBJ)/../libinstaller TARGETS = syslinux.exe diff --git a/win64/Makefile b/win64/Makefile index fe60793c..f28570ae 100644 --- a/win64/Makefile +++ b/win64/Makefile @@ -20,20 +20,21 @@ OSTYPE = $(shell uname -msr) # Don't know how to do a native compile here... -WINPREFIX := $(shell ./find-mingw64.sh gcc) +WINPREFIX := $(shell $(SRC)/find-mingw64.sh gcc) WINCFLAGS := $(GCCWARN) -Wno-sign-compare -Os -fomit-frame-pointer \ -D_FILE_OFFSET_BITS=64 WINLDFLAGS := -Os -s -WINCFLAGS += -I. -I../win -I.. -I../libfat -I../libinstaller \ - -I../libinstaller/getopt +WINCFLAGS += -I$(SRC) -I$(SRC)/../win -I$(objdir) \ + -I$(SRC)/../libfat -I$(SRC)/../libinstaller \ + -I$(SRC)/../libinstaller/getopt WINCC := $(WINPREFIX)gcc WINAR := $(WINPREFIX)ar WINRANLIB := $(WINPREFIX)ranlib WINCC_IS_GOOD := $(shell $(WINCC) $(WINCFLAGS) $(WINLDFLAGS) \ - -o hello.exe ../win/hello.c >/dev/null 2>&1 ; echo $$?) + -o hello.exe $(SRC)/../win/hello.c >/dev/null 2>&1 ; echo $$?) .SUFFIXES: .c .obj .lib .exe .i .s .S @@ -47,12 +48,12 @@ LIBSRC = ../libinstaller/fs.c \ ../libinstaller/bootsect_bin.c \ ../libinstaller/ldlinux_bin.c \ ../libinstaller/mbr_bin.c \ - $(wildcard ../libfat/*.c) + $(wildcard $(SRC)/../libfat/*.c) LIBOBJS = $(patsubst %.c,%.obj,$(notdir $(LIBSRC))) LIB = syslinux.lib -VPATH = .:../win:../libfat:../libinstaller:../libinstaller/getopt +VPATH = $(SRC):$(SRC)/../win:$(SRC)/../libfat:$(SRC)/../libinstaller:$(SRC)/../libinstaller/getopt:$(OBJ)/../libinstaller TARGETS = syslinux64.exe |