]> www.infradead.org Git - mtd-utils.git/commitdiff
Unify all common build system parts
authorMike Frysinger <vapier@gentoo.org>
Thu, 18 Dec 2008 21:05:18 +0000 (16:05 -0500)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Mon, 22 Dec 2008 08:13:37 +0000 (10:13 +0200)
Rather than duplicating the same thing over and over in every Makefile,
move it all to common.mk.

Other things fixed here:
 - doing subdirs in parallel
 - fix src!=build compiling in subdirs

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Makefile
common.mk [new file with mode: 0644]
mkfs.ubifs/Makefile
ubi-utils/Makefile
ubi-utils/new-utils/Makefile

index 8319599ba1bc511ae22612ed801237a0ff6fed59..969ab876de95ae6a68d9d23ce4bc2a0710b1d2bf 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,30 +1,15 @@
 
 # -*- sh -*-
 
-PREFIX=/usr
-EXEC_PREFIX=$(PREFIX)
-SBINDIR=$(EXEC_PREFIX)/sbin
-MANDIR=$(PREFIX)/share/man
-INCLUDEDIR=$(PREFIX)/include
-
-#CROSS=arm-linux-
-CC := $(CROSS)gcc
-CFLAGS ?= -O2 -g
-CFLAGS += -Wall
 CPPFLAGS += -I./include $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
 
-ifeq ($(origin CROSS),undefined)
-  BUILDDIR := .
-else
-# Remove the trailing slash to make the directory name
-  BUILDDIR := $(CROSS:-=)
-endif
-
 ifeq ($(WITHOUT_XATTR), 1)
   CPPFLAGS += -DWITHOUT_XATTR
 endif
 
-RAWTARGETS = ftl_format flash_erase flash_eraseall nanddump doc_loadbios \
+SUBDIRS = mkfs.ubifs ubi-utils
+
+TARGETS = ftl_format flash_erase flash_eraseall 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 \
@@ -33,71 +18,49 @@ RAWTARGETS = ftl_format flash_erase flash_eraseall nanddump doc_loadbios \
        serve_image recv_image \
        sumtool #jffs2reader
 
-TARGETS = $(foreach target,$(RAWTARGETS),$(BUILDDIR)/$(target))
-
 SYMLINKS =
 
-%: %.o
-       $(CC) $(CFLAGS) $(LDFLAGS) -g -o $@ $^
-
-$(BUILDDIR)/%.o: %.c
-       mkdir -p $(BUILDDIR)
-       $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< -g -Wp,-MD,$(BUILDDIR)/.$(<F).dep
-
-.SUFFIXES:
+include common.mk
 
