Skip to content

Commit

Permalink
Revamp the makefile system entirely.
Browse files Browse the repository at this point in the history
It was getting really overwrought, and what I did in efivar seemed to
work well, so do a similar thing here.

Signed-off-by: Peter Jones <pjones@redhat.com>
  • Loading branch information
vathpela committed Jul 30, 2015
1 parent 549d349 commit 8ed841f
Show file tree
Hide file tree
Showing 13 changed files with 297 additions and 209 deletions.
4 changes: 4 additions & 0 deletions .gitignore
@@ -1,3 +1,6 @@
.*.d
.*.P
.*.sw?
*.der
*.cer
*.strace
Expand All @@ -8,3 +11,4 @@
*-8be4df61-93ca-11d2-aa0d-00e098032b8c
*.tar.*
*.rpm
core.*
81 changes: 56 additions & 25 deletions Make.defaults
@@ -1,42 +1,73 @@
INSTALLROOT:= $(DESTDIR)
PREFIX := /usr
prefix ?= /usr/
prefix := $(abspath $(prefix))/
libdir ?= $(prefix)lib64/
libdatadir ?= $(prefix)lib/
libexecdir ?= $(prefix)libexec/
datadir ?= $(prefix)share/
mandir ?= $(datadir)man/
includedir ?= $(prefix)include/
bindir ?= $(prefix)bin/
pcdir ?= $(libdir)pkgconfig/
docdir ?= $(prefix)share/doc/
DESTDIR ?=
INSTALLROOT = $(DESTDIR)

INSTALL ?= install
CROSS_COMPILE ?= $(bindir)

PKG_CONFIG = $(CROSS_COMPILE)pkg-config
CC := $(if $(filter default,$(origin CC)),$(CROSS_COMPILE)gcc,$(CC))
CCLD := $(if $(filter undefined,$(origin CCLD)),$(CC),$(CCLD))
CFLAGS ?= -O2 -g
AS := $(CROSS_COMPILE)as
AR := $(CROSS_COMPILE)gcc-ar
RANLIB := $(CROSS_COMPILE)gcc-ranlib
OBJCOPY := $(CROSS_COMPILE)objcopy
LD := $(CROSS_COMPILE)ld
INSTALL := $(CROSS_COMPILE)install

PKGS =

HOSTARCH = $(shell uname -m | sed s,i[3456789]86,ia32,)
ARCH := $(shell uname -m | sed s,i[3456789]86,ia32,)
INCDIR = -I$(TOPDIR)/include
CPPFLAGS = -DCONFIG_$(ARCH)
CFLAGS = -g -O0
BUILDFLAGS := $(CFLAGS) $(ARCH3264) -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants --std=gnu99 -D_GNU_SOURCE -Wno-unused-result -Wno-unused-function
ASFLAGS = $(ARCH3264)
LDFLAGS = -nostdlib
CCLDFLAGS = -shared
INSTALL = install
# XXX this is broken
bindir = $(PREFIX)/bin/
libexecdir = $(PREFIX)/libexec

CC = $(bindir)gcc
AS = $(bindir)as
LD = $(bindir)ld.bfd
AR = $(bindir)ar
RANLIB = $(bindir)ranlib
OBJCOPY = $(bindir)objcopy

SOFLAGS = -shared
clang_cflags =
gcc_cflags = -Wmaybe-uninitialized
cflags = $(CFLAGS) $(ARCH3264) \
-Wall -Wsign-compare -Wno-unused-result -Wno-unused-function\
-std=gnu11 -fshort-wchar -fPIC -flto -fno-strict-aliasing \
-fno-merge-constants \
-D_GNU_SOURCE -DCONFIG_$(ARCH) -I${TOPDIR}/include \
$(if $(filter $(CC),clang),$(clang_cflags), ) \
$(if $(filter $(CC),gcc),$(gcc_cflags), ) \
$(call pkg-config-cflags)
clang_ccldflags =
gcc_ccldflags = -fno-merge-constants \
-Wl,--fatal-warnings,--no-allow-shlib-undefined,--default-symver \
-Wl,-O2 -Wl,--no-undefined-version -Wl,-z,relro,-z,now
ccldflags = $(cflags) $(CCLDFLAGS) $(LDFLAGS) \
$(if $(filter $(CCLD),clang),$(clang_ccldflags),) \
$(if $(filter $(CCLD),gcc),$(gcc_ccldflags),) \
$(call pkg-config-ccldflags)
efi_cflags = $(cflags)
ASFLAGS = $(ARCH3264)
CPPFLAGS ?=

LDLIBS = $(foreach lib,$(LIBS),-l$(lib)) $(call pkg-config-ldlibs)

ifeq ($(ARCH),ia64)
CFLAGS += -mfixed-range=f32-f127
LIBDIR = $(PREFIX)/lib64
efi_cflags += -mfixed-range=f32-f127
endif

