]> www.infradead.org Git - mtd-utils.git/commitdiff
rewrite build system to avoid recursion
authorMike Frysinger <vapier@gentoo.org>
Sat, 25 Jun 2011 17:20:37 +0000 (13:20 -0400)
committerArtem Bityutskiy <dedekind1@gmail.com>
Mon, 27 Jun 2011 06:07:07 +0000 (09:07 +0300)
The ubi-utils/src/ subdir is tossed as it just complicates things for no
real gain.  The dictionary.h header is relocated to the ubi-utils/include/
since other headers in there need it.

The top level clean is replaced with a `find -delete` on objects, so it
might prune more than necessary, but many projects now do this sort of
thing and no one complained there.

A "mkdep" helper generates the actual rule, and the variables are used
with "foreach" to expand these automatically.

The tests subdir is updated only to reflect the ubi-utils source move.
Otherwise, it is left untouched as making that non-recursive isn't really
worth the effort.

While we're gutting things, also through in kbuild style output while
building to make things more legible.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Artem Bityutskiy <dedekind1@gmail.com>
27 files changed:
Makefile
common.mk
lib/Makefile [deleted file]
mkfs.ubifs/Makefile [deleted file]
tests/fs-tests/integrity/Makefile
tests/ubi-tests/Makefile
ubi-utils/Makefile [deleted file]
ubi-utils/dictionary.c [moved from ubi-utils/src/dictionary.c with 100% similarity]
ubi-utils/include/dictionary.h [moved from ubi-utils/src/dictionary.h with 100% similarity]
ubi-utils/libiniparser.c [moved from ubi-utils/src/libiniparser.c with 100% similarity]
ubi-utils/libscan.c [moved from ubi-utils/src/libscan.c with 100% similarity]
ubi-utils/libubi.c [moved from ubi-utils/src/libubi.c with 100% similarity]
ubi-utils/libubi_int.h [moved from ubi-utils/src/libubi_int.h with 100% similarity]
ubi-utils/libubigen.c [moved from ubi-utils/src/libubigen.c with 100% similarity]
ubi-utils/mtdinfo.c [moved from ubi-utils/src/mtdinfo.c with 100% similarity]
ubi-utils/ubiattach.c [moved from ubi-utils/src/ubiattach.c with 100% similarity]
ubi-utils/ubicrc32.c [moved from ubi-utils/src/ubicrc32.c with 100% similarity]
ubi-utils/ubidetach.c [moved from ubi-utils/src/ubidetach.c with 100% similarity]
ubi-utils/ubiformat.c [moved from ubi-utils/src/ubiformat.c with 100% similarity]
ubi-utils/ubimkvol.c [moved from ubi-utils/src/ubimkvol.c with 100% similarity]
ubi-utils/ubinfo.c [moved from ubi-utils/src/ubinfo.c with 100% similarity]
ubi-utils/ubinize.c [moved from ubi-utils/src/ubinize.c with 100% similarity]
ubi-utils/ubirename.c [moved from ubi-utils/src/ubirename.c with 100% similarity]
ubi-utils/ubirmvol.c [moved from ubi-utils/src/ubirmvol.c with 100% similarity]
ubi-utils/ubirsvol.c [moved from ubi-utils/src/ubirsvol.c with 100% similarity]
ubi-utils/ubiupdatevol.c [moved from ubi-utils/src/ubiupdatevol.c with 100% similarity]
ubi-utils/ubiutils-common.c [moved from ubi-utils/src/ubiutils-common.c with 100% similarity]

index d69206ac9b24f3552d25eb9547c79842ee9ff820..bd5ada3dfc361dde92717936e1ed020f61394ba9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 
 # -*- sh -*-
 
-CPPFLAGS += -I./include $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
+CPPFLAGS += -I./include -I./ubi-utils/include $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
 
 ifeq ($(WITHOUT_XATTR), 1)
   CPPFLAGS += -DWITHOUT_XATTR
@@ -12,10 +12,10 @@ else
   LZOLDLIBS = -llzo2
 endif
 
-SUBDIRS = lib ubi-utils mkfs.ubifs
 TESTS = tests
 
-TARGETS = ftl_format flash_erase nanddump doc_loadbios \
+MTD_BINS = \
+       ftl_format flash_erase nanddump doc_loadbios \
        ftl_check mkfs.jffs2 flash_lock flash_unlock flash_info \
        flash_otp_info flash_otp_dump mtd_debug flashcp nandwrite nandtest \
        jffs2dump \
