diff options
author | Mike Frysinger <vapier@gentoo.org> | 2022-02-10 08:50:36 +0300 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2022-02-18 04:56:32 +0300 |
commit | ac9f8c46b1bc37df1a4209d9bff6e911f7d6b281 (patch) | |
tree | 3fc189353f8f577e2825e86d7c7893c3ed690ec2 /newlib/configure | |
parent | f2b053f49ed2bd7b4da8cf4ed3a608dc2f425c2b (diff) |
newlib: libm: merge build up a directory
Convert all the libm/ subdir makes into the top-level Makefile. This
allows us to build all of libm from the top Makefile without using any
recursive make calls. This is faster and avoids the funky lib.a logic
where we unpack subdir archives to repack into a single libm.a. The
machine override logic is maintained though by way of Makefile include
ordering, and source file accumulation in libm_a_SOURCES.
One thing to note is that this will require GNU Make because of:
libm_a_CFLAGS = ... $(libm_a_CFLAGS_$(subst /,_,$(@D)))
This was the only way I could find to supporting per-dir compiler
settings, and I couldn't find a POSIX compatible way of transforming
the variable content. I don't think this is a big deal as other
Makefiles in the tree are using GNU Make-specific syntax, but I call
this out as it's the only one so far in the new automake code that
I've been writing.
Automake doesn't provide precise control over the output object names
(by design). This is fine by default as we get consistent names in all
the subdirs: libm_a-<source>.o. But this relies on using the same set
of compiler flags for all objects. We currently compile libm/common/
with different optimizations than the rest.
If we want to compile objects differently, we can create an intermediate
archive with the subset of objects with unique flags, and then add those
objects to the main archive. But Automake will use a different prefix
for the objects, and thus we can't rely on ordering to override.
But if we leverage $@, we can turn Automake's CFLAGS into a multiplex
on a per-dir (and even per-file if we wanted) basis. Unfortunately,
since $@ contains /, Automake complains it's an invalid name. While
GNU Make supports this, it's a POSIX extension, so Automake flags it.
Using $(subst) avoids the Automake warning to get a POSIX compliant
name, albeit with a GNU Make extension.
Diffstat (limited to 'newlib/configure')
-rwxr-xr-x | newlib/configure | 202 |
1 files changed, 144 insertions, 58 deletions
diff --git a/newlib/configure b/newlib/configure index aa944d2c2..998104ad7 100755 --- a/newlib/configure +++ b/newlib/configure @@ -606,10 +606,28 @@ HAVE_MULTISUBDIR_FALSE HAVE_MULTISUBDIR_TRUE HAVE_DOC_FALSE HAVE_DOC_TRUE -LIBM_MACHINE_LIB -LIBM_MACHINE_DIR -HAVE_LIBM_MACHINE_DIR_FALSE -HAVE_LIBM_MACHINE_DIR_TRUE +HAVE_LIBM_MACHINE_X86_64_FALSE +HAVE_LIBM_MACHINE_X86_64_TRUE +HAVE_LIBM_MACHINE_RISCV_FALSE +HAVE_LIBM_MACHINE_RISCV_TRUE +HAVE_LIBM_MACHINE_SPU_FALSE +HAVE_LIBM_MACHINE_SPU_TRUE +HAVE_LIBM_MACHINE_SPARC_FALSE +HAVE_LIBM_MACHINE_SPARC_TRUE +HAVE_LIBM_MACHINE_PRU_FALSE +HAVE_LIBM_MACHINE_PRU_TRUE +HAVE_LIBM_MACHINE_POWERPC_FALSE +HAVE_LIBM_MACHINE_POWERPC_TRUE +HAVE_LIBM_MACHINE_NDS32_FALSE +HAVE_LIBM_MACHINE_NDS32_TRUE +HAVE_LIBM_MACHINE_MIPS_FALSE +HAVE_LIBM_MACHINE_MIPS_TRUE +HAVE_LIBM_MACHINE_I386_FALSE +HAVE_LIBM_MACHINE_I386_TRUE +HAVE_LIBM_MACHINE_ARM_FALSE +HAVE_LIBM_MACHINE_ARM_TRUE +HAVE_LIBM_MACHINE_AARCH64_FALSE +HAVE_LIBM_MACHINE_AARCH64_TRUE HAS_NDS32_FPU_DP_FALSE HAS_NDS32_FPU_DP_TRUE HAS_NDS32_FPU_SP_FALSE @@ -4794,49 +4812,94 @@ fi -LIBM_MACHINE_LIB= -if test -n "${libm_machine_dir}"; then - case ${libm_machine_dir} in - aarch64) ac_config_files="$ac_config_files libm/machine/aarch64/Makefile" - ;; - arm) ac_config_files="$ac_config_files libm/machine/arm/Makefile" - ;; - i386) ac_config_files="$ac_config_files libm/machine/i386/Makefile" - ;; - nds32) ac_config_files="$ac_config_files libm/machine/nds32/Makefile" - ;; - pru) ac_config_files="$ac_config_files libm/machine/pru/Makefile" - ;; - spu) ac_config_files="$ac_config_files libm/machine/spu/Makefile" - ;; - riscv) ac_config_files="$ac_config_files libm/machine/riscv/Makefile" - ;; - x86_64) ac_config_files="$ac_config_files libm/machine/x86_64/Makefile" - ;; - powerpc) ac_config_files="$ac_config_files libm/machine/powerpc/Makefile" - ;; - sparc) ac_config_files="$ac_config_files libm/machine/sparc/Makefile" - ;; - mips) ac_config_files="$ac_config_files libm/machine/mips/Makefile" - ;; - *) as_fn_error $? "unsupported libm_machine_dir \"${libm_machine_dir}\"" "$LINENO" 5 ;; - esac + if test "${libm_machine_dir}" = "aarch64"; then + HAVE_LIBM_MACHINE_AARCH64_TRUE= + HAVE_LIBM_MACHINE_AARCH64_FALSE='#' +else + HAVE_LIBM_MACHINE_AARCH64_TRUE='#' + HAVE_LIBM_MACHINE_AARCH64_FALSE= +fi - LIBM_MACHINE_DIR=machine/${libm_machine_dir} - LIBM_MACHINE_LIB=${LIBM_MACHINE_DIR}/lib.a + if test "${libm_machine_dir}" = "arm"; then + HAVE_LIBM_MACHINE_ARM_TRUE= + HAVE_LIBM_MACHINE_ARM_FALSE='#' +else + HAVE_LIBM_MACHINE_ARM_TRUE='#' + HAVE_LIBM_MACHINE_ARM_FALSE= fi - if test "x${LIBM_MACHINE_DIR}" != x; then - HAVE_LIBM_MACHINE_DIR_TRUE= - HAVE_LIBM_MACHINE_DIR_FALSE='#' + + if test "${libm_machine_dir}" = "i386"; then + HAVE_LIBM_MACHINE_I386_TRUE= + HAVE_LIBM_MACHINE_I386_FALSE='#' else - HAVE_LIBM_MACHINE_DIR_TRUE='#' - HAVE_LIBM_MACHINE_DIR_FALSE= + HAVE_LIBM_MACHINE_I386_TRUE='#' + HAVE_LIBM_MACHINE_I386_FALSE= fi + if test "${libm_machine_dir}" = "mips"; then + HAVE_LIBM_MACHINE_MIPS_TRUE= + HAVE_LIBM_MACHINE_MIPS_FALSE='#' +else + HAVE_LIBM_MACHINE_MIPS_TRUE='#' + HAVE_LIBM_MACHINE_MIPS_FALSE= +fi + if test "${libm_machine_dir}" = "nds32"; then + HAVE_LIBM_MACHINE_NDS32_TRUE= + HAVE_LIBM_MACHINE_NDS32_FALSE='#' +else + HAVE_LIBM_MACHINE_NDS32_TRUE='#' + HAVE_LIBM_MACHINE_NDS32_FALSE= +fi + if test "${libm_machine_dir}" = "powerpc"; then + HAVE_LIBM_MACHINE_POWERPC_TRUE= + HAVE_LIBM_MACHINE_POWERPC_FALSE='#' +else + HAVE_LIBM_MACHINE_POWERPC_TRUE='#' + HAVE_LIBM_MACHINE_POWERPC_FALSE= +fi + + if test "${libm_machine_dir}" = "pru"; then + HAVE_LIBM_MACHINE_PRU_TRUE= + HAVE_LIBM_MACHINE_PRU_FALSE='#' +else + HAVE_LIBM_MACHINE_PRU_TRUE='#' + HAVE_LIBM_MACHINE_PRU_FALSE= +fi + + if test "${libm_machine_dir}" = "sparc"; then + HAVE_LIBM_MACHINE_SPARC_TRUE= + HAVE_LIBM_MACHINE_SPARC_FALSE='#' +else + HAVE_LIBM_MACHINE_SPARC_TRUE='#' + HAVE_LIBM_MACHINE_SPARC_FALSE= +fi + + if test "${libm_machine_dir}" = "spu"; then + HAVE_LIBM_MACHINE_SPU_TRUE= + HAVE_LIBM_MACHINE_SPU_FALSE='#' +else + HAVE_LIBM_MACHINE_SPU_TRUE='#' + HAVE_LIBM_MACHINE_SPU_FALSE= +fi + + if test "${libm_machine_dir}" = "riscv"; then + HAVE_LIBM_MACHINE_RISCV_TRUE= + HAVE_LIBM_MACHINE_RISCV_FALSE='#' +else + HAVE_LIBM_MACHINE_RISCV_TRUE='#' + HAVE_LIBM_MACHINE_RISCV_FALSE= +fi + + if test "${libm_machine_dir}" = "x86_64"; then + HAVE_LIBM_MACHINE_X86_64_TRUE= + HAVE_LIBM_MACHINE_X86_64_FALSE='#' +else + HAVE_LIBM_MACHINE_X86_64_TRUE='#' + HAVE_LIBM_MACHINE_X86_64_FALSE= +fi -ac_config_files="$ac_config_files libm/Makefile libm/math/Makefile libm/mathfp/Makefile libm/common/Makefile libm/complex/Makefile libm/fenv/Makefile" @@ -5995,8 +6058,48 @@ if test -z "${HAS_NDS32_FPU_DP_TRUE}" && test -z "${HAS_NDS32_FPU_DP_FALSE}"; th as_fn_error $? "conditional \"HAS_NDS32_FPU_DP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${HAVE_LIBM_MACHINE_DIR_TRUE}" && test -z "${HAVE_LIBM_MACHINE_DIR_FALSE}"; then - as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_DIR\" was never defined. +if test -z "${HAVE_LIBM_MACHINE_AARCH64_TRUE}" && test -z "${HAVE_LIBM_MACHINE_AARCH64_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_AARCH64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LIBM_MACHINE_ARM_TRUE}" && test -z "${HAVE_LIBM_MACHINE_ARM_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_ARM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LIBM_MACHINE_I386_TRUE}" && test -z "${HAVE_LIBM_MACHINE_I386_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_I386\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LIBM_MACHINE_MIPS_TRUE}" && test -z "${HAVE_LIBM_MACHINE_MIPS_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_MIPS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LIBM_MACHINE_NDS32_TRUE}" && test -z "${HAVE_LIBM_MACHINE_NDS32_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_NDS32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LIBM_MACHINE_POWERPC_TRUE}" && test -z "${HAVE_LIBM_MACHINE_POWERPC_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_POWERPC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LIBM_MACHINE_PRU_TRUE}" && test -z "${HAVE_LIBM_MACHINE_PRU_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_PRU\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LIBM_MACHINE_SPARC_TRUE}" && test -z "${HAVE_LIBM_MACHINE_SPARC_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_SPARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LIBM_MACHINE_SPU_TRUE}" && test -z "${HAVE_LIBM_MACHINE_SPU_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_SPU\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LIBM_MACHINE_RISCV_TRUE}" && test -z "${HAVE_LIBM_MACHINE_RISCV_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_RISCV\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_LIBM_MACHINE_X86_64_TRUE}" && test -z "${HAVE_LIBM_MACHINE_X86_64_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_X86_64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_DOC_TRUE}" && test -z "${HAVE_DOC_FALSE}"; then @@ -6623,23 +6726,6 @@ do "newlib.h") CONFIG_HEADERS="$CONFIG_HEADERS newlib.h:newlib.hin" ;; "_newlib_version.h") CONFIG_HEADERS="$CONFIG_HEADERS _newlib_version.h:_newlib_version.hin" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; - "libm/machine/aarch64/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/aarch64/Makefile" ;; - "libm/machine/arm/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/arm/Makefile" ;; - "libm/machine/i386/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/i386/Makefile" ;; - "libm/machine/nds32/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/nds32/Makefile" ;; - "libm/machine/pru/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/pru/Makefile" ;; - "libm/machine/spu/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/spu/Makefile" ;; - "libm/machine/riscv/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/riscv/Makefile" ;; - "libm/machine/x86_64/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/x86_64/Makefile" ;; - "libm/machine/powerpc/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/powerpc/Makefile" ;; - "libm/machine/sparc/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/sparc/Makefile" ;; - "libm/machine/mips/Makefile") CONFIG_FILES="$CONFIG_FILES libm/machine/mips/Makefile" ;; - "libm/Makefile") CONFIG_FILES="$CONFIG_FILES libm/Makefile" ;; - "libm/math/Makefile") CONFIG_FILES="$CONFIG_FILES libm/math/Makefile" ;; - "libm/mathfp/Makefile") CONFIG_FILES="$CONFIG_FILES libm/mathfp/Makefile" ;; - "libm/common/Makefile") CONFIG_FILES="$CONFIG_FILES libm/common/Makefile" ;; - "libm/complex/Makefile") CONFIG_FILES="$CONFIG_FILES libm/complex/Makefile" ;; - "libm/fenv/Makefile") CONFIG_FILES="$CONFIG_FILES libm/fenv/Makefile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; |