From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/4551 Path: news.gmane.org!not-for-mail From: Szabolcs Nagy Newsgroups: gmane.linux.lib.musl.general Subject: Re: Out-of-tree builds Date: Fri, 7 Feb 2014 02:01:36 +0100 Message-ID: <20140207010135.GE1685@port70.net> References: <52F3C329.6040208@f-prot.com> <20140206173932.GB1685@port70.net> <20140206190410.GJ15627@brightrain.aerifal.cx> <20140206232706.GC1685@port70.net> <20140206233121.GD1685@port70.net> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="ffoCPvUAPMgSXi6H" X-Trace: ger.gmane.org 1391734900 2605 80.91.229.3 (7 Feb 2014 01:01:40 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 7 Feb 2014 01:01:40 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-4555-gllmg-musl=m.gmane.org@lists.openwall.com Fri Feb 07 02:01:49 2014 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1WBZpE-0007B6-Mc for gllmg-musl@plane.gmane.org; Fri, 07 Feb 2014 02:01:48 +0100 Original-Received: (qmail 18119 invoked by uid 550); 7 Feb 2014 01:01:47 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 18111 invoked from network); 7 Feb 2014 01:01:47 -0000 Content-Disposition: inline In-Reply-To: <20140206233121.GD1685@port70.net> User-Agent: Mutt/1.5.21 (2010-09-15) Xref: news.gmane.org gmane.linux.lib.musl.general:4551 Archived-At: --ffoCPvUAPMgSXi6H Content-Type: text/plain; charset=us-ascii Content-Disposition: inline * Szabolcs Nagy [2014-02-07 00:31:22 +0100]: > > VPATH=$(SOMEDIR) > %.o: $(ARCH)/%.s > attached a make diff that can do out-of-tree build, by specifying M=relative/path/to/musl - config is not ready - directory creation is a hack - include/bits/alltypes.h is generated into the original repo (include/bits is a symlink to the arch/bits dir) --ffoCPvUAPMgSXi6H Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="make.diff" diff --git a/Makefile b/Makefile index 0ab0bfd..fb9a83e 100644 --- a/Makefile +++ b/Makefile @@ -16,8 +16,9 @@ includedir = $(prefix)/include libdir = $(prefix)/lib syslibdir = /lib -SRCS = $(sort $(wildcard src/*/*.c arch/$(ARCH)/src/*.c)) -OBJS = $(SRCS:.c=.o) +M = . +SRCS = $(sort $(wildcard $(M)/src/*/*.c $(M)/arch/$(ARCH)/src/*.c)) +OBJS = $(SRCS:$(M)/%.c=%.o) LOBJS = $(OBJS:.o=.lo) GENH = include/bits/alltypes.h GENH_INT = src/internal/version.h @@ -30,17 +31,17 @@ CFLAGS = -Os -pipe CFLAGS_C99FSE = -std=c99 -ffreestanding -nostdinc CFLAGS_ALL = $(CFLAGS_C99FSE) -CFLAGS_ALL += -D_XOPEN_SOURCE=700 -I./arch/$(ARCH) -I./src/internal -I./include +CFLAGS_ALL += -D_XOPEN_SOURCE=700 -I$(M)/arch/$(ARCH) -I./src/internal -I$(M)/src/internal -I./include -I$(M)/include CFLAGS_ALL += $(CPPFLAGS) $(CFLAGS) CFLAGS_ALL_STATIC = $(CFLAGS_ALL) CFLAGS_ALL_SHARED = $(CFLAGS_ALL) -fPIC -DSHARED AR = $(CROSS_COMPILE)ar RANLIB = $(CROSS_COMPILE)ranlib -INSTALL = ./tools/install.sh +INSTALL = $(M)/tools/install.sh -ARCH_INCLUDES = $(wildcard arch/$(ARCH)/bits/*.h) -ALL_INCLUDES = $(sort $(wildcard include/*.h include/*/*.h) $(GENH) $(ARCH_INCLUDES:arch/$(ARCH)/%=include/%)) +ARCH_INCLUDES = $(wildcard $(M)/arch/$(ARCH)/bits/*.h) +ALL_INCLUDES = $(sort $(wildcard $(M)/include/*.h $(M)/include/*/*.h) $(GENH) $(ARCH_INCLUDES:$(M)/arch/$(ARCH)/%=include/%)) EMPTY_LIB_NAMES = m rt pthread crypt util xnet resolv dl EMPTY_LIBS = $(EMPTY_LIB_NAMES:%=lib/lib%.a) @@ -55,7 +56,12 @@ LDSO_PATHNAME = $(syslibdir)/ld-musl-$(ARCH)$(SUBARCH).so.1 -include config.mak -all: $(ALL_LIBS) $(ALL_TOOLS) +VPATH = $(M) + +all: dirhack $(ALL_LIBS) $(ALL_TOOLS) + +dirhack: + mkdir -p $(sort $(dir $(OBJS))) crt include lib tools install: install-libs install-headers install-tools @@ -73,26 +79,26 @@ distclean: clean include/bits: @test "$(ARCH)" || { echo "Please set ARCH in config.mak before running make." ; exit 1 ; } - ln -sf ../arch/$(ARCH)/bits $@ + ln -sf ../$(M)/arch/$(ARCH)/bits $@ include/bits/alltypes.h.in: include/bits -include/bits/alltypes.h: include/bits/alltypes.h.in include/alltypes.h.in tools/mkalltypes.sed - sed -f tools/mkalltypes.sed include/bits/alltypes.h.in include/alltypes.h.in > $@ +include/bits/alltypes.h: include/bits/alltypes.h.in $(M)/include/alltypes.h.in $(M)/tools/mkalltypes.sed + sed -f $(M)/tools/mkalltypes.sed include/bits/alltypes.h.in $(M)/include/alltypes.h.in > $@ -src/internal/version.h: $(wildcard VERSION .git) - printf '#define VERSION "%s"\n' "$$(sh tools/version.sh)" > $@ +src/internal/version.h: $(wildcard $(M)/VERSION $(M)/.git) + printf '#define VERSION "%s"\n' "$$(cd $(M); sh tools/version.sh)" > $@ src/internal/version.lo: src/internal/version.h src/ldso/dynlink.lo: arch/$(ARCH)/reloc.h -crt/crt1.o crt/Scrt1.o: $(wildcard arch/$(ARCH)/crt_arch.h) +crt/crt1.o crt/Scrt1.o: $(wildcard $(M)/arch/$(ARCH)/crt_arch.h) crt/Scrt1.o: CFLAGS += -fPIC -OPTIMIZE_SRCS = $(wildcard $(OPTIMIZE_GLOBS:%=src/%)) -$(OPTIMIZE_SRCS:%.c=%.o) $(OPTIMIZE_SRCS:%.c=%.lo): CFLAGS += -O3 +OPTIMIZE_SRCS = $(wildcard $(OPTIMIZE_GLOBS:%=$(M)/src/%)) +$(OPTIMIZE_SRCS:$(M)/%.c=%.o) $(OPTIMIZE_SRCS:$(M)/%.c=%.lo): CFLAGS += -O3 MEMOPS_SRCS = src/string/memcpy.c src/string/memmove.c src/string/memcmp.c src/string/memset.c $(MEMOPS_SRCS:%.c=%.o) $(MEMOPS_SRCS:%.c=%.lo): CFLAGS += $(CFLAGS_MEMOPS) @@ -101,9 +107,9 @@ $(MEMOPS_SRCS:%.c=%.o) $(MEMOPS_SRCS:%.c=%.lo): CFLAGS += $(CFLAGS_MEMOPS) # force the corresponding object file to be rebuilt, even if the implicit # rule below goes indirectly through a .sub file. define mkasmdep -$(dir $(patsubst %/,%,$(dir $(1))))$(notdir $(1:.s=.o)): $(1) +$(dir $(patsubst $(M)/%/,%,$(dir $(1))))$(notdir $(1:.s=.o)): $(1) endef -$(foreach s,$(wildcard src/*/$(ARCH)*/*.s),$(eval $(call mkasmdep,$(s)))) +$(foreach s,$(wildcard $(M)/src/*/$(ARCH)*/*.s),$(eval $(call mkasmdep,$(s)))) %.o: $(ARCH)$(ASMSUBARCH)/%.sub $(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $(dir $<)$(shell cat $<) --ffoCPvUAPMgSXi6H--