From 70835c5b755e4fe1e16724e0a5d24e7e451f755c Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Fri, 17 Jan 2020 12:40:09 -0800 Subject: [PATCH] Unify target_cpu handling Over the years several slightly different approaches were used in the Makefiles to determine the target architecture. This change updates both the build system and Makefile to handle this in a consistent fashion. TARGET_CPU is set to i386, x86_64, powerpc, aarch6 or sparc64 and made available in the Makefiles to be used as appropriate. Reviewed-by: Ryan Moeller Signed-off-by: Brian Behlendorf Closes #9848 --- config/always-arch.m4 | 47 ++++++++++++++++++++++--------- lib/libicp/Makefile.am | 17 ++--------- lib/libspl/Makefile.am | 14 +++++++-- lib/libspl/asm-generic/.gitignore | 1 + module/icp/Makefile.in | 29 ++++++------------- module/os/linux/zfs/Makefile.in | 4 +-- module/zcommon/Makefile.in | 4 +-- module/zfs/Makefile.in | 8 ++---- 8 files changed, 61 insertions(+), 63 deletions(-) create mode 100644 lib/libspl/asm-generic/.gitignore diff --git a/config/always-arch.m4 b/config/always-arch.m4 index c3e6b4a978..eb8839b97d 100644 --- a/config/always-arch.m4 +++ b/config/always-arch.m4 @@ -1,22 +1,41 @@ dnl # -dnl # Set the target arch for libspl atomic implementation and the icp +dnl # Set the target cpu architecture. This allows the +dnl # following syntax to be used in a Makefile.am. +dnl # +dnl # ifeq ($(TARGET_CPU),x86_64) +dnl # ... +dnl # endif +dnl # +dnl # if TARGET_CPU_POWERPC +dnl # ... +dnl # else +dnl # ... +dnl # endif dnl # AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_ARCH], [ - AC_MSG_CHECKING(for target asm dir) - TARGET_ARCH=`echo ${target_cpu} | sed -e s/i.86/i386/` - - case $TARGET_ARCH in - i386|x86_64) - TARGET_ASM_DIR=asm-${TARGET_ARCH} + case $target_cpu in + i?86) + TARGET_CPU=i386 ;; - *) - TARGET_ASM_DIR=asm-generic + x86_64) + TARGET_CPU=x86_64 + ;; + powerpc*) + TARGET_CPU=powerpc + ;; + aarch64*) + TARGET_CPU=aarch64 + ;; + sparc64) + TARGET_CPU=sparc64 ;; esac - AC_SUBST([TARGET_ASM_DIR]) - AM_CONDITIONAL([TARGET_ASM_X86_64], test $TARGET_ASM_DIR = asm-x86_64) - AM_CONDITIONAL([TARGET_ASM_I386], test $TARGET_ASM_DIR = asm-i386) - AM_CONDITIONAL([TARGET_ASM_GENERIC], test $TARGET_ASM_DIR = asm-generic) - AC_MSG_RESULT([$TARGET_ASM_DIR]) + AC_SUBST(TARGET_CPU) + + AM_CONDITIONAL([TARGET_CPU_I386], test $TARGET_CPU = i386) + AM_CONDITIONAL([TARGET_CPU_X86_64], test $TARGET_CPU = x86_64) + AM_CONDITIONAL([TARGET_CPU_POWERPC], test $TARGET_CPU = powerpc) + AM_CONDITIONAL([TARGET_CPU_AARCH64], test $TARGET_CPU = aarch64) + AM_CONDITIONAL([TARGET_CPU_SPARC64], test $TARGET_CPU = sparc64) ]) diff --git a/lib/libicp/Makefile.am b/lib/libicp/Makefile.am index 8b6c417714..02dfce22f3 100644 --- a/lib/libicp/Makefile.am +++ b/lib/libicp/Makefile.am @@ -9,7 +9,7 @@ AM_CFLAGS += $(FRAME_LARGER_THAN) noinst_LTLIBRARIES = libicp.la -if TARGET_ASM_X86_64 +if TARGET_CPU_X86_64 ASM_SOURCES_C = asm-x86_64/aes/aeskey.c ASM_SOURCES_AS = \ asm-x86_64/aes/aes_amd64.S \ @@ -18,22 +18,11 @@ ASM_SOURCES_AS = \ asm-x86_64/sha1/sha1-x86_64.S \ asm-x86_64/sha2/sha256_impl.S \ asm-x86_64/sha2/sha512_impl.S -endif - -if TARGET_ASM_I386 +else ASM_SOURCES_C = ASM_SOURCES_AS = endif -if TARGET_ASM_GENERIC -ASM_SOURCES_C = -ASM_SOURCES_AS = -endif - -USER_C = - -USER_ASM = - KERNEL_C = \ spi/kcf_spi.c \ api/kcf_ctxops.c \ @@ -78,8 +67,6 @@ KERNEL_C = \ KERNEL_ASM = $(ASM_SOURCES_AS) nodist_libicp_la_SOURCES = \ - $(USER_C) \ - $(USER_ASM) \ $(KERNEL_C) \ $(KERNEL_ASM) diff --git a/lib/libspl/Makefile.am b/lib/libspl/Makefile.am index 313760175c..3101b5fc50 100644 --- a/lib/libspl/Makefile.am +++ b/lib/libspl/Makefile.am @@ -1,10 +1,20 @@ include $(top_srcdir)/config/Rules.am +if TARGET_CPU_I386 +TARGET_CPU_DIR = asm-i386 +else +if TARGET_CPU_X86_64 +TARGET_CPU_DIR = asm-x86_64 +else +TARGET_CPU_DIR = asm-generic +endif +endif + VPATH = \ $(top_srcdir)/lib/libspl \ - $(top_srcdir)/lib/libspl/$(TARGET_ASM_DIR) + $(top_srcdir)/lib/libspl/$(TARGET_CPU_DIR) -SUBDIRS = include $(TARGET_ASM_DIR) +SUBDIRS = include $(TARGET_CPU_DIR) DIST_SUBDIRS = include asm-generic asm-i386 asm-x86_64 AM_CFLAGS += $(LIBTIRPC_CFLAGS) diff --git a/lib/libspl/asm-generic/.gitignore b/lib/libspl/asm-generic/.gitignore new file mode 100644 index 0000000000..2792cf7b45 --- /dev/null +++ b/lib/libspl/asm-generic/.gitignore @@ -0,0 +1 @@ +/atomic.S diff --git a/module/icp/Makefile.in b/module/icp/Makefile.in index 18e8dc313b..9e1f2906d3 100644 --- a/module/icp/Makefile.in +++ b/module/icp/Makefile.in @@ -3,26 +3,6 @@ obj = @abs_builddir@ MODULE := icp -TARGET_ASM_DIR = @TARGET_ASM_DIR@ - -ifeq ($(TARGET_ASM_DIR), asm-x86_64) -ASM_SOURCES := asm-x86_64/aes/aeskey.o -ASM_SOURCES += asm-x86_64/aes/aes_amd64.o -ASM_SOURCES += asm-x86_64/aes/aes_aesni.o -ASM_SOURCES += asm-x86_64/modes/gcm_pclmulqdq.o -ASM_SOURCES += asm-x86_64/sha1/sha1-x86_64.o -ASM_SOURCES += asm-x86_64/sha2/sha256_impl.o -ASM_SOURCES += asm-x86_64/sha2/sha512_impl.o -endif - -ifeq ($(TARGET_ASM_DIR), asm-i386) -ASM_SOURCES := -endif - -ifeq ($(TARGET_ASM_DIR), asm-generic) -ASM_SOURCES := -endif - obj-$(CONFIG_ZFS) := $(MODULE).o asflags-y := -I$(src)/include @@ -66,7 +46,14 @@ $(MODULE)-objs += algs/sha1/sha1.o $(MODULE)-objs += algs/skein/skein.o $(MODULE)-objs += algs/skein/skein_block.o $(MODULE)-objs += algs/skein/skein_iv.o -$(MODULE)-objs += $(ASM_SOURCES) + +$(MODULE)-$(CONFIG_X86_64) += asm-x86_64/aes/aeskey.o +$(MODULE)-$(CONFIG_X86_64) += asm-x86_64/aes/aes_amd64.o +$(MODULE)-$(CONFIG_X86_64) += asm-x86_64/aes/aes_aesni.o +$(MODULE)-$(CONFIG_X86_64) += asm-x86_64/modes/gcm_pclmulqdq.o +$(MODULE)-$(CONFIG_X86_64) += asm-x86_64/sha1/sha1-x86_64.o +$(MODULE)-$(CONFIG_X86_64) += asm-x86_64/sha2/sha256_impl.o +$(MODULE)-$(CONFIG_X86_64) += asm-x86_64/sha2/sha512_impl.o $(MODULE)-$(CONFIG_X86) += algs/modes/gcm_pclmulqdq.o $(MODULE)-$(CONFIG_X86) += algs/aes/aes_impl_aesni.o diff --git a/module/os/linux/zfs/Makefile.in b/module/os/linux/zfs/Makefile.in index 60d92182f3..3c4a4cbb10 100644 --- a/module/os/linux/zfs/Makefile.in +++ b/module/os/linux/zfs/Makefile.in @@ -3,9 +3,7 @@ # # Suppress unused-value warnings in sparc64 architecture headers -ifeq ($(target_cpu),sparc64) -ccflags-y += -Wno-unused-value -endif +ccflags-$(CONFIG_SPARC64) += -Wno-unused-value ccflags-y += -I@abs_top_srcdir@/module/os/linux/zfs diff --git a/module/zcommon/Makefile.in b/module/zcommon/Makefile.in index 0ac0d43ee8..b2e34f2e93 100644 --- a/module/zcommon/Makefile.in +++ b/module/zcommon/Makefile.in @@ -9,9 +9,7 @@ obj-$(CONFIG_ZFS) := $(MODULE).o ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) # Suppress unused-value warnings in sparc64 architecture headers -ifeq ($(target_cpu),sparc64) -ccflags-y += -Wno-unused-value -endif +ccflags-$(CONFIG_SPARC64) += -Wno-unused-value $(MODULE)-objs += zfeature_common.o $(MODULE)-objs += zfs_comutil.o diff --git a/module/zfs/Makefile.in b/module/zfs/Makefile.in index a98ba4fac0..ef35ea5dd0 100644 --- a/module/zfs/Makefile.in +++ b/module/zfs/Makefile.in @@ -8,14 +8,12 @@ obj-$(CONFIG_ZFS) := $(MODULE).o ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) -# Suppress unused-value warnings in sparc64 architecture headers -ifeq ($(target_cpu),sparc64) -ccflags-y += -Wno-unused-value -endif - # Suppress unused but set variable warnings often due to ASSERTs ccflags-y += $(NO_UNUSED_BUT_SET_VARIABLE) +# Suppress unused-value warnings in sparc64 architecture headers +ccflags-$(CONFIG_SPARC64) += -Wno-unused-value + $(MODULE)-objs += aggsum.o $(MODULE)-objs += arc.o $(MODULE)-objs += blkptr.o