1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
default : all
ifneq ($(origin TOPDIR),undefined)
TOP := $(abspath $(TOPDIR))
else
TOP := $(abspath ..)
endif
include $(TOP)/Make.defaults
include $(TOP)/Make.rules
VPATH = $(TOP)/linux
LIB_LIBS= pthread
BIN_LIBS= popt pthread
PKLIBS = efivar efiboot
CFLAGS ?= -g3 -Og -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 \
-fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 \
-grecord-gcc-switches
PJONES =
BIN_CCLDFLAGS = $(foreach lib,$(BIN_LIBS),-l$(lib)) \
$(foreach pklib,$(PKLIBS), \
$(shell $(PKG_CONFIG) --libs-only-l --libs-only-other $(pklib))) \
$(LDFLAGS) -pie -fPIE -Wl,-z,relro,-z,now -L.
LIB_CCLDFLAGS = $(foreach lib,$(LIB_LIBS),-l$(lib)) \
$(foreach pklib,$(PKLIBS), \
$(shell $(PKG_CONFIG) --libs-only-l --libs-only-other $(pklib))) \
$(LDFLAGS) -shared -fPIC -Wl,-z,relro,-z,now
HAVE_LIBSMBIOS := $(shell $(PKG_CONFIG) --exists libsmbios_c && \
echo yes || echo no)
ifeq ($(HAVE_LIBSMBIOS),yes)
PKLIBS += libsmbios_c
CFLAGS += -DFWUPDATE_HAVE_LIBSMBIOS__
endif
BUILDFLAGS := $(CFLAGS) -Wall -Wextra -Werror -Wno-error=cpp \
-Wno-unused-result -Wno-unused-function \
-Wsign-compare -Werror=sign-compare \
-Wno-error=missing-field-initializers -Wno-missing-field-initializers \
-fshort-wchar --std=gnu11 \
-DLOCALEDIR=\"$(localedir)\" -D_GNU_SOURCE \
-DFWUP_EFI_DIR_NAME=\"$(EFIDIR)\" \
-DFWUP_ESP_MOUNTPOINT=\"$(ESPMOUNTPOINT)\" \
-I include -I $(TOP)/linux/include/ -iquote $(TOP)/include/ \
$(foreach pklib,$(PKLIBS), $(shell $(PKG_CONFIG) --cflags $(pklib))) \
$(PJONES)
BINTARGETS=fwupdate
INCTARGETS=include/fwup-version.h $(VPATH)/include/fwup.h
LIBTARGETS=libfwup.so
PCTARGETS=fwup.pc
POTARGETS = fwupdate.po libfwup.po
TARGETS=$(BINTARGETS) $(INCTARGETS) $(foreach x,$(LIBTARGETS),$(patsubst %.so,%.map,$(x)) $(x).1.$(VERSION) $(x).1 $(x)) $(PCTARGETS) $(POTARGETS) cleanup.service cleanup
.SUFFIXES:
all : $(TARGETS)
fwupdate : libfwup.so
include-dir :
if [ ! -d include ]; then \
$(INSTALL) -d -m 755 include ; \
fi
fwupdate.c : | include/fwup.h
libfwup.c : | include/fwup.h
include/fwup.h : | include/fwup-version.h
include/fwup-version.h : | include-dir
abicheck : | clean $(LIBTARGETS)
abicheck : $(patsubst %.so,%.abicheck,$(LIBTARGETS))
abiclean :
@rm -vf $(patsubst %.so,%.abixml,$(LIBTARGETS))
abixml : | $(LIBTARGETS)
abixml : $(patsubst %.so,%.abixml,$(LIBTARGETS))
abiupdate : abixml
git add $(patsubst %.so,%.abixml,$(LIBTARGETS))
% : %.o
$(CC) $(BUILDFLAGS) -o $@ $(patsubst lib%.so,-l%,$^) $(BIN_CCLDFLAGS)
%.so.1.$(VERSION) : %.o | %.map
$(CC) $(BUILDFLAGS) \
-Wl,-soname,$(patsubst %.o,%.so.1,$<) \
-Wl,--version-script=$(patsubst %.o,%.map,$<) \
-o $@ $< $(LIB_CCLDFLAGS)
%.so.1 : %.so.1.$(VERSION)
ln -sf $< $@
%.so : %.so.1.$(VERSION)
ln -sf $< $@
%.po : %.c
$(XGETTEXT) -a --package-name=$(patsubst %.po,%,$@) --package-version=$(VERSION) -o $@ $^
%.o : %.c
$(CC) $(BUILDFLAGS) -fPIC -c -o $@ $^
% : %.in
sed -e "s,@@FWUP_VERSION@@,$(VERSION),g" \
-e "s,@@FWUP_MAJOR_VERSION@@,$(MAJOR_VERSION),g" \
-e "s,@@FWUP_MINOR_VERSION@@,$(MINOR_VERSION),g" \
-e "s,@@PREFIX@@,$(prefix),g" \
-e "s,@@EXEC_PREFIX@@,$(exec_prefix),g" \
-e "s,@@SHAREDSTATEDIR@@,$(sharedstatedir),g" \
-e "s,@@ESPMOUNTPOINT@@,$(ESPMOUNTPOINT),g" \
-e "s,@@EFIDIR@@,$(EFIDIR),g" \
-e "s,@@LIBDIR@@,$(libdir),g" \
-e "s,@@LIBEXECDIR@@,$(libexecdir),g" \
-e "s,@@INCLUDEDIR@@,$(includedir),g" \
$< > $@
tester : tester.c
$(CC) -Wall -Werror -ggdb -L. -I./include $(shell $(PKG_CONFIG) --cflags efivar) \
$(shell $(PKG_CONFIG) --libs efivar) -lfwup -o $@ $^
test : tester
LD_LIBRARY_PATH=$(shell pwd) ./tester
clean :
@rm -vf $(BINTARGETS) $(LIBTARGETS) $(PCTARGETS) $(POTARGETS) *.o
@rm -vf libfwup.so* *.map
@rm -vf cleanup.service cleanup
@rm -vf include/fwup-version.h
install : check_efidir_error all
$(INSTALL) -d -m 755 $(DESTDIR)$(libdir)
$(foreach x, $(LIBTARGETS), $(INSTALL) -m 755 $(x).1.$(VERSION) $(DESTDIR)$(libdir);)
$(INSTALL) -d -m 755 $(DESTDIR)$(pcdir)
$(foreach x, $(PCTARGETS), $(INSTALL) -m 644 $(x) $(DESTDIR)$(pcdir) ;)
$(INSTALL) -d -m 755 $(DESTDIR)$(includedir)/
$(INSTALL) -m 644 $(INCTARGETS) $(DESTDIR)$(includedir)/
$(INSTALL) -d -m 755 $(DESTDIR)$(localedir)/en/
$(INSTALL) -m 644 $(POTARGETS) $(DESTDIR)$(localedir)/en/
$(INSTALL) -d -m 755 $(DESTDIR)$(bindir)/
$(foreach x, $(BINTARGETS), $(INSTALL) -m 755 $(x) $(DESTDIR)$(bindir);)
$(foreach x, $(wildcard *.so.1.$(VERSION)), \
ln -fs $(x) $(patsubst %.so.1.$(VERSION),%.so.1,$(DESTDIR)$(libdir)/$(x)) ;\
ln -fs $(x) $(patsubst %.so.1.$(VERSION),%.so,$(DESTDIR)$(libdir)/$(x)) ;\
)
$(INSTALL) -d -m 755 $(DESTDIR)$(sharedstatedir)/fwupdate/
$(INSTALL) -d -m 755 $(DESTDIR)$(libexecdir)/fwupdate/
$(INSTALL) -m 755 cleanup $(DESTDIR)$(libexecdir)/fwupdate/cleanup
$(INSTALL) -d -m 755 $(DESTDIR)$(libdatadir)/systemd/system
$(INSTALL) -m 644 cleanup.service \
$(DESTDIR)$(libdatadir)/systemd/system/fwupdate-cleanup.service
$(INSTALL) -d -m 755 $(DESTDIR)$(datadir)/bash-completion/completions/
$(INSTALL) -m 755 $(VPATH)/bash-completion \
$(DESTDIR)$(datadir)/bash-completion/completions/fwupdate
|