@@ -23,16 +23,21 @@ TARGETS = ftl_format flash_erase nanddump doc_loadbios \
        rfddump rfdformat \
        serve_image recv_image \
        sumtool #jffs2reader
+UBI_BINS = \
+       ubiupdatevol ubimkvol ubirmvol ubicrc32 ubinfo ubiattach \
+       ubidetach ubinize ubiformat ubirename mtdinfo ubirsvol
+
+BINS = $(MTD_BINS)
+BINS += mkfs.ubifs/mkfs.ubifs
+BINS += $(addprefix ubi-utils/,$(UBI_BINS))
 SCRIPTS = flash_eraseall
 
-LDLIBS = -L$(BUILDDIR)/lib -lmtd
-LDDEPS = $(BUILDDIR)/lib/libmtd.a
+TARGETS = $(BINS)
+TARGETS += lib/libmtd.a
+TARGETS += ubi-utils/libubi.a
 
 include common.mk
 
-# mkfs.ubifs needs -lubi which is in ubi-utils/
-subdirs_mkfs.ubifs_all: subdirs_ubi-utils_all
-
 clean::
 ifneq ($(BUILDDIR)/.git,)
 ifneq ($(BUILDDIR),.)
@@ -41,23 +46,14 @@ ifneq ($(BUILDDIR),$(CURDIR))
 endif
 endif
 endif
+       find $(BUILDDIR)/ -xdev \
+               '(' -name '*.[ao]' -o -name '.*.c.dep' ')' \
+               -exec rm -f {} +
        $(MAKE) -C $(TESTS) clean
 
-$(BUILDDIR)/mkfs.jffs2: $(addprefix $(BUILDDIR)/,\
-       compr_rtime.o mkfs.jffs2.o compr_zlib.o compr_lzo.o \
-       compr.o rbtree.o)
-LDFLAGS_mkfs.jffs2 = $(ZLIBLDFLAGS) $(LZOLDFLAGS)
-LDLIBS_mkfs.jffs2  = -lz $(LZOLDLIBS)
-
-$(BUILDDIR)/jffs2reader: $(BUILDDIR)/jffs2reader.o
-LDFLAGS_jffs2reader = $(ZLIBLDFLAGS) $(LZOLDFLAGS)
-LDLIBS_jffs2reader  = -lz $(LZOLDLIBS)
-
-$(BUILDDIR)/lib/libmtd.a: subdirs_lib_all ;
-
-install:: ${TARGETS} ${SCRIPTS}
+install:: ${BINS} ${SCRIPTS}
        mkdir -p ${DESTDIR}/${SBINDIR}
-       install -m 0755 ${TARGETS} ${SCRIPTS} ${DESTDIR}/${SBINDIR}/
+       install -m 0755 ${BINS} ${SCRIPTS} ${DESTDIR}/${SBINDIR}/
        mkdir -p ${DESTDIR}/${MANDIR}/man1
        gzip -9c mkfs.jffs2.1 > ${DESTDIR}/${MANDIR}/man1/mkfs.jffs2.1.gz
 
@@ -66,3 +62,44 @@ tests::
 
 cscope:
        cscope -bR