-all: $(TARGETS)
-       $(MAKE) -C $(BUILDDIR)/ubi-utils
-       $(MAKE) -C $(BUILDDIR)/mkfs.ubifs
-
-IGNORE=${wildcard $(BUILDDIR)/.*.c.dep}
--include ${IGNORE}
-
-clean:
-       rm -f $(BUILDDIR)/*.o $(TARGETS) $(BUILDDIR)/.*.c.dep $(SYMLINKS)
-       if [ "$(BUILDDIR)x" != ".x" ]; then rm -rf $(BUILDDIR); fi
-       $(MAKE) -C $(BUILDDIR)/ubi-utils clean
-       $(MAKE) -C $(BUILDDIR)/mkfs.ubifs clean
+clean::
+       -rm -f $(SYMLINKS)
+ifneq ($(BUILDDIR)/.git,)
+ifneq ($(BUILDDIR),.)
+ifneq ($(BUILDDIR),$(PWD))
+       rm -rf $(BUILDDIR)
+endif
+endif
+endif
 
 $(SYMLINKS):
        ln -sf ../fs/jffs2/$@ $@
 
-$(BUILDDIR)/mkfs.jffs2: $(BUILDDIR)/crc32.o \
-                       $(BUILDDIR)/compr_rtime.o \
-                       $(BUILDDIR)/mkfs.jffs2.o \
-                       $(BUILDDIR)/compr_zlib.o \
-                       $(BUILDDIR)/compr_lzo.o \
-                       $(BUILDDIR)/compr.o \
-                       $(BUILDDIR)/rbtree.o
-       $(CC) $(LDFLAGS) -o $@ $^ $(ZLIBLDFLAGS) -lz $(LZOLDFLAGS) -llzo2
+$(BUILDDIR)/mkfs.jffs2: $(addprefix $(BUILDDIR)/,\
+       crc32.o 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 -llzo2
 
 $(BUILDDIR)/flash_eraseall: $(BUILDDIR)/crc32.o $(BUILDDIR)/flash_eraseall.o
-       $(CC) $(LDFLAGS) -o $@ $^
 
 $(BUILDDIR)/jffs2reader: $(BUILDDIR)/jffs2reader.o
-       $(CC) $(LDFLAGS) -o $@ $^ $(ZLIBLDFLAGS) -lz
+LDFLAGS_jffs2reader = $(ZLIBLDFLAGS) $(LZOLDFLAGS)
+LDLIBS_jffs2reader  = -lz -llzo2
 
 $(BUILDDIR)/jffs2dump: $(BUILDDIR)/jffs2dump.o $(BUILDDIR)/crc32.o
-       $(CC) $(LDFLAGS) -o $@ $^
 
 $(BUILDDIR)/sumtool: $(BUILDDIR)/sumtool.o $(BUILDDIR)/crc32.o
-       $(CC) $(LDFLAGS) -o $@ $^
 
 $(BUILDDIR)/serve_image: $(BUILDDIR)/serve_image.o $(BUILDDIR)/crc32.o $(BUILDDIR)/fec.o
-       $(CC) $(LDFLAGS) -o $@ $^
 
 $(BUILDDIR)/recv_image: $(BUILDDIR)/recv_image.o $(BUILDDIR)/crc32.o $(BUILDDIR)/fec.o
-       $(CC) $(LDFLAGS) -o $@ $^
 
 $(BUILDDIR)/fectest: $(BUILDDIR)/fectest.o $(BUILDDIR)/crc32.o $(BUILDDIR)/fec.o
-       $(CC) $(LDFLAGS) -o $@ $^
 
 
 
-install: ${TARGETS}
+install:: ${TARGETS}
        mkdir -p ${DESTDIR}/${SBINDIR}
        install -m 0755 ${TARGETS} ${DESTDIR}/${SBINDIR}/
        mkdir -p ${DESTDIR}/${MANDIR}/man1
        gzip -9c mkfs.jffs2.1 > ${DESTDIR}/${MANDIR}/man1/mkfs.jffs2.1.gz
-       $(MAKE) -C $(BUILDDIR)/ubi-utils install
-       $(MAKE) -C $(BUILDDIR)/mkfs.ubifs install
diff --git a/common.mk b/common.mk
new file mode 100644 (file)
index 0000000..5dd21ab
--- /dev/null
+++ b/common.mk
@@ -0,0 +1,58 @@
+CC := $(CROSS)gcc
+AR := $(CROSS)ar
+RANLIB := $(CROSS)ranlib
+CFLAGS ?= -O2 -g
+CFLAGS += -Wall -Wwrite-strings -W
+
+DESTDIR ?= /usr/local
+PREFIX=/usr
+EXEC_PREFIX=$(PREFIX)
+SBINDIR=$(EXEC_PREFIX)/sbin
+MANDIR=$(PREFIX)/share/man
+INCLUDEDIR=$(PREFIX)/include
+
+ifndef BUILDDIR
+ifeq ($(origin CROSS),undefined)
+  BUILDDIR := $(PWD)
+else
+# Remove the trailing slash to make the directory name
+  BUILDDIR := $(PWD)/$(CROSS:-=)
+endif
+endif
+
+override TARGETS := $(addprefix $(BUILDDIR)/,$(TARGETS))
+
+SUBDIRS_ALL = $(patsubst %,subdirs_%_all,$(SUBDIRS))
+SUBDIRS_CLEAN = $(patsubst %,subdirs_%_clean,$(SUBDIRS))
+SUBDIRS_INSTALL = $(patsubst %,subdirs_%_install,$(SUBDIRS))
+
+all:: $(TARGETS) $(SUBDIRS_ALL)
+
+clean:: $(SUBDIRS_CLEAN)
+       rm -f $(BUILDDIR)/*.o $(TARGETS) $(BUILDDIR)/.*.c.dep
+
+install:: $(TARGETS) $(SUBDIRS_INSTALL)
+
+$(BUILDDIR)/%: $(BUILDDIR)/%.o
+       $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_$(notdir $@)) -g -o $@ $^ $(LDLIBS) $(LDLIBS_$(notdir $@))
+
+$(BUILDDIR)/%.a:
+       $(AR) crv $@ $^
+       $(RANLIB) $@
+
+$(BUILDDIR)/%.o: %.c
+       mkdir -p $(dir $@)
+       $(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
+
+.SUFFIXES:
+
+IGNORE=${wildcard $(BUILDDIR)/.*.c.dep}
+-include ${IGNORE}
+
+PHONY += all clean install
+.PHONY: $(PHONY)
index 9471ac425f07817ca23659b36c0ef93d4f7b332f..e5bf9cec43fae39932c369aa48ca243909932414 100644 (file)
@@ -1,23 +1,23 @@
-DESTDIR := /usr/local
-SBINDIR=/usr/sbin
 ALL_SOURCES=*.[ch] hashtable/*.[ch]
-CFLAGS += -Wall
-LDLIBS += -lz -llzo2 -lm -luuid
+
 TARGETS = mkfs.ubifs
 
-all: $(TARGETS)
+LDLIBS_mkfs.ubifs = -lz -llzo2 -lm -luuid
+
+include ../common.mk
 
-mkfs.ubifs: crc16.o crc32.o lpt.o compr.o hashtable/hashtable.o \
-            hashtable/hashtable_itr.o devtable.o
+$(BUILDDIR)/mkfs.ubifs: $(addprefix $(BUILDDIR)/,\
+       crc16.o crc32.o lpt.o compr.o devtable.o \
+       hashtable/hashtable.o hashtable/hashtable_itr.o)
 
-clean:
-       rm -f *.o hashtable/*.o $(TARGETS) cscope.*
+clean::
+       rm -f $(BUILDDIR)/hashtable/*.o cscope.*
 
 cscope:
        @echo $(ALL_SOURCES) > cscope.files
        @cscope -bR
        @rm cscope.files
 
-install: ${TARGETS}
+install:: ${TARGETS}
        mkdir -p ${DESTDIR}/${SBINDIR}
        install -m 0755 ${TARGETS} ${DESTDIR}/${SBINDIR}/
index 63058e12d259b84c7f4ac690d4d28bda05b5f945..3be813aa90eb011ac6373eb9a801fca60327f165 100644 (file)
@@ -3,77 +3,54 @@
 #
 
 KERNELHDR := ../include
-DESTDIR := /usr/local
-SBINDIR=/usr/sbin
-MANDIR=/usr/share/man
-INCLUDEDIR=/usr/include
 
-CC := $(CROSS)gcc
 CFLAGS ?= -O2 -g -Werror
-CFLAGS += -Wall -Wwrite-strings -W
 CPPFLAGS += -I./inc -I./src -I$(KERNELHDR) \
        -std=gnu99 -DPACKAGE_VERSION=\"1.0\"
 
 PERLPROGS = mkpfi ubicrc32.pl
 
-NTARGETS = ubiattach ubicrc32 ubidetach ubimkvol ubinfo ubinize \
-       ubirmvol ubiupdatevol ubiformat
+SUBDIRS = new-utils
+
 TARGETS = pfiflash pddcustomize ubimirror bin2nand nand2bin ubigen \
-       mkbootenv unubi pfi2bin $(NTARGETS)
+       mkbootenv unubi pfi2bin
 
 vpath   %.c ./src
 
-%: %.o
-       $(CC) $(LDFLAGS) -g -o $@ $^
-
-%.o: %.c
-       $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< -g -Wp,-MD,.$(shell basename $<).dep
-
-all: $(TARGETS)
-
-IGNORE=${wildcard .*.c.dep}
--include ${IGNORE}
-
-$(NTARGETS):
-       $(MAKE) -C new-utils $@
-       mv new-utils/$@ $@
-
-clean:
-       rm -rf *.o $(TARGETS) .*.c.dep
-       $(MAKE) -C new-utils clean
+include ../common.mk
 
-pddcustomize: pddcustomize.o error.o libubimirror.o bootenv.o hashmap.o \
-               libubi.o crc32.o
-       $(CC) $(LDFLAGS) -o $@ $^
+$(BUILDDIR)/pddcustomize: $(addprefix $(BUILDDIR)/,\
+       pddcustomize.o error.o libubimirror.o bootenv.o hashmap.o \
+       libubi.o crc32.o)
 
-pfiflash: pfiflash.o libpfiflash.o list.o reader.o error.o libubimirror.o \
-               bootenv.o hashmap.o pfi.o libubi.o crc32.o
-       $(CC) $(LDFLAGS) -o $@ $^
+$(BUILDDIR)/pfiflash: $(addprefix $(BUILDDIR)/,\
+       pfiflash.o libpfiflash.o list.o reader.o error.o libubimirror.o \
+       bootenv.o hashmap.o pfi.o libubi.o crc32.o)
 
-ubimirror: ubimirror.o error.o libubimirror.o bootenv.o hashmap.o \
-               libubi.o crc32.o
-       $(CC) $(LDFLAGS) -o $@ $^
+$(BUILDDIR)/ubimirror: $(addprefix $(BUILDDIR)/,\
+       ubimirror.o error.o libubimirror.o bootenv.o hashmap.o \
+       libubi.o crc32.o)
 
-nand2bin: nand2bin.o nandecc.o nandcorr.o
-       $(CC) $(LDFLAGS) -o $@ $^
+$(BUILDDIR)/nand2bin: $(addprefix $(BUILDDIR)/,\
+       nand2bin.o nandecc.o nandcorr.o)
 
-bin2nand: bin2nand.o error.o nandecc.o
-       $(CC) $(LDFLAGS) -o $@ $^
+$(BUILDDIR)/bin2nand: $(addprefix $(BUILDDIR)/,\
+       bin2nand.o error.o nandecc.o)
 
-ubigen: ubigen.o libubigen.o crc32.o
-       $(CC) $(LDFLAGS) -o $@ $^
+$(BUILDDIR)/ubigen: $(addprefix $(BUILDDIR)/,\
+       ubigen.o libubigen.o crc32.o)
 
-mkbootenv: mkbootenv.o bootenv.o hashmap.o error.o crc32.o
-       $(CC) $(LDFLAGS) -o $@ $^
+$(BUILDDIR)/mkbootenv: $(addprefix $(BUILDDIR)/,\
+       mkbootenv.o bootenv.o hashmap.o error.o crc32.o)
 
-unubi: unubi.o crc32.o unubi_analyze.o eb_chain.o
-       $(CC) $(LDFLAGS) -o $@ $^
+$(BUILDDIR)/unubi: $(addprefix $(BUILDDIR)/,\
+       unubi.o crc32.o unubi_analyze.o eb_chain.o)
 
-pfi2bin: pfi2bin.o peb.o error.o list.o crc32.o libubigen.o bootenv.o \
-               hashmap.o reader.o pfi.o
-       $(CC) $(LDFLAGS) -o $@ $^
+$(BUILDDIR)/pfi2bin: $(addprefix $(BUILDDIR)/,\
+       pfi2bin.o peb.o error.o list.o crc32.o libubigen.o bootenv.o \
+       hashmap.o reader.o pfi.o)
 
-install: ${TARGETS}
+install::
        mkdir -p ${DESTDIR}/${SBINDIR}
        install -m 0755 ${TARGETS} ${DESTDIR}/${SBINDIR}/
        (cd perl && install ${PERLPROGS} ${DESTDIR}/${SBINDIR}/)
index 9ba0d95b4fb67e17697b61f4384f65553b5f37de..6ae60b3e92a88ed96b7731c7b6d30e53c93a4aac 100644 (file)
@@ -3,76 +3,55 @@
 #
 
 KERNELHDR := ../../include
-DESTDIR := /usr/local
-SBINDIR=/usr/sbin
-MANDIR=/usr/man
-INCLUDEDIR=/usr/include
-
-CC := $(CROSS)gcc
-AR := $(CROSS)ar
-RANLIB := $(CROSS)ranlib
-CFLAGS ?= -O2
-CFLAGS += -Werror -Wall
+
+#CFLAGS += -Werror
 CPPFLAGS += -Iinclude -Isrc -I$(KERNELHDR)
-LDFLAGS += -L.
 
 LIBS = libubi libmtd libubigen libiniparser libscan
-UTILS = ubiupdatevol ubimkvol ubirmvol ubicrc32 ubinfo ubiattach \
-        ubidetach ubinize ubiformat
+TARGETS = ubiupdatevol ubimkvol ubirmvol ubicrc32 ubinfo ubiattach \
+          ubidetach ubinize ubiformat
 
 vpath %.c src
 
-all: $(UTILS)
-
-# The below cancels existing implicite rule to make programs from .c files,
-# in order to force make using our rule defined below
-%: %.c
-
-# The below is the rule to get an .o file from a .c file
-%.o: %.c
-       $(CC) $(CFLAGS) $(CPPFLAGS) $< -c -o $@
+include ../../common.mk
 
 # And the below is the rule to get final executable from its .o and common.o
-%: libubi.a %.o common.o
-       $(CC) $(CFLAGS) $(LDFLAGS) $(filter %.o, $^) -lubi -o $@
+$(TARGETS): $(addprefix $(BUILDDIR)/,\
+       libubi.a common.o)
+#      $(CC) $(CFLAGS) $(filter %.o, $^) -L. -lubi -o $@
 
-ubicrc32: ubicrc32.o crc32.o
-       $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
+$(BUILDDIR)/ubicrc32: $(addprefix $(BUILDDIR)/,\
+       ubicrc32.o crc32.o)
+#      $(CC) $(CFLAGS) -o $@ $^
 
-ubinize: ubinize.o common.o crc32.o libiniparser.a libubigen.a
-       $(CC) $(CFLAGS) $(LDFLAGS) $(filter %.o, $^) -liniparser -lubigen -o $@
+$(BUILDDIR)/ubinize: $(addprefix $(BUILDDIR)/,\
+       ubinize.o common.o crc32.o libiniparser.a libubigen.a)
+#      $(CC) $(CFLAGS) $(filter %.o, $^) -L. -liniparser -lubigen -o $@
 
-ubiformat: ubiformat.o common.o crc32.o libmtd.a libscan.a libubi.a libubigen.a
-       $(CC) $(CFLAGS) $(LDFLAGS) $(filter %.o, $^) -lmtd -lscan -lubi -lubigen -o $@
+$(BUILDDIR)/ubiformat: $(addprefix $(BUILDDIR)/,\
+       ubiformat.o common.o crc32.o libmtd.a libscan.a libubi.a libubigen.a)
+#      $(CC) $(CFLAGS) $(filter %.o, $^) -L. -lmtd -lscan -lubi -lubigen -o $@
 
-libubi.a: libubi.o
-       $(AR) crv $@ $^
-       $(RANLIB) $@
+$(BUILDDIR)/libubi.a: $(BUILDDIR)/libubi.o
 
-libmtd.a: libmtd.o
-       $(AR) crv $@ $^
-       $(RANLIB) $@
+$(BUILDDIR)/libmtd.a: $(BUILDDIR)/libmtd.o
 
-libubigen.a: libubigen.o
-       $(AR) crv $@ $^
-       $(RANLIB) $@
+$(BUILDDIR)/libubigen.a: $(BUILDDIR)/libubigen.o
 
-libiniparser.a: libiniparser.o dictionary.o
-       $(AR) crv $@ $^
-       $(RANLIB) $@
+$(BUILDDIR)/libiniparser.a: $(addprefix $(BUILDDIR)/,\
+       libiniparser.o dictionary.o)
 
-libscan.a: libscan.o crc32.o
-       $(AR) crv $@ $^
-       $(RANLIB) $@
+$(BUILDDIR)/libscan.a: $(addprefix $(BUILDDIR)/,\
+       libscan.o crc32.o)
 
-clean:
-       rm -rf *.o $(addsuffix .a, $(LIBS)) $(UTILS) .*.c.dep
+clean::
+       rm -f $(addsuffix .a, $(LIBS))
 
-install: ${UTILS}
+install::
        mkdir -p ${DESTDIR}/${SBINDIR}
-       install -m 0755 ${UTILS} ${DESTDIR}/${SBINDIR}/
+       install -m 0755 ${TARGETS} ${DESTDIR}/${SBINDIR}/
 
 uninstall:
-       for file in ${UTILS}; do \
+       for file in ${TARGETS}; do \
                $(RM) ${DESTDIR}/${SBINDIR}/$$file; \
        done