mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Petr Hosek <phosek@chromium.org>
To: musl@lists.openwall.com
Subject: Re: Support for out-of-tree build
Date: Tue, 17 Nov 2015 02:45:58 +0000	[thread overview]
Message-ID: <CABBv4Tb4wi1Ddd82c09yJ5gWw2yC-4kRD6F1+Pm7WVrWFyAhbg@mail.gmail.com> (raw)
In-Reply-To: <20151112234137.GD3818@brightrain.aerifal.cx>


[-- Attachment #1.1: Type: text/plain, Size: 1566 bytes --]

This is the final solution I've converged to. It's a bigger change than the
previous version, but the implementation is actually cleaner. In nutshell,
I've replaced all .sub files with .mk equivalent files which are included
from the Makefile. I'm then filtering out all C object files which have
assembly equivalent. This allowed me to simplify the build rules while we
still support both in-tree and out-of-tree builds. Please let me know what
you think, I'll be happy to iterate on this.

On Thu, Nov 12, 2015 at 3:41 PM Rich Felker <dalias@libc.org> wrote:

> On Thu, Nov 12, 2015 at 10:35:07PM +0000, Petr Hosek wrote:
> > >
> > > What if we put the *.o files for arch asm in the arch dirs rather than
> > > in the main src dirs. Is there some clean way we could write a rule to
> > > remove the base .o files from OBJS when the arch-specific .o files are
> > > there?
> >
> > That's what I had in mind and I've already implemented it, but I couldn't
> > get the *.sub files to work in that setup. However, if we replace them
> with
> > Makefile fragments as you suggested it might it might solve that problem.
> > Let me try that out and I'll let you know whether this is a way to go.
>
> I don't see why the same wouldn't work for .sub files: their .o files
> could be put in their own dirs. But I'd rather get rid of them still
> and just have the arch provide an ordered list, for the specific
> subarch, of arch and subarch .s or .c files that should replace the .c
> files "above" them in the tree. Do you have good ideas for how to do
> this?
>
> Rich
>

[-- Attachment #1.2: Type: text/html, Size: 1975 bytes --]

[-- Attachment #2: suport-out-of-tree-build.patch --]
[-- Type: text/x-patch, Size: 26594 bytes --]

From 8bf1353e1018a4f25c30e1ba44ec60ff7527cb8f Mon Sep 17 00:00:00 2001
From: Petr Hosek <phosek@chromium.org>
Date: Thu, 5 Nov 2015 14:51:50 -0800
Subject: [PATCH] suport out-of-tree build

this change add support for building musl outside of the source
tree. the implementation is similar to autotools where running
configure in a different folder creates config.mak in the current
working directory and symlinks the makefile, which contains the
logic for creating all necessary directories and resolving paths
relative to the source directory. based on patch by Szabolcs Nagy.
---
 Makefile                          | 105 +++++++++++++++++++++-----------------
 configure                         |  24 +++++++--
 src/fenv/armebhf/fenv.mk          |   1 +
 src/fenv/armebhf/fenv.sub         |   1 -
 src/fenv/armhf/fenv.mk            |   1 +
 src/fenv/armhf/fenv.sub           |   1 -
 src/fenv/mips-sf/fenv.mk          |   1 +
 src/fenv/mips-sf/fenv.sub         |   1 -
 src/fenv/mipsel-sf/fenv.mk        |   1 +
 src/fenv/mipsel-sf/fenv.sub       |   1 -
 src/fenv/sh-nofpu/fenv.mk         |   1 +
 src/fenv/sh-nofpu/fenv.sub        |   1 -
 src/fenv/sheb-nofpu/fenv.mk       |   1 +
 src/fenv/sheb-nofpu/fenv.sub      |   1 -
 src/math/armebhf/fabs.mk          |   1 +
 src/math/armebhf/fabs.sub         |   1 -
 src/math/armebhf/fabsf.mk         |   1 +
 src/math/armebhf/fabsf.sub        |   1 -
 src/math/armebhf/sqrt.mk          |   1 +
 src/math/armebhf/sqrt.sub         |   1 -
 src/math/armebhf/sqrtf.mk         |   1 +
 src/math/armebhf/sqrtf.sub        |   1 -
 src/math/armhf/fabs.mk            |   1 +
 src/math/armhf/fabs.sub           |   1 -
 src/math/armhf/fabsf.mk           |   1 +
 src/math/armhf/fabsf.sub          |   1 -
 src/math/armhf/sqrt.mk            |   1 +
 src/math/armhf/sqrt.sub           |   1 -
 src/math/armhf/sqrtf.mk           |   1 +
 src/math/armhf/sqrtf.sub          |   1 -
 src/setjmp/mips-sf/longjmp.mk     |   1 +
 src/setjmp/mips-sf/longjmp.sub    |   1 -
 src/setjmp/mips-sf/setjmp.mk      |   1 +
 src/setjmp/mips-sf/setjmp.sub     |   1 -
 src/setjmp/mipsel-sf/longjmp.mk   |   1 +
 src/setjmp/mipsel-sf/longjmp.sub  |   1 -
 src/setjmp/mipsel-sf/setjmp.mk    |   1 +
 src/setjmp/mipsel-sf/setjmp.sub   |   1 -
 src/setjmp/sh-nofpu/longjmp.mk    |   1 +
 src/setjmp/sh-nofpu/longjmp.sub   |   1 -
 src/setjmp/sh-nofpu/setjmp.mk     |   1 +
 src/setjmp/sh-nofpu/setjmp.sub    |   1 -
 src/setjmp/sheb-nofpu/longjmp.mk  |   1 +
 src/setjmp/sheb-nofpu/longjmp.sub |   1 -
 src/setjmp/sheb-nofpu/setjmp.mk   |   1 +
 src/setjmp/sheb-nofpu/setjmp.sub  |   1 -
 src/string/armel/memcpy.mk        |   1 +
 src/string/armel/memcpy.sub       |   1 -
 src/string/armhf/memcpy.mk        |   1 +
 src/string/armhf/memcpy.sub       |   1 -
 50 files changed, 103 insertions(+), 74 deletions(-)
 create mode 100644 src/fenv/armebhf/fenv.mk
 delete mode 100644 src/fenv/armebhf/fenv.sub
 create mode 100644 src/fenv/armhf/fenv.mk
 delete mode 100644 src/fenv/armhf/fenv.sub
 create mode 100644 src/fenv/mips-sf/fenv.mk
 delete mode 100644 src/fenv/mips-sf/fenv.sub
 create mode 100644 src/fenv/mipsel-sf/fenv.mk
 delete mode 100644 src/fenv/mipsel-sf/fenv.sub
 create mode 100644 src/fenv/sh-nofpu/fenv.mk
 delete mode 100644 src/fenv/sh-nofpu/fenv.sub
 create mode 100644 src/fenv/sheb-nofpu/fenv.mk
 delete mode 100644 src/fenv/sheb-nofpu/fenv.sub
 create mode 100644 src/math/armebhf/fabs.mk
 delete mode 100644 src/math/armebhf/fabs.sub
 create mode 100644 src/math/armebhf/fabsf.mk
 delete mode 100644 src/math/armebhf/fabsf.sub
 create mode 100644 src/math/armebhf/sqrt.mk
 delete mode 100644 src/math/armebhf/sqrt.sub
 create mode 100644 src/math/armebhf/sqrtf.mk
 delete mode 100644 src/math/armebhf/sqrtf.sub
 create mode 100644 src/math/armhf/fabs.mk
 delete mode 100644 src/math/armhf/fabs.sub
 create mode 100644 src/math/armhf/fabsf.mk
 delete mode 100644 src/math/armhf/fabsf.sub
 create mode 100644 src/math/armhf/sqrt.mk
 delete mode 100644 src/math/armhf/sqrt.sub
 create mode 100644 src/math/armhf/sqrtf.mk
 delete mode 100644 src/math/armhf/sqrtf.sub
 create mode 100644 src/setjmp/mips-sf/longjmp.mk
 delete mode 100644 src/setjmp/mips-sf/longjmp.sub
 create mode 100644 src/setjmp/mips-sf/setjmp.mk
 delete mode 100644 src/setjmp/mips-sf/setjmp.sub
 create mode 100644 src/setjmp/mipsel-sf/longjmp.mk
 delete mode 100644 src/setjmp/mipsel-sf/longjmp.sub
 create mode 100644 src/setjmp/mipsel-sf/setjmp.mk
 delete mode 100644 src/setjmp/mipsel-sf/setjmp.sub
 create mode 100644 src/setjmp/sh-nofpu/longjmp.mk
 delete mode 100644 src/setjmp/sh-nofpu/longjmp.sub
 create mode 100644 src/setjmp/sh-nofpu/setjmp.mk
 delete mode 100644 src/setjmp/sh-nofpu/setjmp.sub
 create mode 100644 src/setjmp/sheb-nofpu/longjmp.mk
 delete mode 100644 src/setjmp/sheb-nofpu/longjmp.sub
 create mode 100644 src/setjmp/sheb-nofpu/setjmp.mk
 delete mode 100644 src/setjmp/sheb-nofpu/setjmp.sub
 create mode 100644 src/string/armel/memcpy.mk
 delete mode 100644 src/string/armel/memcpy.sub
 create mode 100644 src/string/armhf/memcpy.mk
 delete mode 100644 src/string/armhf/memcpy.sub

diff --git a/Makefile b/Makefile
index 2b21015..05cb650 100644
--- a/Makefile
+++ b/Makefile
@@ -8,6 +8,7 @@
 # Do not make changes here.
 #
 
+srcdir = .
 exec_prefix = /usr/local
 bindir = $(exec_prefix)/bin
 
@@ -16,12 +17,19 @@ includedir = $(prefix)/include
 libdir = $(prefix)/lib
 syslibdir = /lib
 
-SRCS = $(sort $(wildcard src/*/*.c arch/$(ARCH)/src/*.c))
-OBJS = $(SRCS:.c=.o)
-LOBJS = $(OBJS:.o=.lo)
 GENH = include/bits/alltypes.h
 GENH_INT = src/internal/version.h
-IMPH = src/internal/stdio_impl.h src/internal/pthread_impl.h src/internal/libc.h
+IMPH = $(addprefix $(srcdir)/, src/internal/stdio_impl.h src/internal/pthread_impl.h src/internal/libc.h)
+
+ASM_SRCS = $(wildcard $(srcdir)/src/*/$(ARCH)/*.s)
+ASM_OBJS = $(ASM_SRCS:$(srcdir)/%.s=%.o)
+ASM_LOBJS = $(ASM_OBJS:.o=.lo)
+
+SRCS = $(sort $(wildcard $(srcdir)/src/*/*.c $(srcdir)/arch/$(ARCH)/src/*.c))
+EXCLUDE_OBJS = $(foreach s,$(ASM_SRCS),$(dir $(patsubst $(srcdir)/%/,%,$(dir $(s))))$(notdir $(s:.s=.o)))
+EXCLUDE_LOBJS = $(EXCLUDE_OBJS:.o=.lo)
+OBJS = $(filter-out $(EXCLUDE_OBJS),$(SRCS:$(srcdir)/%.c=%.o)) crt/crt1.o crt/Scrt1.o crt/rcrt1.o crt/crti.o crt/crtn.o
+LOBJS = $(filter-out $(EXCLUDE_LOBJS),$(SRCS:$(srcdir)/%.c=%.lo))
 
 LDFLAGS =
 LDFLAGS_AUTO =
@@ -32,7 +40,7 @@ CFLAGS_AUTO = -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$(srcdir)/arch/$(ARCH) $(sort -I./src/internal -I$(srcdir)/src/internal) $(sort -I./include -I$(srcdir)/include)
 CFLAGS_ALL += $(CPPFLAGS) $(CFLAGS_AUTO) $(CFLAGS)
 CFLAGS_ALL_STATIC = $(CFLAGS_ALL)
 CFLAGS_ALL_SHARED = $(CFLAGS_ALL) -fPIC -DSHARED
@@ -41,10 +49,11 @@ LDFLAGS_ALL = $(LDFLAGS_AUTO) $(LDFLAGS)
 
 AR      = $(CROSS_COMPILE)ar
 RANLIB  = $(CROSS_COMPILE)ranlib
-INSTALL = ./tools/install.sh
+INSTALL = $(srcdir)/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 $(srcdir)/arch/$(ARCH)/bits/*.h)
+INCLUDES = $(wildcard $(srcdir)/include/*.h $(srcdir)/include/*/*.h)
+ALL_INCLUDES = $(sort $(INCLUDES:$(srcdir)/%=%) $(GENH) $(ARCH_INCLUDES:$(srcdir)/arch/$(ARCH)/%=include/%))
 
 EMPTY_LIB_NAMES = m rt pthread crypt util xnet resolv dl
 EMPTY_LIBS = $(EMPTY_LIB_NAMES:%=lib/lib%.a)
@@ -55,6 +64,8 @@ TOOL_LIBS = lib/musl-gcc.specs
 ALL_LIBS = $(CRT_LIBS) $(STATIC_LIBS) $(SHARED_LIBS) $(EMPTY_LIBS) $(TOOL_LIBS)
 ALL_TOOLS = tools/musl-gcc
 
+SRC_DIRS = $(sort $(dir $(ASM_OBJS) $(OBJS) $(ALL_LIBS) $(ALL_TOOLS)) arch/$(ARCH)/bits/ crt/ include/ src/internal/)
+
 WRAPCC_GCC = gcc
 WRAPCC_CLANG = clang
 
@@ -64,6 +75,19 @@ LDSO_PATHNAME = $(syslibdir)/ld-musl-$(ARCH)$(SUBARCH).so.1
 
 all: $(ALL_LIBS) $(ALL_TOOLS)
 
+-include $(srcdir)/src/*/$(ARCH)$(ASMSUBARCH)/*.mk
+
+$(ALL_LIBS): | lib/
+$(ALL_TOOLS): | tools/
+$(CRT_LIBS:lib/%=crt/%): | crt/
+$(ASM_OBJS) $(ASM_LOBJS) $(OBJS) $(LOBJS): | $(sort $(dir $(ASM_OBJS) $(OBJS)))
+$(GENH): | arch/$(ARCH)/bits/
+$(GENH_INT): | src/internal/
+include/bits: | include
+
+$(SRC_DIRS):
+	mkdir -p $@
+
 install: install-libs install-headers install-tools
 
 clean:
@@ -82,26 +106,24 @@ include/bits:
 	@test "$(ARCH)" || { echo "Please set ARCH in config.mak before running make." ; exit 1 ; }
 	ln -sf ../arch/$(ARCH)/bits $@
 
-include/bits/alltypes.h.in: include/bits
+include/bits/alltypes.h: $(srcdir)/arch/$(ARCH)/bits/alltypes.h.in $(srcdir)/include/alltypes.h.in $(srcdir)/tools/mkalltypes.sed include/bits
+	sed -f $(srcdir)/tools/mkalltypes.sed $(srcdir)/arch/$(ARCH)/bits/alltypes.h.in $(srcdir)/include/alltypes.h.in > $@
 
-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 > $@
-
-src/internal/version.h: $(wildcard VERSION .git)
-	printf '#define VERSION "%s"\n' "$$(sh tools/version.sh)" > $@
+src/internal/version.h: $(wildcard $(srcdir)/VERSION $(srcdir)/.git)
+	printf '#define VERSION "%s"\n' "$$(cd $(srcdir); sh tools/version.sh)" > $@
 
 src/internal/version.lo: src/internal/version.h
 
-crt/rcrt1.o src/ldso/dlstart.lo src/ldso/dynlink.lo: src/internal/dynlink.h arch/$(ARCH)/reloc.h
+crt/rcrt1.o src/ldso/dlstart.lo src/ldso/dynlink.lo: $(srcdir)/src/internal/dynlink.h $(srcdir)/arch/$(ARCH)/reloc.h
 
-crt/crt1.o crt/Scrt1.o crt/rcrt1.o src/ldso/dlstart.lo: $(wildcard arch/$(ARCH)/crt_arch.h)
+crt/crt1.o crt/scrt1.o crt/rcrt1.o src/ldso/dlstart.lo: $(srcdir)/arch/$(ARCH)/crt_arch.h
 
-crt/rcrt1.o: src/ldso/dlstart.c
+crt/rcrt1.o: $(srcdir)/src/ldso/dlstart.c
 
 crt/Scrt1.o crt/rcrt1.o: CFLAGS_ALL += -fPIC
 
-OPTIMIZE_SRCS = $(wildcard $(OPTIMIZE_GLOBS:%=src/%))
-$(OPTIMIZE_SRCS:%.c=%.o) $(OPTIMIZE_SRCS:%.c=%.lo): CFLAGS += -O3
+OPTIMIZE_SRCS = $(wildcard $(OPTIMIZE_GLOBS:%=$(srcdir)/src/%))
+$(OPTIMIZE_SRCS:$(srcdir)/%.c=%.o) $(OPTIMIZE_SRCS:$(srcdir)/%.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_ALL += $(CFLAGS_MEMOPS)
@@ -115,48 +137,34 @@ $(NOSSP_SRCS:%.c=%.o) $(NOSSP_SRCS:%.c=%.lo): CFLAGS_ALL += $(CFLAGS_NOSSP)
 
 $(CRT_LIBS:lib/%=crt/%): CFLAGS_ALL += -DCRT
 
-# This incantation ensures that changes to any subarch asm files will
-# 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)
-endef
-$(foreach s,$(wildcard src/*/$(ARCH)*/*.s),$(eval $(call mkasmdep,$(s))))
-
 # Choose invocation of assembler to be used
 # $(1) is input file, $(2) is output file, $(3) is assembler flags
 ifeq ($(ADD_CFI),yes)
-	AS_CMD = LC_ALL=C awk -f tools/add-cfi.common.awk -f tools/add-cfi.$(ARCH).awk $< | $(CC) -x assembler -c -o $@ -
+	AS_CMD = LC_ALL=C awk -f $(srcdir)/tools/add-cfi.common.awk -f $(srcdir)/tools/add-cfi.$(ARCH).awk $< | $(CC) -x assembler -c -o $@ -
 else
 	AS_CMD = $(CC) -c -o $@ $<
 endif
 
-%.o: $(ARCH)$(ASMSUBARCH)/%.sub
-	$(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $(dir $<)$(shell cat $<)
-
-%.o: $(ARCH)/%.s
+$(ASM_OBJS): %.o: $(srcdir)/%.s
 	$(AS_CMD) $(CFLAGS_ALL_STATIC)
 
-%.o: %.c $(GENH) $(IMPH)
+$(OBJS): %.o: $(srcdir)/%.c $(GENH) $(IMPH)
 	$(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $<
 
-%.lo: $(ARCH)$(ASMSUBARCH)/%.sub
-	$(CC) $(CFLAGS_ALL_SHARED) -c -o $@ $(dir $<)$(shell cat $<)
-
-%.lo: $(ARCH)/%.s
+$(ASM_LOBJS): %.lo: $(srcdir)/%.s
 	$(AS_CMD) $(CFLAGS_ALL_SHARED)
 
-%.lo: %.c $(GENH) $(IMPH)
+$(LOBJS): %.lo: $(srcdir)/%.c $(GENH) $(IMPH)
 	$(CC) $(CFLAGS_ALL_SHARED) -c -o $@ $<
 
-lib/libc.so: $(LOBJS)
+lib/libc.so: $(LOBJS) $(ASM_LOBJS)
 	$(CC) $(CFLAGS_ALL_SHARED) $(LDFLAGS_ALL) -nostdlib -shared \
 	-Wl,-e,_dlstart -Wl,-Bsymbolic-functions \
-	-o $@ $(LOBJS) $(LIBCC)
+	-o $@ $(LOBJS) $(ASM_LOBJS) $(LIBCC)
 
-lib/libc.a: $(OBJS)
+lib/libc.a: $(OBJS) $(ASM_OBJS)
 	rm -f $@
-	$(AR) rc $@ $(OBJS)
+	$(AR) rc $@ $(OBJS) $(ASM_OBJS)
 	$(RANLIB) $@
 
 $(EMPTY_LIBS):
@@ -166,14 +174,14 @@ $(EMPTY_LIBS):
 lib/%.o: crt/%.o
 	cp $< $@
 
-lib/musl-gcc.specs: tools/musl-gcc.specs.sh config.mak
+lib/musl-gcc.specs: $(srcdir)/tools/musl-gcc.specs.sh config.mak
 	sh $< "$(includedir)" "$(libdir)" "$(LDSO_PATHNAME)" > $@
 
 tools/musl-gcc: config.mak
 	printf '#!/bin/sh\nexec "$${REALGCC:-$(WRAPCC_GCC)}" "$$@" -specs "%s/musl-gcc.specs"\n' "$(libdir)" > $@
 	chmod +x $@
 
-tools/%-clang: tools/%-clang.in config.mak
+tools/%-clang: $(srcdir)/tools/%-clang.in config.mak
 	sed -e 's!@CC@!$(WRAPCC_CLANG)!g' -e 's!@PREFIX@!$(prefix)!g' -e 's!@INCDIR@!$(includedir)!g' -e 's!@LIBDIR@!$(libdir)!g' -e 's!@LDSO@!$(LDSO_PATHNAME)!g' $< > $@
 	chmod +x $@
 
@@ -186,10 +194,13 @@ $(DESTDIR)$(libdir)/%.so: lib/%.so
 $(DESTDIR)$(libdir)/%: lib/%
 	$(INSTALL) -D -m 644 $< $@
 
+$(DESTDIR)$(includedir)/bits/%: $(srcdir)/arch/$(ARCH)/bits/%
+	$(INSTALL) -D -m 644 $< $@
+
 $(DESTDIR)$(includedir)/bits/%: arch/$(ARCH)/bits/%
 	$(INSTALL) -D -m 644 $< $@
 
-$(DESTDIR)$(includedir)/%: include/%
+$(DESTDIR)$(includedir)/%: $(srcdir)/include/%
 	$(INSTALL) -D -m 644 $< $@
 
 $(DESTDIR)$(LDSO_PATHNAME): $(DESTDIR)$(libdir)/libc.so
@@ -202,9 +213,9 @@ install-headers: $(ALL_INCLUDES:include/%=$(DESTDIR)$(includedir)/%)
 install-tools: $(ALL_TOOLS:tools/%=$(DESTDIR)$(bindir)/%)
 
 musl-git-%.tar.gz: .git
-	 git archive --format=tar.gz --prefix=$(patsubst %.tar.gz,%,$@)/ -o $@ $(patsubst musl-git-%.tar.gz,%,$@)
+	 git --git-dir=$(srcdir)/.git archive --format=tar.gz --prefix=$(patsubst %.tar.gz,%,$@)/ -o $@ $(patsubst musl-git-%.tar.gz,%,$@)
 
 musl-%.tar.gz: .git
-	 git archive --format=tar.gz --prefix=$(patsubst %.tar.gz,%,$@)/ -o $@ v$(patsubst musl-%.tar.gz,%,$@)
+	 git --git-dir=$(srcdir)/.git archive --format=tar.gz --prefix=$(patsubst %.tar.gz,%,$@)/ -o $@ v$(patsubst musl-%.tar.gz,%,$@)
 
 .PHONY: all clean install install-libs install-headers install-tools
diff --git a/configure b/configure
index dece1d0..60eb94f 100755
--- a/configure
+++ b/configure
@@ -9,6 +9,9 @@ VAR=VALUE.  See below for descriptions of some of the useful variables.
 
 Defaults for the options are specified in brackets.
 
+Configuration:
+  --srcdir=DIR            source directory [detected]
+
 Installation directories:
   --prefix=PREFIX         main installation prefix [/usr/local/musl]
   --exec-prefix=EPREFIX   installation prefix for executable files [PREFIX]
@@ -117,6 +120,7 @@ CFLAGS_TRY=
 LDFLAGS_AUTO=
 LDFLAGS_TRY=
 OPTIMIZE_GLOBS=
+srcdir=
 prefix=/usr/local/musl
 exec_prefix='$(prefix)'
 bindir='$(exec_prefix)/bin'
@@ -139,6 +143,7 @@ clang_wrapper=no
 for arg ; do
 case "$arg" in
 --help) usage ;;
+--srcdir=*) srcdir=${arg#*=} ;;
 --prefix=*) prefix=${arg#*=} ;;
 --exec-prefix=*) exec_prefix=${arg#*=} ;;
 --bindir=*) bindir=${arg#*=} ;;
@@ -179,11 +184,23 @@ LIBCC=*) LIBCC=${arg#*=} ;;
 esac
 done
 
-for i in prefix exec_prefix bindir libdir includedir syslibdir ; do
+for i in srcdir prefix exec_prefix bindir libdir includedir syslibdir ; do
 stripdir $i
 done
 
 #
+# Get the musl source dir for out-of-tree builds
+#
+if test -z "$srcdir" ; then
+srcdir="${0%/configure}"
+stripdir srcdir
+fi
+abs_builddir="$(pwd)" || fail "$0: cannot determine working directory"
+abs_srcdir="$(cd $srcdir && pwd)" || fail "$0: invalid source directory $srcdir"
+test "$abs_srcdir" = "$abs_builddir" && srcdir=.
+ln -sf $srcdir/Makefile .
+
+#
 # Get a temp filename we can use
 #
 i=0
@@ -321,7 +338,7 @@ __attribute__((__may_alias__))
 #endif
 x;
 EOF
-if $CC $CFLAGS_C99FSE -I./arch/$ARCH -I./include $CPPFLAGS $CFLAGS \
+if $CC $CFLAGS_C99FSE -I$srcdir/arch/$ARCH -I$srcdir/include $CPPFLAGS $CFLAGS \
   -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
 printf "no\n"
 else
@@ -620,7 +637,7 @@ echo '#include <float.h>' > "$tmpc"
 echo '#if LDBL_MANT_DIG == 53' >> "$tmpc"
 echo 'typedef char ldcheck[9-(int)sizeof(long double)];' >> "$tmpc"
 echo '#endif' >> "$tmpc"
-if $CC $CFLAGS_C99FSE -I./arch/$ARCH -I./include $CPPFLAGS $CFLAGS \
+if $CC $CFLAGS_C99FSE -I$srcdir/arch/$ARCH -I$srcdir/include $CPPFLAGS $CFLAGS \
   -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
 printf "yes\n"
 else
@@ -643,6 +660,7 @@ cat << EOF
 ARCH = $ARCH
 SUBARCH = $SUBARCH
 ASMSUBARCH = $ASMSUBARCH
+srcdir = $srcdir
 prefix = $prefix
 exec_prefix = $exec_prefix
 bindir = $bindir
diff --git a/src/fenv/armebhf/fenv.mk b/src/fenv/armebhf/fenv.mk
new file mode 100644
index 0000000..769320f
--- /dev/null
+++ b/src/fenv/armebhf/fenv.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/fenv/armhf/fenv.s
diff --git a/src/fenv/armebhf/fenv.sub b/src/fenv/armebhf/fenv.sub
deleted file mode 100644
index 5281e40..0000000
--- a/src/fenv/armebhf/fenv.sub
+++ /dev/null
@@ -1 +0,0 @@
-../armhf/fenv.s
diff --git a/src/fenv/armhf/fenv.mk b/src/fenv/armhf/fenv.mk
new file mode 100644
index 0000000..769320f
--- /dev/null
+++ b/src/fenv/armhf/fenv.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/fenv/armhf/fenv.s
diff --git a/src/fenv/armhf/fenv.sub b/src/fenv/armhf/fenv.sub
deleted file mode 100644
index ec559cd..0000000
--- a/src/fenv/armhf/fenv.sub
+++ /dev/null
@@ -1 +0,0 @@
-fenv.s
diff --git a/src/fenv/mips-sf/fenv.mk b/src/fenv/mips-sf/fenv.mk
new file mode 100644
index 0000000..96b54d2
--- /dev/null
+++ b/src/fenv/mips-sf/fenv.mk
@@ -0,0 +1 @@
+SRCS += $(srcdir)/src/fenv/fenv.c
diff --git a/src/fenv/mips-sf/fenv.sub b/src/fenv/mips-sf/fenv.sub
deleted file mode 100644
index 9cafca5..0000000
--- a/src/fenv/mips-sf/fenv.sub
+++ /dev/null
@@ -1 +0,0 @@
-../fenv.c
diff --git a/src/fenv/mipsel-sf/fenv.mk b/src/fenv/mipsel-sf/fenv.mk
new file mode 100644
index 0000000..96b54d2
--- /dev/null
+++ b/src/fenv/mipsel-sf/fenv.mk
@@ -0,0 +1 @@
+SRCS += $(srcdir)/src/fenv/fenv.c
diff --git a/src/fenv/mipsel-sf/fenv.sub b/src/fenv/mipsel-sf/fenv.sub
deleted file mode 100644
index 9cafca5..0000000
--- a/src/fenv/mipsel-sf/fenv.sub
+++ /dev/null
@@ -1 +0,0 @@
-../fenv.c
diff --git a/src/fenv/sh-nofpu/fenv.mk b/src/fenv/sh-nofpu/fenv.mk
new file mode 100644
index 0000000..96b54d2
--- /dev/null
+++ b/src/fenv/sh-nofpu/fenv.mk
@@ -0,0 +1 @@
+SRCS += $(srcdir)/src/fenv/fenv.c
diff --git a/src/fenv/sh-nofpu/fenv.sub b/src/fenv/sh-nofpu/fenv.sub
deleted file mode 100644
index 9cafca5..0000000
--- a/src/fenv/sh-nofpu/fenv.sub
+++ /dev/null
@@ -1 +0,0 @@
-../fenv.c
diff --git a/src/fenv/sheb-nofpu/fenv.mk b/src/fenv/sheb-nofpu/fenv.mk
new file mode 100644
index 0000000..96b54d2
--- /dev/null
+++ b/src/fenv/sheb-nofpu/fenv.mk
@@ -0,0 +1 @@
+SRCS += $(srcdir)/src/fenv/fenv.c
diff --git a/src/fenv/sheb-nofpu/fenv.sub b/src/fenv/sheb-nofpu/fenv.sub
deleted file mode 100644
index 9cafca5..0000000
--- a/src/fenv/sheb-nofpu/fenv.sub
+++ /dev/null
@@ -1 +0,0 @@
-../fenv.c
diff --git a/src/math/armebhf/fabs.mk b/src/math/armebhf/fabs.mk
new file mode 100644
index 0000000..836bbd6
--- /dev/null
+++ b/src/math/armebhf/fabs.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/math/armhf/fabs.s
diff --git a/src/math/armebhf/fabs.sub b/src/math/armebhf/fabs.sub
deleted file mode 100644
index 10d9fb7..0000000
--- a/src/math/armebhf/fabs.sub
+++ /dev/null
@@ -1 +0,0 @@
-../armhf/fabs.s
diff --git a/src/math/armebhf/fabsf.mk b/src/math/armebhf/fabsf.mk
new file mode 100644
index 0000000..3640a9d
--- /dev/null
+++ b/src/math/armebhf/fabsf.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/math/armhf/fabsf.s
diff --git a/src/math/armebhf/fabsf.sub b/src/math/armebhf/fabsf.sub
deleted file mode 100644
index 940b20b..0000000
--- a/src/math/armebhf/fabsf.sub
+++ /dev/null
@@ -1 +0,0 @@
-../armhf/fabsf.s
diff --git a/src/math/armebhf/sqrt.mk b/src/math/armebhf/sqrt.mk
new file mode 100644
index 0000000..58ae464
--- /dev/null
+++ b/src/math/armebhf/sqrt.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/math/armhf/sqrt.s
diff --git a/src/math/armebhf/sqrt.sub b/src/math/armebhf/sqrt.sub
deleted file mode 100644
index de2be11..0000000
--- a/src/math/armebhf/sqrt.sub
+++ /dev/null
@@ -1 +0,0 @@
-../armhf/sqrt.s
diff --git a/src/math/armebhf/sqrtf.mk b/src/math/armebhf/sqrtf.mk
new file mode 100644
index 0000000..49d9ed3
--- /dev/null
+++ b/src/math/armebhf/sqrtf.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/math/armhf/sqrtf.s
diff --git a/src/math/armebhf/sqrtf.sub b/src/math/armebhf/sqrtf.sub
deleted file mode 100644
index 150ab9c..0000000
--- a/src/math/armebhf/sqrtf.sub
+++ /dev/null
@@ -1 +0,0 @@
-../armhf/sqrtf.s
diff --git a/src/math/armhf/fabs.mk b/src/math/armhf/fabs.mk
new file mode 100644
index 0000000..836bbd6
--- /dev/null
+++ b/src/math/armhf/fabs.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/math/armhf/fabs.s
diff --git a/src/math/armhf/fabs.sub b/src/math/armhf/fabs.sub
deleted file mode 100644
index 99e8740..0000000
--- a/src/math/armhf/fabs.sub
+++ /dev/null
@@ -1 +0,0 @@
-fabs.s
diff --git a/src/math/armhf/fabsf.mk b/src/math/armhf/fabsf.mk
new file mode 100644
index 0000000..3640a9d
--- /dev/null
+++ b/src/math/armhf/fabsf.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/math/armhf/fabsf.s
diff --git a/src/math/armhf/fabsf.sub b/src/math/armhf/fabsf.sub
deleted file mode 100644
index c04638a..0000000
--- a/src/math/armhf/fabsf.sub
+++ /dev/null
@@ -1 +0,0 @@
-fabsf.s
diff --git a/src/math/armhf/sqrt.mk b/src/math/armhf/sqrt.mk
new file mode 100644
index 0000000..58ae464
--- /dev/null
+++ b/src/math/armhf/sqrt.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/math/armhf/sqrt.s
diff --git a/src/math/armhf/sqrt.sub b/src/math/armhf/sqrt.sub
deleted file mode 100644
index 25de7cf..0000000
--- a/src/math/armhf/sqrt.sub
+++ /dev/null
@@ -1 +0,0 @@
-sqrt.s
diff --git a/src/math/armhf/sqrtf.mk b/src/math/armhf/sqrtf.mk
new file mode 100644
index 0000000..49d9ed3
--- /dev/null
+++ b/src/math/armhf/sqrtf.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/math/armhf/sqrtf.s
diff --git a/src/math/armhf/sqrtf.sub b/src/math/armhf/sqrtf.sub
deleted file mode 100644
index 3bcbac8..0000000
--- a/src/math/armhf/sqrtf.sub
+++ /dev/null
@@ -1 +0,0 @@
-sqrtf.s
diff --git a/src/setjmp/mips-sf/longjmp.mk b/src/setjmp/mips-sf/longjmp.mk
new file mode 100644
index 0000000..fdc926f
--- /dev/null
+++ b/src/setjmp/mips-sf/longjmp.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/setjmp/mips-sf/longjmp.s
diff --git a/src/setjmp/mips-sf/longjmp.sub b/src/setjmp/mips-sf/longjmp.sub
deleted file mode 100644
index e80331b..0000000
--- a/src/setjmp/mips-sf/longjmp.sub
+++ /dev/null
@@ -1 +0,0 @@
-longjmp.s
diff --git a/src/setjmp/mips-sf/setjmp.mk b/src/setjmp/mips-sf/setjmp.mk
new file mode 100644
index 0000000..2a1ad3b
--- /dev/null
+++ b/src/setjmp/mips-sf/setjmp.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/setjmp/mips-sf/setjmp.s
diff --git a/src/setjmp/mips-sf/setjmp.sub b/src/setjmp/mips-sf/setjmp.sub
deleted file mode 100644
index b7ad221..0000000
--- a/src/setjmp/mips-sf/setjmp.sub
+++ /dev/null
@@ -1 +0,0 @@
-setjmp.s
diff --git a/src/setjmp/mipsel-sf/longjmp.mk b/src/setjmp/mipsel-sf/longjmp.mk
new file mode 100644
index 0000000..fdc926f
--- /dev/null
+++ b/src/setjmp/mipsel-sf/longjmp.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/setjmp/mips-sf/longjmp.s
diff --git a/src/setjmp/mipsel-sf/longjmp.sub b/src/setjmp/mipsel-sf/longjmp.sub
deleted file mode 100644
index 6907202..0000000
--- a/src/setjmp/mipsel-sf/longjmp.sub
+++ /dev/null
@@ -1 +0,0 @@
-../mips-sf/longjmp.s
diff --git a/src/setjmp/mipsel-sf/setjmp.mk b/src/setjmp/mipsel-sf/setjmp.mk
new file mode 100644
index 0000000..2a1ad3b
--- /dev/null
+++ b/src/setjmp/mipsel-sf/setjmp.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/setjmp/mips-sf/setjmp.s
diff --git a/src/setjmp/mipsel-sf/setjmp.sub b/src/setjmp/mipsel-sf/setjmp.sub
deleted file mode 100644
index 9917475..0000000
--- a/src/setjmp/mipsel-sf/setjmp.sub
+++ /dev/null
@@ -1 +0,0 @@
-../mips-sf/setjmp.s
diff --git a/src/setjmp/sh-nofpu/longjmp.mk b/src/setjmp/sh-nofpu/longjmp.mk
new file mode 100644
index 0000000..844c7e4
--- /dev/null
+++ b/src/setjmp/sh-nofpu/longjmp.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/setjmp/sh-nofpu/longjmp.s
diff --git a/src/setjmp/sh-nofpu/longjmp.sub b/src/setjmp/sh-nofpu/longjmp.sub
deleted file mode 100644
index e80331b..0000000
--- a/src/setjmp/sh-nofpu/longjmp.sub
+++ /dev/null
@@ -1 +0,0 @@
-longjmp.s
diff --git a/src/setjmp/sh-nofpu/setjmp.mk b/src/setjmp/sh-nofpu/setjmp.mk
new file mode 100644
index 0000000..a97d797
--- /dev/null
+++ b/src/setjmp/sh-nofpu/setjmp.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/setjmp/sh-nofpu/setjmp.s
diff --git a/src/setjmp/sh-nofpu/setjmp.sub b/src/setjmp/sh-nofpu/setjmp.sub
deleted file mode 100644
index b7ad221..0000000
--- a/src/setjmp/sh-nofpu/setjmp.sub
+++ /dev/null
@@ -1 +0,0 @@
-setjmp.s
diff --git a/src/setjmp/sheb-nofpu/longjmp.mk b/src/setjmp/sheb-nofpu/longjmp.mk
new file mode 100644
index 0000000..844c7e4
--- /dev/null
+++ b/src/setjmp/sheb-nofpu/longjmp.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/setjmp/sh-nofpu/longjmp.s
diff --git a/src/setjmp/sheb-nofpu/longjmp.sub b/src/setjmp/sheb-nofpu/longjmp.sub
deleted file mode 100644
index 62fcd2b..0000000
--- a/src/setjmp/sheb-nofpu/longjmp.sub
+++ /dev/null
@@ -1 +0,0 @@
-../sh-nofpu/longjmp.s
diff --git a/src/setjmp/sheb-nofpu/setjmp.mk b/src/setjmp/sheb-nofpu/setjmp.mk
new file mode 100644
index 0000000..a97d797
--- /dev/null
+++ b/src/setjmp/sheb-nofpu/setjmp.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/setjmp/sh-nofpu/setjmp.s
diff --git a/src/setjmp/sheb-nofpu/setjmp.sub b/src/setjmp/sheb-nofpu/setjmp.sub
deleted file mode 100644
index a5bb294..0000000
--- a/src/setjmp/sheb-nofpu/setjmp.sub
+++ /dev/null
@@ -1 +0,0 @@
-../sh-nofpu/setjmp.s
diff --git a/src/string/armel/memcpy.mk b/src/string/armel/memcpy.mk
new file mode 100644
index 0000000..ce03f62
--- /dev/null
+++ b/src/string/armel/memcpy.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/string/armel/memcpy.s
diff --git a/src/string/armel/memcpy.sub b/src/string/armel/memcpy.sub
deleted file mode 100644
index 543f583..0000000
--- a/src/string/armel/memcpy.sub
+++ /dev/null
@@ -1 +0,0 @@
-memcpy.s
diff --git a/src/string/armhf/memcpy.mk b/src/string/armhf/memcpy.mk
new file mode 100644
index 0000000..ce03f62
--- /dev/null
+++ b/src/string/armhf/memcpy.mk
@@ -0,0 +1 @@
+ASM_SRCS += $(srcdir)/src/string/armel/memcpy.s
diff --git a/src/string/armhf/memcpy.sub b/src/string/armhf/memcpy.sub
deleted file mode 100644
index add0590..0000000
--- a/src/string/armhf/memcpy.sub
+++ /dev/null
@@ -1 +0,0 @@
-../armel/memcpy.s
-- 
2.6.0.rc2.230.g3dd15c0


  reply	other threads:[~2015-11-17  2:45 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-06 23:40 Petr Hosek
2015-11-07 13:05 ` Szabolcs Nagy
2015-11-08  0:43   ` Rich Felker
2015-11-08  2:16     ` Szabolcs Nagy
2015-11-08  2:29       ` Rich Felker
2015-11-11 22:02         ` Petr Hosek
2015-11-11 23:08           ` Rich Felker
2015-11-12  0:01             ` Rich Felker
2015-11-12  0:28             ` Petr Hosek
2015-11-12 14:50               ` Szabolcs Nagy
2015-11-12 20:17                 ` Petr Hosek
2015-11-12 20:30                   ` Rich Felker
2015-11-12 21:10                     ` Szabolcs Nagy
2015-11-12 21:52                       ` Rich Felker
2015-11-12 22:35                         ` Petr Hosek
2015-11-12 23:41                           ` Rich Felker
2015-11-17  2:45                             ` Petr Hosek [this message]
2015-11-17  6:05                               ` Petr Hosek
2015-11-17 19:51                                 ` Szabolcs Nagy
2015-11-17 21:00                               ` Rich Felker
2015-11-17 21:37                                 ` Petr Hosek
2015-11-17 22:01                                   ` Rich Felker
2015-11-17 22:15                                     ` Petr Hosek
2015-11-17 22:58                                       ` Rich Felker
2015-11-17 23:06                                     ` Szabolcs Nagy
2015-11-17 23:27                                       ` Rich Felker
2015-11-17 23:43                                         ` Rich Felker
2015-11-17 23:54                                           ` Petr Hosek
2015-11-18  0:19                                             ` Szabolcs Nagy
2015-11-18  0:19                                             ` Rich Felker
2015-11-18 20:19                                               ` Petr Hosek
2015-11-18 21:44                                                 ` Rich Felker
2015-11-19  0:22                                                   ` Petr Hosek
2015-11-20  4:09                                                     ` Rich Felker
2015-11-20  5:02                                                       ` Rich Felker
2015-11-20 10:51                                                       ` Szabolcs Nagy
2015-11-30  1:25                                                       ` Petr Hosek
2015-11-20 22:20                                                     ` Rich Felker
2015-11-30  1:29                                                       ` Petr Hosek
2015-11-30  1:35                                                         ` Rich Felker
2015-11-30  2:49                                                           ` Petr Hosek
2015-11-30 21:14                                                             ` Rich Felker
2015-11-30 22:14                                                               ` Rich Felker
2015-12-01  2:14                                                                 ` Petr Hosek
2015-12-09  0:39                                                                   ` Rich Felker
2015-12-10  1:39                                                                     ` Petr Hosek
2015-12-10 12:47                                                                       ` Szabolcs Nagy
2016-01-17 22:32                                                                       ` Rich Felker
2016-01-17 23:41                                                                         ` Szabolcs Nagy
2016-01-20  3:49                                                                           ` Rich Felker
2015-11-21  1:05                                                     ` Szabolcs Nagy
2015-11-21  1:16                                                       ` Szabolcs Nagy
2015-11-22 14:56                                                     ` Szabolcs Nagy
2015-11-30  1:30                                                       ` Petr Hosek
2015-11-30 12:01                                                         ` Szabolcs Nagy
2015-11-30 22:22                                                           ` Rich Felker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CABBv4Tb4wi1Ddd82c09yJ5gWw2yC-4kRD6F1+Pm7WVrWFyAhbg@mail.gmail.com \
    --to=phosek@chromium.org \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).