Btrfs-progs: add static compile target

Sometimes, when you least expect it, a static binary is what you need to
rescue your data... Or just get a good enough handle on things to make
it work again ;)

"make static" is a gift to you, dear user with filesystem problems!

Anyway, on a more serious note, changed the cflags and ldflags so that
we create a smaller binary, 1.1MB stripped on my 64 bit system
(2.7MB with debug data)

Signed-off-by: Ian Kumlien <pomac@demius.net>
This commit is contained in:
Ian Kumlien 2013-01-26 00:12:28 +01:00 committed by David Sterba
parent 50e3ff573c
commit 6e0ade1767
2 changed files with 28 additions and 1 deletions

2
.gitignore vendored
View File

@ -1,8 +1,10 @@
*.o *.o
*.static.o
.*.o.d .*.o.d
version.h version.h
man/*.gz man/*.gz
btrfs btrfs
btrfs.static
btrfs-debug-tree btrfs-debug-tree
btrfs-map-logical btrfs-map-logical
btrfs-show btrfs-show

View File

@ -39,6 +39,16 @@ progs = btrfsctl mkfs.btrfs btrfs-debug-tree btrfs-show btrfs-vol btrfsck \
btrfs btrfs-map-logical btrfs-image btrfs-zero-log btrfs-convert \ btrfs btrfs-map-logical btrfs-image btrfs-zero-log btrfs-convert \
btrfs-find-root btrfs-restore btrfstune btrfs-show-super btrfs-find-root btrfs-restore btrfstune btrfs-show-super
# Create all the static targets
static_objects = $(patsubst %.o, %.static.o, $(objects))
static_cmds_objects = $(patsubst %.o, %.static.o, $(cmds_objects))
static_progs = $(patsubst %.o, %.static.o, $(progs))
# Define static compilation flags
STATIC_CFLAGS = $(CFLAGS) -ffunction-sections -fdata-sections
STATIC_LDFLAGS = -static -Wl,--gc-sections
STATIC_LIBS = $(LIBS) -lpthread
# make C=1 to enable sparse # make C=1 to enable sparse
ifdef C ifdef C
check = sparse $(CHECKFLAGS) check = sparse $(CHECKFLAGS)
@ -51,9 +61,18 @@ endif
@echo " [CC] $@" @echo " [CC] $@"
$(Q)$(CC) $(DEPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c $< $(Q)$(CC) $(DEPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c $<
%.static.o: %.c
@echo " [CC] $@"
$(Q)$(CC) $(DEPFLAGS) $(AM_CFLAGS) $(STATIC_CFLAGS) -c $< -o $@
all: version.h $(progs) manpages all: version.h $(progs) manpages
#
# NOTE: For static compiles, you need to have all the required libs
# static equivalent available
#
static: version.h btrfs.static
version.h: version.h:
$(Q)bash version.sh $(Q)bash version.sh
@ -62,6 +81,11 @@ btrfs: $(objects) btrfs.o help.o $(cmds_objects)
$(Q)$(CC) $(CFLAGS) -o btrfs btrfs.o help.o $(cmds_objects) \ $(Q)$(CC) $(CFLAGS) -o btrfs btrfs.o help.o $(cmds_objects) \
$(objects) $(LDFLAGS) $(LIBS) -lpthread $(objects) $(LDFLAGS) $(LIBS) -lpthread
btrfs.static: $(static_objects) btrfs.static.o help.static.o $(static_cmds_objects)
@echo " [LD] $@"
$(Q)$(CC) $(STATIC_CFLAGS) -o btrfs.static btrfs.static.o help.static.o $(static_cmds_objects) \
$(static_objects) $(STATIC_LDFLAGS) $(STATIC_LIBS)
calc-size: $(objects) calc-size.o calc-size: $(objects) calc-size.o
@echo " [LD] $@" @echo " [LD] $@"
$(Q)$(CC) $(CFLAGS) -o calc-size calc-size.o $(objects) $(LDFLAGS) $(LIBS) $(Q)$(CC) $(CFLAGS) -o calc-size calc-size.o $(objects) $(LDFLAGS) $(LIBS)
@ -151,7 +175,8 @@ install-man:
clean : clean :
@echo "Cleaning" @echo "Cleaning"
$(Q)rm -f $(progs) cscope.out *.o .*.d btrfs-convert btrfs-image btrfs-select-super \ $(Q)rm -f $(progs) cscope.out *.o .*.d btrfs-convert btrfs-image btrfs-select-super \
btrfs-zero-log btrfstune dir-test ioctl-test quick-test version.h btrfs-zero-log btrfstune dir-test ioctl-test quick-test btrfs.static \
version.h
$(Q)$(MAKE) $(MAKEOPTS) -C man $@ $(Q)$(MAKE) $(MAKEOPTS) -C man $@
install: $(progs) install-man install: $(progs) install-man