+
+#
+# Utils in top level
+#
+obj-mkfs.jffs2 = compr_rtime.o compr_zlib.o compr_lzo.o compr.o rbtree.o
+LDFLAGS_mkfs.jffs2 = $(ZLIBLDFLAGS) $(LZOLDFLAGS)
+LDLIBS_mkfs.jffs2  = -lz $(LZOLDLIBS)
+
+LDFLAGS_jffs2reader = $(ZLIBLDFLAGS) $(LZOLDFLAGS)
+LDLIBS_jffs2reader  = -lz $(LZOLDLIBS)
+
+$(foreach v,$(MTD_BINS),$(eval $(call mkdep,,$(v))))
+
+#
+# Common libmtd
+#
+obj-libmtd.a = libmtd.o libmtd_legacy.o libcrc32.o libfec.o
+$(call _mkdep,lib/,libmtd.a)
+
+#
+# Utils in mkfs.ubifs subdir
+#
+obj-mkfs.ubifs = crc16.o lpt.o compr.o devtable.o \
+       hashtable/hashtable.o hashtable/hashtable_itr.o
+LDLIBS_mkfs.ubifs = -lz -llzo2 -lm -luuid
+$(call mkdep,mkfs.ubifs/,mkfs.ubifs,,ubi-utils/libubi.a)
+
+#
+# Utils in ubi-utils/ subdir
+#
+obj-libiniparser.a = libiniparser.o dictionary.o
+obj-libscan.a      = libscan.o
+obj-libubi.a       = libubi.o
+obj-libubigen.a    = libubigen.o
+
+obj-mtdinfo   = libubigen.a
+obj-ubinize   = libubigen.a libiniparser.a
+obj-ubiformat = libubigen.a libscan.a
+
+$(foreach v,libubi.a libubigen.a libiniparser.a libscan.a,$(eval $(call _mkdep,ubi-utils/,$(v))))
+$(foreach v,$(UBI_BINS),$(eval $(call mkdep,ubi-utils/,$(v),libubi.a ubiutils-common.o)))
index 0f3d447e868ddafee4ff45f205405bee98758b41..d0e207dbc2d86ac6248cc9e3290b48b3b039d8bd 100644 (file)
--- a/common.mk
+++ b/common.mk
@@ -39,34 +39,48 @@ override BUILDDIR := $(patsubst %/,%,$(BUILDDIR))
 
 override TARGETS := $(addprefix $(BUILDDIR)/,$(TARGETS))
 
-SUBDIRS_ALL = $(patsubst %,subdirs_%_all,$(SUBDIRS))
-SUBDIRS_CLEAN = $(patsubst %,subdirs_%_clean,$(SUBDIRS))
-SUBDIRS_INSTALL = $(patsubst %,subdirs_%_install,$(SUBDIRS))
+ifeq ($(V),1)
+XECHO = @:
+XPRINTF = @:
+Q =
+else
+XECHO = @echo
+XPRINTF = @printf
+Q = @
+endif
+define BECHO
+$(XPRINTF) '  %-7s %s\n' "$1" "$(subst $(BUILDDIR)/,,$@)"
+endef
 
-all:: $(TARGETS) $(SUBDIRS_ALL)
+all:: $(TARGETS)
 