ifeq ($(ARCH), ia32)
LIBDIR := $(PREFIX)/lib
ifeq ($(HOSTARCH), x86_64)
ARCH3264 := -m32
endif
endif

ifeq ($(ARCH), x86_64)
CFLAGS += -mno-red-zone
LIBDIR := $(PREFIX)/lib64
efi_cflags += -mno-red-zone
ifeq ($(HOSTARCH), ia32)
ARCH3264 := -m64
endif
Expand Down
17 changes: 17 additions & 0 deletions Make.deps
@@ -0,0 +1,17 @@
SRCDIR = $(realpath .)
TOPDIR = $(realpath ..)

include $(TOPDIR)/Make.version
include $(TOPDIR)/Make.rules
include $(TOPDIR)/Make.defaults

.%.d : %.c
$(CC) $(cflags) $(CPPFLAGS) -MM -MG -MF $@ $^

.%.d : %.S
$(CC) $(cflags) $(CPPFLAGS) -MM -MG -MF $@ $^

SOURCES ?=
deps :
echo SOURCES=$(SOURCES)
deps : $(call deps-of,$(filter-out %.h,$(SOURCES)))
6 changes: 6 additions & 0 deletions Make.efirules
@@ -1,3 +1,9 @@
default : all

.PHONY: default all deps clean install test

include $(TOPDIR)/Make.version

%.efi : %.so
$(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
-j .rela -j .reloc --target=$(FORMAT) $*.so $@
Expand Down
79 changes: 70 additions & 9 deletions Make.rules
@@ -1,22 +1,83 @@
default : all

.PHONY: default all deps clean install install_systemd install_sysvinit test

include $(TOPDIR)/Make.version

all : deps

deps :

clean :

install :

install_systemd :

install_sysvinit :

test :

%.a :
$(AR) -cvqs $@ $^

% : %.o
$(CC) $(CCLDFLAGS) -o $@ $^ $(foreach lib,$(LIBS),-l$(lib)) $(foreach pklib,$(PKLIBS), $(shell pkg-config --libs-only-l --libs-only-other $(pklib))) -lpthread
% : %.c

% :
$(CCLD) $(ccldflags) $(CPPFLAGS) -o $@ $^ $(LDLIBS)

%.so :
$(CC) $(INCDIR) $(BUILDFLAGS) -Wl,-soname,$(SONAME) $(CCLDFLAGS) $^ -o $@
$(CCLD) $(ccldflags) $(CPPFLAGS) $(SOFLAGS) \
-Wl,-soname,$@.$(MAJOR_VERSION) \
-o $@ $^ $(LDLIBS)

%.o: %.c
$(CC) $(INCDIR) $(BUILDFLAGS) $(CPPFLAGS) -c $< -o $@

.%.P : %.c
$(CC) $(INCDIR) $(BUILDFLAGS) $(CPPFLAGS) -M -MM -MF $@ $^
$(CC) $(cflags) $(CPPFLAGS) -c -o $@ $(filter %.c %.o %.S,$^)

%.S: %.c
$(CC) $(INCDIR) $(BUILDFLAGS) $(CPPFLAGS) -S $< -o $@
$(CC) $(cflags) $(CPPFLAGS) -S $< -o $@

%.E: %.c
$(CC) $(INCDIR) $(BUILDFLAGS) $(CPPFLAGS) -E $< -o $@
$(CC) $(cflags) $(CPPFLAGS) -E $< -o $@

%.c : %.h

.%.d :

define substitute-version =
sed \
-e "s,@@VERSION@@,$(VERSION),g" \
-e "s,@@LIBDIR@@,$(libdir),g" \
-e "s,@@LIBEXECDIR@@,$(libexecdir),g" \
$(1) > $(2)
endef

%.pc : %.pc.in
@$(call substitute-version,$<,$@)

%.spec : %.spec.in
@$(call substitute-version,$<,$@)

%.service : %.service.in
@$(call substitute-version,$<,$@)

%.sysvinit : %.sysvinit.in
@$(call substitute-version,$<,$@)

pkg-config-cflags = \
$(shell if [ -n "$(PKGS)" ]; then $(PKG_CONFIG) --cflags $(PKGS); fi)
pkg-config-ldflags = \
$(shell if [ -n "$(PKGS)" ]; then $(PKG_CONFIG) --libs-only-L --libs-only-other $(PKGS) ; fi)
pkg-config-ldlibs = \
$(shell if [ -n "$(PKGS)" ]; then $(PKG_CONFIG) --libs-only-l $(PKGS) ; fi)

objects-of = \
$(patsubst %.c,%.o,$(1))

define deps-of =
$(foreach src,$(filter %.c,$(1)),$(patsubst %.c,.%.d,$(src))) \
$(foreach src,$(filter %.S,$(1)),$(patsubst %.S,.%.d,$(src)))
endef

$(TOPDIR)/libdpe/%.a $(TOPDIR)/libdpe/% :
$(MAKE) -C $(TOPDIR)/libdpe $(notdir $@)
3 changes: 3 additions & 0 deletions Make.version
@@ -0,0 +1,3 @@
MAJOR_VERSION = 0
MINOR_VERSION = 110
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION)
42 changes: 22 additions & 20 deletions Makefile
@@ -1,33 +1,35 @@
TOPDIR = $(shell echo $$PWD)
SRCDIR = $(realpath .)
TOPDIR = $(realpath .)

