summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.conf.in51
-rw-r--r--Makefile.in (renamed from Makefile)205
-rw-r--r--configure.ac38
-rw-r--r--kdump/Makefile16
-rw-r--r--kexec/Makefile70
-rw-r--r--kexec_test/Makefile28
-rw-r--r--purgatory/Makefile63
-rw-r--r--purgatory/arch/ia64/Makefile3
-rw-r--r--purgatory/arch/ppc64/Makefile6
-rw-r--r--purgatory/include/string.h2
-rw-r--r--purgatory/purgatory.c4
-rw-r--r--util/Makefile12
-rw-r--r--util_lib/Makefile23
13 files changed, 236 insertions, 285 deletions
diff --git a/Makefile.conf.in b/Makefile.conf.in
deleted file mode 100644
index b5418e0..0000000
--- a/Makefile.conf.in
+++ /dev/null
@@ -1,51 +0,0 @@
-# Hey Emacs this is a -*- makefile-*-
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-
-bindir=@bindir@
-sbindir=@sbindir@
-libexecdir=@libexecdir@
-datadir=@datadir@
-sysconfdir=@sysconfdir@
-sharedstatedir=@sharedstatedir@
-localstatedir=@localstatedir@
-libdir=@libdir@
-infodir=@infodir@
-mandir=@mandir@
-includedir=@includedir@
-
-LIBS=@LIBS@
-
-# The target architecture
-ARCH =@ARCH@
-OBJDIR=@OBJDIR@
-
-# Compiler for building kexec
-CC =@CC@
-CPP =@CPP@
-LD =@LD@
-AS =@AS@
-OBJCOPY =@OBJCOPY@
-AR =@AR@
-CFLAGS =@CFLAGS@
-EXTRA_CFLAGS=@EXTRA_CFLAGS@
-LDFLAGS =@LDFLAGS@
-
-# Utilities called by the makefiles
-INSTALL=@INSTALL@
-MKDIR=@MKDIR@
-RM=@RM@
-CP=@CP@
-LN=@LN@
-TAR=@TAR@
-RPMBUILD=@RPMBUILD@
-SED=@SED@
-FIND=@FIND@
-XARGS=@XARGS@
-DIRNAME=@DIRNAME@
-
-# C compiler for building utilities to use
-# during the build
-BUILD_CC=@BUILD_CC@
-BUILD_CFLAGS=@BUILD_CFLAGS@ $(DEFS)
diff --git a/Makefile b/Makefile.in
index 73ff2f1..b4b293a 100644
--- a/Makefile
+++ b/Makefile.in
@@ -1,28 +1,92 @@
# Hey Emacs this is a -*- makefile-*-
-include Makefile.conf
-pkgdatadir = $(datadir)/$(PACKAGE)
-pkglibdir = $(libdir)/$(PACKAGE)
-pkgincludedir = $(includedir)/$(PACKAGE)
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+
+
+# The target architecture
+ARCH = @ARCH@
+OBJDIR = @OBJDIR@
+target = @target@
+host = @host@
+
+# Compiler for building kexec
+CC = @CC@
+CPP = @CPP@
+LD = @LD@
+AS = @AS@
+OBJCOPY = @OBJCOPY@
+AR = @AR@
+
+# C compiler for binaries to run during the build
+BUILD_CC = @BUILD_CC@
+BUILD_CFLAGS = @BUILD_CFLAGS@
+TARGET_CC = @TARGET_CC@
+TARGET_CFLAGS = @TARGET_CFLAGS@
+
+
+# Base compiler flags. These are extended by the subcomponent-Makefiles
+# where necessary.
+CPPFLAGS = @CPPFLAGS@ -I$(srcdir)/include -I$(srcdir)/util_lib/include \
+ -Iinclude/
+CFLAGS = @CFLAGS@ -fno-strict-aliasing -Wall -Wstrict-prototypes
+ASFLAGS = @ASFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+
+# Utilities called by the makefiles
+INSTALL = @INSTALL@
+MKDIR = @MKDIR@
+RM = @RM@
+CP = @CP@
+LN = @LN@
+TAR = @TAR@
+RPMBUILD = @RPMBUILD@
+SED = @SED@
+FIND = @FIND@
+XARGS = @XARGS@
+DIRNAME = @DIRNAME@
+
+
+pkgdatadir = $(datadir)/$(PACKAGE_NAME)
+pkglibdir = $(libdir)/$(PACKAGE_NAME)
+pkgincludedir = $(includedir)/$(PACKAGE_NAME)
# You can specify DESTDIR on the command line to do a add
# a prefix to the install so it doesn't really happen
# Useful for building binary packages
DESTDIR =
-EXTRA_CPPFLAGS:= -I./include -I./util_lib/include $(DEFS) $(EXTRA_CFLAGS)
-
-PREFIX:=$(OBJDIR)/build
-SBINDIR=$(PREFIX)/sbin
-BINDIR=$(PREFIX)/bin
-LIBEXECDIR=$(PREFIX)/libexec
-DATADIR=$(PREFIX)/share
-SYSCONFDIR=$(PREFIX)/etc
-SHAREDSTATEDIR=$(PREFIX)/com
-LOCALSTATEDIR=$(PREFIX)/var
-LIBDIR=$(PREFIX)/lib
-INFODIR=$(PREFIX)/info
-MANDIR=$(PREFIX)/man
+srcdir = @srcdir@
+VPATH = .:$(srcdir)
+
+# install paths
+BUILD_PREFIX:=build
+SBINDIR=$(BUILD_PREFIX)/sbin
+BINDIR=$(BUILD_PREFIX)/bin
+LIBEXECDIR=$(BUILD_PREFIX)/libexec
+DATADIR=$(BUILD_PREFIX)/share
+SYSCONFDIR=$(BUILD_PREFIX)/etc
+SHAREDSTATEDIR=$(BUILD_PREFIX)/com
+LOCALSTATEDIR=$(BUILD_PREFIX)/var
+LIBDIR=$(BUILD_PREFIX)/lib
+INFODIR=$(BUILD_PREFIX)/info
+MANDIR=$(BUILD_PREFIX)/man
MAN1DIR=$(MANDIR)/man1
MAN2DIR=$(MANDIR)/man2
MAN3DIR=$(MANDIR)/man3
@@ -31,106 +95,111 @@ MAN5DIR=$(MANDIR)/man5
MAN6DIR=$(MANDIR)/man6
MAN7DIR=$(MANDIR)/man7
MAN8DIR=$(MANDIR)/man8
-INCLUDEDIR=$(PREFIX)/include
+INCLUDEDIR=$(BUILD_PREFIX)/include
-PKGDATADIR=$(DATADIR)/$(PACKAGE)
-PKGLIBDIR=$(LIBDIR)/$(PACKAGE)
-PKGINCLUDEIR=$(INCLUDEDIR)/$(PACKAGE)
+PKGDATADIR=$(DATADIR)/$(PACKAGE_NAME)
+PKGLIBDIR=$(LIBDIR)/$(PACKAGE_NAME)
+PKGINCLUDEIR=$(INCLUDEDIR)/$(PACKAGE_NAME)
MAN_PAGES:= kexec/kexec.8
MAN_PAGES+= kdump/kdump.8
BINARIES_i386:= $(SBINDIR)/kexec $(PKGLIBDIR)/kexec_test
BINARIES_x86_64:=$(SBINDIR)/kexec $(PKGLIBDIR)/kexec_test
-BINARIES:=$(SBINDIR)/kexec $(SBINDIR)/kdump $(BINARIES_$(ARCH))
+BINARIES:=$(SBINDIR)/kexec $(SBINDIR)/kdump $(BINARIES_$(ARCH))
TARGETS:=$(BINARIES) $(MAN_PAGES)
all: $(TARGETS)
-# cc-option
-# Usage: cflags-y += $(call cc-option, -march=winchip-c6, -march=i586)
-cc-option = $(shell if $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(1) -S -o /dev/null \
- -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else \
- echo "$(2)"; fi ;)
+# generic build rules
+%.o: %.c
+ @$(MKDIR) -p $(@D)
+ $(COMPILE.c) -MD -o $@ $<
+
+%.o: %.S
+ @$(MKDIR) -p $(@D)
+ $(COMPILE.S) -MD -o $@ $<
# Utility function library
#
-include util_lib/Makefile
+include $(srcdir)/util_lib/Makefile
#
# Stand alone utilities
#
-include util/Makefile
+include $(srcdir)/util/Makefile
#
# purgatory (code between kernels)
#
-include purgatory/Makefile
+include $(srcdir)/purgatory/Makefile
#
# kexec (linux booting linux)
#
-include kexec/Makefile
+include $(srcdir)/kexec/Makefile
# kdump (read a crashdump from memory)
#
-include kdump/Makefile
+include $(srcdir)/kdump/Makefile
#
# kexec_test (test program)
#
ifeq ($(ARCH),i386)
-include kexec_test/Makefile
+include $(srcdir)/kexec_test/Makefile
endif
ifeq ($(ARCH),x86_64)
-include kexec_test/Makefile
+include $(srcdir)/kexec_test/Makefile
endif
-SPEC=$(PACKAGE).spec
-GENERATED_SRCS:= ./configure ./$(SPEC)
-TARBALL=$(OBJDIR)/$(PACKAGE)-$(VERSION).tar.gz
-SRCS:=$(shell $(FIND) \
- ./AUTHORS ./COPYING ./News ./TODO \
- ./Makefile ./Makefile.conf.in ./configure.ac \
- ./kexec-tools.spec.in ./config ./doc \
- ./include ./kexec ./purgatory ./kexec_test ./kdump ./util ./util_lib \
- ! -path '*CVS*' ! -name '*~' ! -name '.*' \
- -type f -print )
-SRCS+=$(GENERATED_SRCS)
-PSRCS:=$(patsubst ./%,$(PACKAGE)-$(VERSION)/%,$(SRCS))
-
-Makefile.conf: Makefile.conf.in configure
- /bin/sh ./configure
+SPEC=$(PACKAGE_NAME).spec
+GENERATED_SRCS:= $(SPEC)
+TARBALL=$(PACKAGE_NAME)-$(PACKAGE_VERSION).tar
+TARBALL.gz=$(TARBALL).gz
+SRCS:= AUTHORS COPYING News TODO Makefile.in configure.ac \
+ kexec-tools.spec.in config doc include kexec purgatory kexec_test \
+ kdump util util_lib configure
+PSRCS:=$(foreach s, $(SRCS), $(PACKAGE_NAME)-$(PACKAGE_VERSION)/$(s))
+PGSRCS:=$(foreach s, $(GENERATED_SRCS), $(PACKAGE_NAME)-$(PACKAGE_VERSION)/$(s))
+
+Makefile: Makefile.in configure
+ $(srcdir)/configure
configure: configure.ac
- autoheader
- autoconf
- $(RM) -rf autom4te.cache
+ cd $(srcdir) && autoheader && autoconf && rm -rf autom4te.cache
+
+tarball: $(TARBALL.gz)
-tarball: $(TARBALL)
+$(TARBALL): $(SRCS) $(GENERATED_SRCS)
+ $(RM) -f $(PACKAGE_NAME)-$(PACKAGE_VERSION)
+ $(LN) -s $(srcdir) $(PACKAGE_NAME)-$(PACKAGE_VERSION)
+ $(TAR) -cf $@ $(PSRCS)
+ $(RM) -f $(PACKAGE_NAME)-$(PACKAGE_VERSION)
+ $(LN) -sf . $(PACKAGE_NAME)-$(PACKAGE_VERSION)
+ $(TAR) -rf $@ $(PGSRCS)
+ $(RM) -f $(PACKAGE_NAME)-$(PACKAGE_VERSION)
-$(TARBALL): $(SRCS) $(SPEC)
- $(MKDIR) -p $(OBJDIR)
- $(RM) -f $(OBJDIR)/$(PACKAGE)-$(VERSION)
- $(LN) -s .. $(OBJDIR)/$(PACKAGE)-$(VERSION)
- (cd $(OBJDIR); $(TAR) -cf - $(PSRCS) | gzip -9) > $@
+$(TARBALL.gz): $(TARBALL)
+ gzip -c < $^ > $@
+RPMDIR=rpm
rpm: $(TARBALL)
- $(MKDIR) -p $(OBJDIR)/RPM $(OBJDIR)/SRPM $(OBJDIR)/BUILD $(OBJDIR)/SPECS \
- $(OBJDIR)/TMP $(OBJDIR)/SOURCES
+ $(MKDIR) -p $(RPMDIR)/RPM $(RPMDIR)/SRPM $(RPMDIR)/BUILD \
+ $(RPMDIR)/SPECS $(RPMDIR)/TMP $(RPMDIR)/SOURCES
unset MAKEFLAGS MAKELEVEL; \
$(RPMBUILD) -ta \
- --define '_rpmdir $(OBJDIR)/RPM' \
- --define '_srcrpmdir $(OBJDIR)/SRPM' \
- --define '_builddir $(OBJDIR)/BUILD' \
- --define '_specdir $(OBJDIR)/SPECS' \
- --define '_tmppath $(OBJDIR)/TMP' \
- --define '_sourcedir $(OBJDIR)/SOURCES' \
+ --define '_rpmdir $(RPMDIR)/RPM' \
+ --define '_srcrpmdir $(RPMDIR)/SRPM' \
+ --define '_builddir $(RPMDIR)/BUILD' \
+ --define '_specdir $(RPMDIR)/SPECS' \
+ --define '_tmppath $(RPMDIR)/TMP' \
+ --define '_sourcedir $(RPMDIR)/SOURCES' \
$(TARBALL)
$(SPEC): kexec-tools.spec.in Makefile
- $(SED) -e 's,^Version: $$,Version: $(VERSION),' $< > $@
+ $(SED) -e 's,^Version: $$,Version: $(PACKAGE_VERSION),' $< > $@
echo::
@echo ARCH=$(ARCH)
@@ -141,7 +210,7 @@ echo::
@echo LD=$(LD)
clean:
- @$(FIND) $(OBJDIR) ! -name '*.d' -type f | $(XARGS) $(RM) rm -f
+ @$(FIND) $(OBJDIR) -name '*.o' -type f | $(XARGS) $(RM) rm -f
@$(RM) -rf rpm
@$(RM) -f config.log config.status config.cache
@$(RM) -f $(TARBALL)
diff --git a/configure.ac b/configure.ac
index 8574bc6..6f0dbd6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -13,15 +13,11 @@ AC_DEFINE_UNQUOTED(PACKAGE_DATE, "30th October 2007",
dnl -- Compilation platform configuration
+dnl -- the host specifices the host machine for the kexec binary, the
+dnl -- the target specifies the architecture of the kernel to be kexeced.
AC_CANONICAL_HOST
-dnl Currentl AC_CANONICAL_HOST is sufficient for my needs
-dnl as there are only a small number of targets that kexec
-dnl can support on a given host system. If it stops making
-dnl sense compile support for all possible targets a given
-dnl host can support AC_CANONICAL_TARGET may help
AC_CANONICAL_TARGET
-
dnl Compute ARCH from target cpu info
case $target_cpu in
i?86 )
@@ -54,18 +50,8 @@ if test "${host_alias}" ; then
OBJDIR="$OBJDIR-${host_alias}"
fi
-EXTRA_CFLAGS='-Wall -g -fno-strict-aliasing -Wstrict-prototypes $(CPPFLAGS) $(EXTRA_CPPFLAGS)'
-BUILD_CFLAGS='-O2 -Wall $(CPPFLAGS)'
-
-# Check whether ppc64. Add -m64 for building 64-bit binary
-# Add -mcall-aixdesc to generate dot-symbols as in gcc 3.3.3
-if test "$host_cpu" = ppc64; then
- EXTRA_CFLAGS="$EXTRA_CFLAGS -m64 -mcall-aixdesc"
-fi;
-
-if test "$host_cpu" = ppc; then
- EXTRA_CFLAGS="$EXTRA_CFLAGS -m32"
-fi;
+BUILD_CFLAGS='-O2 -Wall'
+TARGET_CFLAGS='-O2 -Wall'
AC_ARG_WITH([objdir], AC_HELP_STRING([--with-objdir=<dir>],[select directory for object files]),
[ OBJDIR="$withval" ], [ OBJDIR="$OBJDIR" ])
@@ -87,11 +73,17 @@ dnl To specify a different compiler, just 'export CC=/path/to/compiler'
AC_PROG_CC
if test "${build}" != "${host}" ; then
- BUILD_CC=${CC_FOR_BUILD-gcc}
+ AC_CHECK_PROGS(BUILD_CC, [${build_alias}-gcc ${build}-gcc gcc])
else
- BUILD_CC="\$(CC)"
+ BUILD_CC="$CC"
fi
+dnl Find compiler for target
+if test "${target}" != "${host}" ; then
+ AC_CHECK_PROGS(TARGET_CC, [${target_alias}-gcc ${target}-gcc gcc])
+else
+ TARGET_CC="$CC"
+fi
dnl Find the compiler tool chain
AC_PROG_CPP
@@ -149,11 +141,13 @@ if test "$DIRNAME" = "no"; then AC_MSG_ERROR([ dirname not found]) fi
dnl ---Output variables...
AC_SUBST([BUILD_CC])
AC_SUBST([BUILD_CFLAGS])
+AC_SUBST([TARGET_CC])
+AC_SUBST([TARGET_CFLAGS])
+AC_SUBST([ASFLAGS])
-AC_SUBST([EXTRA_CFLAGS])
AC_SUBST([ARCH])
AC_SUBST([OBJDIR])
AC_SUBST([INSTALL])
dnl ---Output
-AC_OUTPUT([Makefile.conf])
+AC_OUTPUT([Makefile])
diff --git a/kdump/Makefile b/kdump/Makefile
index 456c2fc..0e3bf14 100644
--- a/kdump/Makefile
+++ b/kdump/Makefile
@@ -4,26 +4,18 @@
KDUMP_C_SRCS:= kdump/kdump.c
-KDUMP_C_OBJS:= $(patsubst %.c, $(OBJDIR)/%.o, $(KDUMP_C_SRCS))
-KDUMP_C_DEPS:= $(patsubst %.c, $(OBJDIR)/%.d, $(KDUMP_C_SRCS))
+KDUMP_C_OBJS:= $(patsubst %.c, %.o, $(KDUMP_C_SRCS))
+KDUMP_C_DEPS:= $(patsubst %.c, %.d, $(KDUMP_C_SRCS))
KDUMP_SRCS:= $(KDUMP_C_SRCS)
KDUMP_OBJS:= $(KDUMP_C_OBJS)
KDUMP_DEPS:= $(KDUMP_C_DEPS)
KDUMP:= $(SBINDIR)/kdump
KDUMP_MANPAGE:= $(MANDIR)/man8/kdump.8
-include $(KDUMP_DEPS)
-
-$(KDUMP_C_DEPS): $(OBJDIR)/%.d: %.c
- mkdir -p $(@D)
- $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -M $< | sed -e 's|$(patsubst %.d,%.o,$(@F))|$(patsubst %.d,%.o,$(@))|' > $@
-
-$(KDUMP_C_OBJS): $(OBJDIR)/%.o: %.c $(OBJDIR)/%.d
- mkdir -p $(@D)
- $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ -c $<
+-include $(KDUMP_DEPS)
$(KDUMP): $(KDUMP_OBJS)
- mkdir -p $(@D)
+ @$(MKDIR) -p $(@D)
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -o $@ $(KDUMP_OBJS)
$(KDUMP_MANPAGE): kdump/kdump.8
diff --git a/kexec/Makefile b/kexec/Makefile
index 6ad9461..6f7a49c 100644
--- a/kexec/Makefile
+++ b/kexec/Makefile
@@ -1,80 +1,48 @@
#
# kexec (linux booting linux)
#
-PURGATORY_HEX_C:= $(OBJDIR)/kexec/purgatory.c
+PURGATORY_HEX_C:= kexec/purgatory.c
$(PURGATORY_HEX_C): $(PURGATORY) $(BIN_TO_HEX)
$(MKDIR) -p $(@D)
$(BIN_TO_HEX) purgatory < $(PURGATORY) > $@
-KCFLAGS:= $(CFLAGS) $(EXTRA_CFLAGS) -Ikexec/arch/$(ARCH)/include
-
-KEXEC_C_SRCS:= kexec/kexec.c
+KEXEC_C_SRCS:= kexec/kexec.c
KEXEC_C_SRCS+= kexec/ifdown.c
-KEXEC_C_SRCS+= kexec/kexec-elf.c
-KEXEC_C_SRCS+= kexec/kexec-elf-exec.c
+KEXEC_C_SRCS+= kexec/kexec-elf.c
+KEXEC_C_SRCS+= kexec/kexec-elf-exec.c
KEXEC_C_SRCS+= kexec/kexec-elf-core.c
-KEXEC_C_SRCS+= kexec/kexec-elf-rel.c
-KEXEC_C_SRCS+= kexec/kexec-elf-boot.c
+KEXEC_C_SRCS+= kexec/kexec-elf-rel.c
+KEXEC_C_SRCS+= kexec/kexec-elf-boot.c
KEXEC_C_SRCS+= kexec/kexec-iomem.c
KEXEC_C_SRCS+= kexec/crashdump.c
KEXEC_C_SRCS+= kexec/crashdump-xen.c
KEXEC_C_GENERATED_SRCS+= $(PURGATORY_HEX_C)
-KEXEC_S_SRCS:=
+KEXEC_S_SRCS:=
KEXEC_S_GENERATED_SRCS:=
-include kexec/arch/$(ARCH)/Makefile
-KEXEC_C_OBJS:= $(patsubst %.c, $(OBJDIR)/%.o, $(KEXEC_C_SRCS) \
- $(KEXEC_C_GENERATED_SRCS))
-KEXEC_C_DEPS:= $(patsubst %.c, $(OBJDIR)/%.d, $(KEXEC_C_SRCS))
-KEXEC_C_DUMMY_DEPS:= $(patsubst %.c, $(OBJDIR)/%.d, $(KEXEC_C_GENERATED_SRCS))
-KEXEC_S_OBJS:= $(patsubst %.S, $(OBJDIR)/%.o, $(KEXEC_S_SRCS) \
- $(KEXEC_S_GENERATED_SRCS))
-KEXEC_S_DEPS:= $(patsubst %.S, $(OBJDIR)/%.d, $(KEXEC_S_SRCS))
-KEXEC_S_DUMMY_DEPS:= $(patsubst %.c, $(OBJDIR)/%.d, $(KEXEC_S_GENERATED_SRCS))
+include $(srcdir)/kexec/arch/$(ARCH)/Makefile
+
+KEXEC_C_OBJS:= $(patsubst %.c, %.o, $(KEXEC_C_SRCS) $(KEXEC_C_GENERATED_SRCS))
+KEXEC_C_DEPS:= $(patsubst %.c, %.d, $(KEXEC_C_SRCS))
+KEXEC_S_OBJS:= $(patsubst %.S, %.o, $(KEXEC_S_SRCS) $(KEXEC_S_GENERATED_SRCS))
+KEXEC_S_DEPS:= $(patsubst %.S, %.d, $(KEXEC_S_SRCS))
KEXEC_SRCS:= $(KEXEC_C_SRCS) $(KEXEC_S_SRCS)
KEXEC_OBJS:= $(KEXEC_C_OBJS) $(KEXEC_S_OBJS)
KEXEC_DEPS:= $(KEXEC_C_DEPS) $(KEXEC_S_DEPS)
KEXEC:= $(SBINDIR)/kexec
KEXEC_MANPAGE:= $(MANDIR)/man8/kexec.8
-include $(KEXEC_DEPS)
-
-$(KEXEC_C_DEPS): $(OBJDIR)/%.d: %.c
- mkdir -p $(@D)
- $(CC) $(KCFLAGS) -M $< | sed -e 's|$(patsubst %.d,%.o,$(@F))|$(patsubst %.d,%.o,$(@))|' > $@
-
-$(KEXEC_S_DEPS): $(OBJDIR)/%.d: %.S
- mkdir -p $(@D)
- $(CC) $(KCFLAGS) -M $< | sed -e 's|$(patsubst %.d,%.o,$(@F))|$(patsubst %.d,%.o,$(@))|' > $@
-
-# This is needed to ensure that the rule below that depend
-# on each .c file having a .d file don't break
-$(KEXEC_C_DUMMY_DEPS): $(OBJDIR)/%.d: %.c
- mkdir -p $(@D)
- touch $@
-
-# This is needed to ensure that the rule below that depend
-# on each .S file having a .d file don't break
-$(KEXEC_S_DUMMY_DEPS): $(OBJDIR)/%.d: %.S
- mkdir -p $(@D)
- touch $@
-
-$(KEXEC_C_OBJS): $(OBJDIR)/%.o: %.c $(OBJDIR)/%.d
- mkdir -p $(@D)
- $(CC) $(KCFLAGS) -o $@ -c $<
-
-$(KEXEC_S_OBJS): $(OBJDIR)/%.o: %.S $(OBJDIR)/%.d
- mkdir -p $(@D)
- $(CC) $(KCFLAGS) -o $@ -c $<
+-include $(KEXEC_DEPS)
$(KEXEC): $(KEXEC_OBJS) $(UTIL_LIB)
- mkdir -p $(@D)
- $(CC) $(LDFLAGS) $(EXTRA_LDFLAGS) $(KCFLAGS) -o $@ \
- $(KEXEC_OBJS) $(UTIL_LIB) $(LIBS)
+ @$(MKDIR) -p $(@D)
+ $(LINK.o) -o $@ $^
+
+$(KEXEC): CPPFLAGS+=-I$(srcdir)/kexec/arch/$(ARCH)/include
$(KEXEC_MANPAGE): kexec/kexec.8
- $(MKDIR) -p $(MANDIR)/man8
+ @$(MKDIR) -p $(MANDIR)/man8
cp kexec/kexec.8 $(KEXEC_MANPAGE)
echo::
@echo "KEXEC_C_SRCS $(KEXEC_C_SRCS)"
diff --git a/kexec_test/Makefile b/kexec_test/Makefile
index 70542de..000f832 100644
--- a/kexec_test/Makefile
+++ b/kexec_test/Makefile
@@ -3,28 +3,22 @@
#
RELOC:=0x10000
KEXEC_TEST_S_SRCS:= kexec_test/kexec_test16.S kexec_test/kexec_test.S
-KEXEC_TEST_S_TEMPS:=$(patsubst %.S, $(OBJDIR)/%.s, $(KEXEC_TEST_S_SRCS))
-KEXEC_TEST_S_OBJS:=$(patsubst $(OBJDIR)/%.s, $(OBJDIR)/%.o, $(KEXEC_TEST_S_TEMPS))
-KEXEC_TEST_S_DEPS:=$(patsubst %.S, $(OBJDIR)/%.d, $(KEXEC_TEST_S_SRCS))
+KEXEC_TEST_S_OBJS:=$(patsubst %.S, %.o, $(KEXEC_TEST_S_SRCS))
+KEXEC_TEST_S_DEPS:=$(patsubst %.S, %.d, $(KEXEC_TEST_S_SRCS))
KEXEC_TEST_SRCS:= $(KEXEC_TEST_S_SRCS)
KEXEC_TEST_OBJS:= $(KEXEC_TEST_S_OBJS)
KEXEC_TEST_DEPS:= $(KEXEC_TEST_S_DEPS)
KEXEC_TEST:=$(PKGLIBDIR)/kexec_test
-include $(KEXEC_TEST_DEPS)
+-include $(KEXEC_TEST_DEPS)
-$(KEXEC_TEST_S_DEPS): $(OBJDIR)/%.d: %.S
- mkdir -p $(@D)
- $(CC) -m32 $(CFLAGS) $(EXTRA_CFLAGS) -M $< | sed -e 's|$(patsubst %.d,%.o,$(@F))|$(patsubst %.d,%.o,$(@))|' > $@
-
-$(KEXEC_TEST_S_TEMPS): $(OBJDIR)/%.s: %.S
- mkdir -p $(@D)
- $(CPP) $(CPPFLAGS) $(EXTRA_CPPFLAGS) -DRELOC=$(RELOC) $< > $@
-
-$(KEXEC_TEST_S_OBJS): $(OBJDIR)/%.o: $(OBJDIR)/%.s
- mkdir -p $(@D)
- $(AS) --32 -o $@ $<
+$(KEXEC_TEST): CPPFLAGS+=-DRELOC=$(RELOC)
+$(KEXEC_TEST): ASFLAGS+=-m32
+#$(KEXEC_TEST): LDFLAGS=-m32 -Wl,-e -Wl,_start -Wl,-Ttext -Wl,$(RELOC) \
+# -nostartfiles
+$(KEXEC_TEST): LDFLAGS=-melf_i386 -e _start -Ttext $(RELOC)
-$(KEXEC_TEST): $(KEXEC_TEST_OBJS)
+$(KEXEC_TEST): $(KEXEC_TEST_OBJS)
mkdir -p $(@D)
- $(LD) -m elf_i386 -e _start -Ttext $(RELOC) $(KEXEC_TEST_OBJS) -o $@
+ #$(LINK.o) -o $@ $^
+ $(LD) $(LDFLAGS) -o $@ $^
diff --git a/purgatory/Makefile b/purgatory/Makefile
index adbd814..35fd473 100644
--- a/purgatory/Makefile
+++ b/purgatory/Makefile
@@ -7,59 +7,48 @@
# should keep us from accidentially include unsafe library functions
# or headers.
-ifeq ($(ARCH),ppc64)
-EXTRA_LDFLAGS = -melf64ppc
-endif
-
-PCFLAGS:=-Wall -Os \
- -I$(shell $(CC) -print-file-name=include) \
- -Ipurgatory/include -Ipurgatory/arch/$(ARCH)/include \
- $(CPPFLAGS) $(EXTRA_CPPFLAGS)
-
-PCFLAGS += $(call cc-option, -ffreestanding)
-PCFLAGS += $(call cc-option, -fnobuiltin)
-PCFLAGS += $(call cc-option, -fnostdinc)
-PCFLAGS += $(call cc-option, -fno-zero-initialized-in-bss)
-
PURGATORY_C_SRCS:=
PURGATORY_C_SRCS += purgatory/purgatory.c
PURGATORY_C_SRCS += purgatory/printf.c
PURGATORY_C_SRCS += purgatory/string.c
PURGATORY_S_OBJS:=
+PURGATORY:= purgatory/purgatory.ro
-include purgatory/arch/$(ARCH)/Makefile
+include $(srcdir)/purgatory/arch/$(ARCH)/Makefile
-
-PURGATORY_C_OBJS:= $(patsubst %.c, $(OBJDIR)/%.o, $(PURGATORY_C_SRCS))
-PURGATORY_C_DEPS:= $(patsubst %.c, $(OBJDIR)/%.d, $(PURGATORY_C_SRCS))
-PURGATORY_S_OBJS:= $(patsubst %.S, $(OBJDIR)/%.o, $(PURGATORY_S_SRCS))
-PURGATORY_S_DEPS:= $(patsubst %.S, $(OBJDIR)/%.d, $(PURGATORY_S_SRCS))
+PURGATORY_C_OBJS:= $(patsubst %.c, %.o, $(PURGATORY_C_SRCS))
+PURGATORY_C_DEPS:= $(patsubst %.c, %.d, $(PURGATORY_C_SRCS))
+PURGATORY_S_OBJS:= $(patsubst %.S, %.o, $(PURGATORY_S_SRCS))
+PURGATORY_S_DEPS:= $(patsubst %.S, %.d, $(PURGATORY_S_SRCS))
PURGATORY_SRCS:= $(PURGATORY_S_SRCS) $(PURGATORY_C_SRCS)
-PURGATORY_OBJS:= $(PURGATORY_S_OBJS) $(PURGATORY_C_OBJS)
+PURGATORY_OBJS:= $(PURGATORY_S_OBJS) $(PURGATORY_C_OBJS) purgatory/sha256.o
PURGATORY_DEPS:= $(PURGATORY_S_DEPS) $(PURGATORY_C_DEPS)
-PURGATORY:= $(OBJDIR)/purgatory/purgatory.ro
-include $(PURGATORY_DEPS)
+-include $(PURGATORY_DEPS)
-$(PURGATORY_C_DEPS): $(OBJDIR)/%.d: %.c
- $(MKDIR) -p $(@D)
- $(CC) $(PCFLAGS) -M $< | sed -e 's|$(patsubst %.d,%.o,$(@F))|$(patsubst %.d,%.o,$(@))|' > $@
+# sha256.c needs to be compiled without optimization, else
+# purgatory fails to execute on ia64.
+purgatory/sha256.o: CFLAGS += -O0
-$(PURGATORY_S_DEPS): $(OBJDIR)/%.d: %.S
- $(MKDIR) -p $(@D)
- $(CC) $(PCFLAGS) -M $< | sed -e 's|$(patsubst %.d,%.o,$(@F))|$(patsubst %.d,%.o,$(@))|' > $@
+purgatory/sha256.o: $(srcdir)/util_lib/sha256.c
+ mkdir -p $(@D)
+ $(COMPILE.c) -o $@ $^
-$(PURGATORY_C_OBJS): $(OBJDIR)/%.o: %.c $(OBJDIR)/%.d
- $(MKDIR) -p $(@D)
- $(CC) $(PCFLAGS) -o $@ -c $<
+$(PURGATORY): CC=$(TARGET_CC)
+$(PURGATORY): CFLAGS+=-Os -fno-builtin -ffreestanding \
+ -fno-zero-initialized-in-bss
-$(PURGATORY_S_OBJS): $(OBJDIR)/%.o: %.S $(OBJDIR)/%.d
- $(MKDIR) -p $(@D)
- $(CC) $(PCFLAGS) -o $@ -c $<
+$(PURGATORY): CPPFLAGS+=-I$(srcdir)/purgatory/include \
+ -I$(srcdir)/purgatory/arch/$(ARCH)/include \
+ -I$(shell $(CC) -print-file-name=include)
+$(PURGATORY): LDFLAGS+=--no-undefined -nostartfiles -nostdlib -nodefaultlibs \
+ -e purgatory_start -r
-$(PURGATORY): $(PURGATORY_OBJS) $(UTIL_LIB)
+$(PURGATORY): $(PURGATORY_OBJS)
$(MKDIR) -p $(@D)
- $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) --no-undefined -e purgatory_start -r -o $@ $(PURGATORY_OBJS) $(UTIL_LIB)
+ $(LD) $(LDFLAGS) -o $@ $^
+
+# $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) --no-undefined -e purgatory_start -r -o $@ $(PURGATORY_OBJS) $(UTIL_LIB)
echo::
@echo "PURGATORY_C_SRCS $(PURGATORY_C_SRCS)"
diff --git a/purgatory/arch/ia64/Makefile b/purgatory/arch/ia64/Makefile
index 953b3ee..12d9f75 100644
--- a/purgatory/arch/ia64/Makefile
+++ b/purgatory/arch/ia64/Makefile
@@ -1,9 +1,10 @@
#
# Purgatory ia64
#
-PCFLAGS += -ffixed-r28
PURGATORY_S_SRCS+= purgatory/arch/ia64/entry.S
PURGATORY_C_SRCS+= purgatory/arch/ia64/purgatory-ia64.c
PURGATORY_C_SRCS+= purgatory/arch/ia64/console-ia64.c
PURGATORY_C_SRCS+= purgatory/arch/ia64/vga.c
+$(PURGATORY): CFLAGS += -ffixed-r28
+
diff --git a/purgatory/arch/ppc64/Makefile b/purgatory/arch/ppc64/Makefile
index 0406278..792a0b3 100644
--- a/purgatory/arch/ppc64/Makefile
+++ b/purgatory/arch/ppc64/Makefile
@@ -2,9 +2,11 @@
# Purgatory ppc
#
-PURGATORY_S_SRCS+= purgatory/arch/ppc64/v2wrap.S
+PURGATORY_S_SRCS += purgatory/arch/ppc64/v2wrap.S
PURGATORY_C_SRCS += purgatory/arch/ppc64/purgatory-ppc64.c
PURGATORY_C_SRCS += purgatory/arch/ppc64/console-ppc64.c
PURGATORY_C_SRCS += purgatory/arch/ppc64/crashdump_backup.c
-PCFLAGS += -m64 -mcall-aixdesc
+$(PURGATORY): CFLAGS += -m64 -mcall-aixdesc
+$(PURGATORY): ASFLAGS += -m64 -mcall-aixdesc
+$(PURGATORY): LDFLAGS += -melf64ppc
diff --git a/purgatory/include/string.h b/purgatory/include/string.h
index 87cc4e1..14e172d 100644
--- a/purgatory/include/string.h
+++ b/purgatory/include/string.h
@@ -1,6 +1,8 @@
#ifndef STRING_H
#define STRING_H
+#include <stddef.h>
+
size_t strnlen(const char *s, size_t max);
void* memset(void* s, int c, size_t n);
void* memcpy(void *dest, const void *src, size_t len);
diff --git a/purgatory/purgatory.c b/purgatory/purgatory.c
index aacbb3b..3889cf5 100644
--- a/purgatory/purgatory.c
+++ b/purgatory/purgatory.c
@@ -1,4 +1,4 @@
-#include <stdarg.h>
+
#include <limits.h>
#include <stdint.h>
#include <purgatory.h>
@@ -46,5 +46,3 @@ void purgatory(void)
verify_sha256_digest();
post_verification_setup_arch();
}
-
-#include "../util_lib/sha256.c"
diff --git a/util/Makefile b/util/Makefile
index d6e8e79..5105652 100644
--- a/util/Makefile
+++ b/util/Makefile
@@ -1,4 +1,8 @@
-BIN_TO_HEX:= $(OBJDIR)/bin/bin-to-hex
-$(BIN_TO_HEX): util/bin-to-hex.c
- mkdir -p $(@D)
- $(BUILD_CC) $(BUILD_CFLAGS) $< -o $@
+BIN_TO_HEX:= bin/bin-to-hex
+
+$(BIN_TO_HEX): $(srcdir)/util/bin-to-hex.c
+ @$(MKDIR) -p $(@D)
+ $(LINK.o) -o $@ $^
+
+$(BIN_TO_HEX): CC=$(BUILD_CC)
+$(BIN_TO_HEX): CFLAGS=$(BUILD_CFLAGS)
diff --git a/util_lib/Makefile b/util_lib/Makefile
index 75cde25..f7a7d82 100644
--- a/util_lib/Makefile
+++ b/util_lib/Makefile
@@ -3,26 +3,15 @@
#
UTIL_LIB_SRCS:=util_lib/compute_ip_checksum.c
UTIL_LIB_SRCS+=util_lib/sha256.c
-UTIL_LIB_OBJS:=$(patsubst %.c, $(OBJDIR)/%.o, $(UTIL_LIB_SRCS))
-UTIL_LIB_DEPS:=$(patsubst %.c, $(OBJDIR)/%.d, $(UTIL_LIB_SRCS))
-UTIL_LIB:=$(OBJDIR)/libutil.a
+UTIL_LIB_OBJS:=$(patsubst %.c, %.o, $(UTIL_LIB_SRCS))
+UTIL_LIB_DEPS:=$(patsubst %.c, %.d, $(UTIL_LIB_SRCS))
+UTIL_LIB:=libutil.a
-include $(UTIL_LIB_DEPS)
+-include $(UTIL_LIB_DEPS)
-$(UTIL_LIB_DEPS): $(OBJDIR)/%.d: %.c
- $(MKDIR) -p $(@D)
- $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -M $< | sed -e 's|$(patsubst %.d,%.o,$(@F))|$(patsubst %.d,%.o,$(@))|' > $@
-
-# sha256.c needs to be compiled without optimization, else
-# purgatory fails to execute (on ia64 at least).
-# By placing -O0 after $(CFLAGS), which is provided by
-# the prevailing environment, it overrides any other -O flags
-# provided.
-$(UTIL_LIB_OBJS): $(OBJDIR)/%.o: %.c $(OBJDIR)/%.d
- $(MKDIR) -p $(@D)
- $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -O0 -c -o $@ $<
+$(UTIL_LIB): CPPFLAGS += -I$(srcdir)/util_lib/include
$(UTIL_LIB): $(UTIL_LIB_OBJS)
- $(MKDIR) -p $(@D)
+ @$(MKDIR) -p $(@D)
$(AR) rs $(UTIL_LIB) $(UTIL_LIB_OBJS)