-clean:: $(SUBDIRS_CLEAN)
+clean::
        rm -f $(BUILDDIR)/*.o $(TARGETS) $(BUILDDIR)/.*.c.dep
 
-install:: $(TARGETS) $(SUBDIRS_INSTALL)
+install:: $(TARGETS)
 
-%: %.o $(LDDEPS) $(LDDEPS_$(notdir $@))
-       $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_$(notdir $@)) -g -o $@ $^ $(LDLIBS) $(LDLIBS_$(notdir $@))
+define _mkdep
+$(BUILDDIR)/$1$2: $(addprefix $(BUILDDIR)/$1,$(obj-$2) $3) $(addprefix $(BUILDDIR)/,$4)
+endef
+define mkdep
+$(call _mkdep,$1,$2,$3 $2.o,$4 lib/libmtd.a)
+endef
+
+%: %.o $(LDDEPS)
+       $(call BECHO,LD)
+       $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_$(notdir $@)) -g -o $@ $^ $(LDLIBS) $(LDLIBS_$(notdir $@))
 
 $(BUILDDIR)/%.a:
-       $(AR) crv $@ $^
-       $(RANLIB) $@
+       $(call BECHO,AR)
+       $(Q)$(AR) cr $@ $^
+       $(Q)$(RANLIB) $@
 
 $(BUILDDIR)/%.o: %.c
 ifneq ($(BUILDDIR),$(CURDIR))
-       mkdir -p $(dir $@)
+       $(Q)mkdir -p $(dir $@)
 endif
-       $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< -g -Wp,-MD,$(BUILDDIR)/.$(<F).dep
-
-subdirs_%:
-       d=$(patsubst subdirs_%,%,$@); \
-       t=`echo $$d | sed s:.*_::` d=`echo $$d | sed s:_.*::`; \
-       $(MAKE) BUILDDIR=$(BUILDDIR)/$$d -C $$d $$t
+       $(call BECHO,CC)
+       $(Q)$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< -g -Wp,-MD,$(BUILDDIR)/.$(<F).dep
 
 .SUFFIXES:
 
diff --git a/lib/Makefile b/lib/Makefile
deleted file mode 100644 (file)
index 9b01d32..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Makefile for libmtd
-#
-
-SUBDIRS =
-
-# CFLAGS += -Werror
-CPPFLAGS += -I../include
-LIBS = libmtd
-TARGETS = libmtd.a
-
-include ../common.mk
-
-$(BUILDDIR)/libmtd.a: $(addprefix $(BUILDDIR)/,\
-       libmtd.o libmtd_legacy.o libcrc32.o libfec.o)
-
-clean::
-       rm -f $(addsuffix .a, $(LIBS))
-
-install::
-
-uninstall:
diff --git a/mkfs.ubifs/Makefile b/mkfs.ubifs/Makefile
deleted file mode 100644 (file)
index ba21a8c..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-CPPFLAGS += -I../include -I../ubi-utils/include
-CPPFLAGS += $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
-
-ALL_SOURCES=*.[ch] hashtable/*.[ch]
-
-TARGETS = mkfs.ubifs
-
-LDLIBS_mkfs.ubifs = -lz -llzo2 -lm -luuid -L$(BUILDDIR)/../ubi-utils/ -lubi
-LDLIBS_mkfs.ubifs += -L$(BUILDDIR)/../lib -lmtd
-LDLIBS_mkfs.ubifs += $(ZLIBLDFLAGS) $(LZOLDFLAGS)
-
-include ../common.mk
-
-$(BUILDDIR)/mkfs.ubifs: $(addprefix $(BUILDDIR)/,\
-       crc16.o lpt.o compr.o devtable.o \
-       hashtable/hashtable.o hashtable/hashtable_itr.o)
-
-clean::
-       rm -f $(BUILDDIR)/hashtable/*.o cscope.*
-
-cscope:
-       @echo $(ALL_SOURCES) > cscope.files
-       @cscope -bR
-       @rm cscope.files
-
-install:: ${TARGETS}
-       mkdir -p ${DESTDIR}/${SBINDIR}
-       install -m 0755 ${TARGETS} ${DESTDIR}/${SBINDIR}/
index 509a94e6f69e9a3f9bc17f6a7487100eadaf17f1..4d6fc7d72472a0eb4d9244252a611c61599c7821 100644 (file)
@@ -4,9 +4,8 @@ CC = gcc
 endif
 
 COMMON_HEADERS_DIR := ../../../include
-LIBUBI_PATH=../../../ubi-utils/
-LIBUBI_SRC_PATH=../../../ubi-utils/src/
-LIBUBI_HEADER_PATH=../../../ubi-utils/include
+LIBUBI_PATH = ../../../ubi-utils/
+LIBUBI_HEADER_PATH = $(LIBUBI_PATH)/include
 
 CFLAGS := $(CFLAGS) -Wall -g -O2 -I$(COMMON_HEADERS_DIR) -I$(LIBUBI_HEADER_PATH)
 
@@ -18,7 +17,7 @@ all: $(TARGETS)
 
 # Compile ubilib
 libubi.a:
-       $(CC) $(CFLAGS) -I $(LIBUBI_SRC_PATH) -c $(LIBUBI_SRC_PATH)/libubi.c -o libubi.o
+       $(CC) $(CFLAGS) -c $(LIBUBI_PATH)/libubi.c -o libubi.o
        ar cr libubi.a libubi.o
 
 $(TARGETS): libubi.a
index 741a5c2386eac33ab670807ae8d10033202d89d4..2c47a9fc32ead7171205eae18fb57a991cd69e0b 100644 (file)
@@ -1,9 +1,7 @@
-LIBUBI_PATH=../../ubi-utils/
-LIBUBI_SRC_PATH=../../ubi-utils/src/
-LIBUBI_HEADER_PATH=../../ubi-utils/include
+LIBUBI_PATH = ../../ubi-utils/
+LIBUBI_HEADER_PATH = $(LIBUBI_PATH)/include
 UBIUTILS_PATH=../../ubi-utils/
 
-LIBUBI_PATH=../../ubi-utils/
 KERNELHDR := ../../include
 
 LIBS = libubi
@@ -15,8 +13,8 @@ CFLAGS += -I$(LIBUBI_HEADER_PATH) -I $(KERNELHDR) -lpthread
 include ../../common.mk
 
 # Compile ubilib with the udevsettle hack
-libubi.a: $(LIBUBI_SRC_PATH)/libubi.c  $(LIBUBI_HEADER_PATH)/libubi.h  $(LIBUBI_SRC_PATH)/libubi_int.h
-       $(CC) $(CFLAGS) -I $(LIBUBI_SRC_PATH) -I../../include -DUDEV_SETTLE_HACK -c $(LIBUBI_SRC_PATH)/libubi.c -o libubi.o
+libubi.a: $(LIBUBI_PATH)/libubi.c  $(LIBUBI_HEADER_PATH)/libubi.h  $(LIBUBI_PATH)/libubi_int.h
+       $(CC) $(CFLAGS) -I $(LIBUBI_PATH) -I../../include -DUDEV_SETTLE_HACK -c $(LIBUBI_PATH)/libubi.c -o libubi.o
        ar cr libubi.a libubi.o
 
 $(TARGETS): $(addprefix $(BUILDDIR)/, common.o) libubi.a
diff --git a/ubi-utils/Makefile b/ubi-utils/Makefile
deleted file mode 100644 (file)
index df81cd9..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Makefile for ubi-utils
-#
-
-KERNELHDR := ../include
-
-# CFLAGS += -Werror
-CPPFLAGS += -Iinclude -Isrc -I$(KERNELHDR)
-
-LIBS = libubi libubigen libiniparser libscan
-TARGETS = ubiupdatevol ubimkvol ubirmvol ubicrc32 ubinfo ubiattach \
-          ubidetach ubinize ubiformat ubirename mtdinfo ubirsvol
-
-VPATH = src
-LDLIBS = -L$(BUILDDIR)/../lib -lmtd
-
-include ../common.mk
-
-# And the below is the rule to get final executable from its .o and ubiutils-common.o
-$(TARGETS): $(addprefix $(BUILDDIR)/,\
-       libubi.a ubiutils-common.o)
-#      $(CC) $(CFLAGS) $(filter %.o, $^) -L. -lubi -o $@
-
-$(BUILDDIR)/ubicrc32: $(addprefix $(BUILDDIR)/,\
-       ubicrc32.o)
-#      $(CC) $(CFLAGS) -o $@ $^
-
-$(BUILDDIR)/ubinize: $(addprefix $(BUILDDIR)/,\
-       ubinize.o ubiutils-common.o libiniparser.a libubigen.a)
-#      $(CC) $(CFLAGS) $(filter %.o, $^) -L. -liniparser -lubigen -o $@
-
-$(BUILDDIR)/mtdinfo: $(addprefix $(BUILDDIR)/,\
-       libubigen.a ubiutils-common.o)
-#      $(CC) $(CFLAGS) $(filter %.o, $^) -L. -lmtd -lubigen -o $@
-
-$(BUILDDIR)/ubiformat: $(addprefix $(BUILDDIR)/,\
-       ubiformat.o ubiutils-common.o libscan.a libubi.a libubigen.a)
-#      $(CC) $(CFLAGS) $(filter %.o, $^) -L. -lmtd -lscan -lubi -lubigen -o $@
-
-$(BUILDDIR)/libubi.a: $(BUILDDIR)/libubi.o
-
-$(BUILDDIR)/libubigen.a: $(BUILDDIR)/libubigen.o
-
-$(BUILDDIR)/libiniparser.a: $(addprefix $(BUILDDIR)/,\
-       libiniparser.o dictionary.o)
-
-$(BUILDDIR)/libscan.a: $(addprefix $(BUILDDIR)/,\
-       libscan.o)
-
-clean::
-       rm -f $(addsuffix .a, $(LIBS))
-
-install::
-       mkdir -p ${DESTDIR}/${SBINDIR}
-       install -m 0755 ${TARGETS} ${DESTDIR}/${SBINDIR}/
-
-uninstall:
-       for file in ${TARGETS}; do \
-               $(RM) ${DESTDIR}/${SBINDIR}/$$file; \
-       done
similarity index 100%
rename from ubi-utils/src/libscan.c
rename to ubi-utils/libscan.c
similarity index 100%
rename from ubi-utils/src/libubi.c
rename to ubi-utils/libubi.c
similarity index 100%
rename from ubi-utils/src/mtdinfo.c
rename to ubi-utils/mtdinfo.c
similarity index 100%
rename from ubi-utils/src/ubinfo.c
rename to ubi-utils/ubinfo.c
similarity index 100%
rename from ubi-utils/src/ubinize.c
rename to ubi-utils/ubinize.c