include $(TOPDIR)/Make.version
include $(TOPDIR)/Make.rules
include $(TOPDIR)/Make.defaults

SUBDIRS := include libdpe src
DOCDIR := /share/doc/
VERSION = 0.110

all : $(SUBDIRS)

$(SUBDIRS) :
$(MAKE) -C $@ TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH)

clean :
@for x in $(SUBDIRS) ; do $(MAKE) -C $${x} TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH) $@ ; done

install :
@for x in $(SUBDIRS) ; do $(MAKE) -C $${x} TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH) $@ ; done
$(INSTALL) -d -m 755 $(INSTALLROOT)$(PREFIX)$(DOCDIR)/pesign/
$(INSTALL) -pm 644 COPYING $(INSTALLROOT)$(PREFIX)$(DOCDIR)/pesign/
$(INSTALL) -d -m 755 $(INSTALLROOT)$(prefix)$(docdir)/pesign-$(VERSION)/
$(INSTALL) -pm 644 COPYING $(INSTALLROOT)$(prefix)$(docdir)/pesign-$(VERSION)/
@set -e ; for x in $(SUBDIRS) ; do \
$(MAKE) -C $$x $@ ; \
done

install_systemd:
@for x in $(SUBDIRS) ; do $(MAKE) -C $${x} TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH) $@ ; done
install_systemd install_sysvinit : install
@set -e ; for x in $(SUBDIRS) ; do \
$(MAKE) -C $$x $@ ; \
done

install_sysvinit:
@for x in $(SUBDIRS) ; do $(MAKE) -C $${x} TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH) $@ ; done
distclean : | clean

.PHONY: $(SUBDIRS) clean install
clean deps all : | Make.version
@set -e ; for x in $(SUBDIRS) ; do \
$(MAKE) -C $$x $@ ; \
done

include $(TOPDIR)/Make.rules
$(SUBDIRS) :
$(MAKE) -C $@ all

.PHONY: $(SUBDIRS)

GITTAG = $(VERSION)

Expand Down
27 changes: 10 additions & 17 deletions include/Makefile
@@ -1,25 +1,18 @@
SRCDIR = .
TOPDIR = $(SRCDIR)/..
SRCDIR = $(realpath .)
TOPDIR = $(realpath ..)

include $(TOPDIR)/Make.version
include $(TOPDIR)/Make.rules
include $(TOPDIR)/Make.defaults

SUBDIRS = libdpe

all : $(SUBDIRS)
clean all install :
for x in $(SUBDIRS) ; do \
$(MAKE) -C $$x $@ ; \
done

$(SUBDIRS) :
$(MAKE) -C $@ TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH)

clean :
@for x in $(SUBDIRS) ; do $(MAKE) -C $${x} TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH) $@ ; done

install :
@for x in $(SUBDIRS) ; do $(MAKE) -C $${x} TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH) $@ ; done

install_systemd:
$(MAKE) -C $@ all

install_sysvinit:

.PHONY: all $(SUBDIRS) clean install

include $(TOPDIR)/Make.rules
.PHONY: $(SUBDIRS)
24 changes: 7 additions & 17 deletions include/libdpe/Makefile
@@ -1,20 +1,10 @@
SRCDIR = .
TOPDIR = $(SRCDIR)/..
SRCDIR = $(realpath .)
TOPDIR = $(realpath ../..)

include $(TOPDIR)/Make.version
include $(TOPDIR)/Make.rules
include $(TOPDIR)/Make.defaults

SUBDIRS = libdpe

all:

clean:

install:
$(INSTALL) -d -m 755 $(INSTALLROOT)$(PREFIX)/include/libdpe/
$(INSTALL) -m 644 *.h $(INSTALLROOT)$(PREFIX)/include/libdpe/

install_systemd:

install_sysvinit:

include $(TOPDIR)/Make.rules
#install:
# $(INSTALL) -d -m 755 $(INSTALLROOT)$(PREFIX)/include/libdpe/
# $(INSTALL) -m 644 *.h $(INSTALLROOT)$(PREFIX)/include/libdpe/

0 comments on commit 8ed841f

Please sign in to comment.