btrfs-progs: build: add support for debugging builds
[platform/upstream/btrfs-progs.git] / Makefile.in
index 82a3143..7e65efb 100644 (file)
@@ -10,7 +10,9 @@
 # Tuning by variables (environment or make arguments):
 #   V=1            verbose, print command lines (default: quiet)
 #   C=1            run checker before compilation (default checker: sparse)
+#   D=1            debugging build, turn off optimizations
 #   W=123          build with warnings (default: off)
+#   DEBUG_CFLAGS   additional compiler flags for debugging build
 #   EXTRA_CFLAGS   additional compiler flags
 #   EXTRA_LDFLAGS  additional linker flags
 #
@@ -36,13 +38,20 @@ DISABLE_BTRFSCONVERT = @DISABLE_BTRFSCONVERT@
 EXTRA_CFLAGS :=
 EXTRA_LDFLAGS :=
 
+DEBUG_CFLAGS_DEFAULT = -O0 -U_FORTIFY_SOURCE -ggdb3
+DEBUG_CFLAGS_INTERNAL =
+DEBUG_CFLAGS :=
+
 # Common build flags
 CFLAGS = @CFLAGS@ \
         -include config.h \
         -DBTRFS_FLAT_INCLUDES \
         -D_XOPEN_SOURCE=700  \
         -fno-strict-aliasing \
-        -fPIC $(EXTRAWARN_CFLAGS) $(EXTRA_CFLAGS)
+        -fPIC \
+        $(EXTRAWARN_CFLAGS) \
+        $(DEBUG_CFLAGS_INTERNAL) \
+        $(EXTRA_CFLAGS)
 
 LDFLAGS = @LDFLAGS@ \
          -rdynamic $(EXTRA_LDFLAGS)
@@ -75,7 +84,8 @@ cmds_objects = cmds-subvolume.o cmds-filesystem.o cmds-device.o cmds-scrub.o \
               cmds-inspect.o cmds-balance.o cmds-send.o cmds-receive.o \
               cmds-quota.o cmds-qgroup.o cmds-replace.o cmds-check.o \
               cmds-restore.o cmds-rescue.o chunk-recover.o super-recover.o \
-              cmds-property.o cmds-fi-usage.o
+              cmds-property.o cmds-fi-usage.o cmds-inspect-dump-tree.o \
+              cmds-inspect-dump-super.o cmds-inspect-tree-stats.o cmds-fi-du.o
 libbtrfs_objects = send-stream.o send-utils.o rbtree.o btrfs-list.o crc32c.o \
                   uuid-tree.o utils-lib.o rbtree-utils.o
 libbtrfs_headers = send-stream.h send-utils.h send.h rbtree.h btrfs-list.h \
@@ -83,11 +93,15 @@ libbtrfs_headers = send-stream.h send-utils.h send.h rbtree.h btrfs-list.h \
               extent_io.h ioctl.h ctree.h btrfsck.h version.h
 TESTS = fsck-tests.sh convert-tests.sh
 
+udev_rules = 64-btrfs-dm.rules
+
 prefix ?= @prefix@
 exec_prefix = @exec_prefix@
 bindir = @bindir@
 libdir ?= @libdir@
 incdir = @includedir@/btrfs
+udevdir = @UDEVDIR@
+udevruledir = ${udevdir}/rules.d
 
 ifeq ("$(origin V)", "command line")
   BUILD_VERBOSE = $(V)
@@ -102,6 +116,10 @@ else
   Q = @
 endif
 
+ifeq ("$(origin D)", "command line")
+  DEBUG_CFLAGS_INTERNAL = $(DEBUG_CFLAGS_DEFAULT) $(DEBUG_CFLAGS)
+endif
+
 MAKEOPTS = --no-print-directory Q=$(Q)
 
 # build all by default
@@ -125,6 +143,12 @@ endif
 # specify btrfs_foo_libs = <list of libs>; see $($(subst...)) rules below
 btrfs_convert_libs = @EXT2FS_LIBS@ @COM_ERR_LIBS@
 btrfs_fragments_libs = -lgd -lpng -ljpeg -lfreetype
+btrfs_debug_tree_objects = cmds-inspect-dump-tree.o
+btrfs_show_super_objects = cmds-inspect-dump-super.o
+btrfs_calc_size_objects = cmds-inspect-tree-stats.o
+
+# collect values of the variables above
+standalone_deps = $(foreach dep,$(patsubst %,%_objects,$(subst -,_,$(filter btrfs-%, $(progs)))),$($(dep)))
 
 SUBDIRS =
 BUILDDIRS = $(patsubst %,build-%,$(SUBDIRS))
@@ -209,6 +233,10 @@ test-fuzz: btrfs
        @echo "    [TEST]   fuzz-tests.sh"
        $(Q)bash tests/fuzz-tests.sh
 
+test-cli: btrfs
+       @echo "    [TEST]   cli-tests.sh"
+       $(Q)bash tests/cli-tests.sh
+
 test-clean:
        @echo "Cleaning tests"
        $(Q)bash tests/clean-tests.sh
@@ -236,8 +264,7 @@ $(libs_static): $(libbtrfs_objects)
 
 $(lib_links):
        @echo "    [LN]     $@"
-       $(Q)$(LN_S) -f libbtrfs.so.0.1 libbtrfs.so.0
-       $(Q)$(LN_S) -f libbtrfs.so.0.1 libbtrfs.so
+       $(Q)$(LN_S) -f libbtrfs.so.0.1 $@
 
 # keep intermediate files from the below implicit rules around
 .PRECIOUS: $(addsuffix .o,$(progs))
@@ -249,15 +276,18 @@ $(lib_links):
 # For static variants, use an extra $(subst) to get rid of the ".static"
 # from the target name before translating to list of libs
 
-btrfs-%.static: $(static_objects) btrfs-%.static.o $(static_libbtrfs_objects)
+btrfs-%.static: $(static_objects) btrfs-%.static.o $(static_libbtrfs_objects) $(patsubst %.o,%.static.o,$(standalone_deps))
        @echo "    [LD]     $@"
        $(Q)$(CC) $(STATIC_CFLAGS) -o $@ $@.o $(static_objects) \
+               $(patsubst %.o, %.static.o, $($(subst -,_,$(subst .static,,$@)-objects))) \
                $(static_libbtrfs_objects) $(STATIC_LDFLAGS) \
                $($(subst -,_,$(subst .static,,$@)-libs)) $(STATIC_LIBS)
 
-btrfs-%: $(objects) $(libs_static) btrfs-%.o
+btrfs-%: $(objects) $(libs_static) btrfs-%.o $(standalone_deps)
        @echo "    [LD]     $@"
-       $(Q)$(CC) $(CFLAGS) -o $@ $(objects) $@.o $(libs_static) \
+       $(Q)$(CC) $(CFLAGS) -o $@ $(objects) $@.o \
+               $($(subst -,_,$@-objects)) \
+               $(libs_static) \
                $(LDFLAGS) $(LIBS) $($(subst -,_,$@-libs))
 
 btrfs: $(objects) btrfs.o $(cmds_objects) $(libs_static)
@@ -377,6 +407,10 @@ install: $(libs) $(progs_install) $(INSTALLDIRS)
        cp -a $(lib_links) $(DESTDIR)$(libdir)
        $(INSTALL) -m755 -d $(DESTDIR)$(incdir)
        $(INSTALL) -m644 $(headers) $(DESTDIR)$(incdir)
+ifneq ($(udevdir),)
+       $(INSTALL) -m755 -d $(DESTDIR)$(udevruledir)
+       $(INSTALL) -m644 $(udev_rules) $(DESTDIR)$(udevruledir)
+endif
 
 install-static: $(progs_static) $(INSTALLDIRS)
        $(INSTALL) -m755 -d $(DESTDIR)$(bindir)