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 <ryan@ixsystems.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #9848
This commit is contained in:
Brian Behlendorf 2020-01-17 12:40:09 -08:00 committed by GitHub
parent e5030fbc28
commit 70835c5b75
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 61 additions and 63 deletions

View File

@ -1,22 +1,41 @@
dnl # 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 # dnl #
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_ARCH], [ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_ARCH], [
AC_MSG_CHECKING(for target asm dir) case $target_cpu in
TARGET_ARCH=`echo ${target_cpu} | sed -e s/i.86/i386/` i?86)
TARGET_CPU=i386
case $TARGET_ARCH in
i386|x86_64)
TARGET_ASM_DIR=asm-${TARGET_ARCH}
;; ;;
*) x86_64)
TARGET_ASM_DIR=asm-generic TARGET_CPU=x86_64
;;
powerpc*)
TARGET_CPU=powerpc
;;
aarch64*)
TARGET_CPU=aarch64
;;
sparc64)
TARGET_CPU=sparc64
;; ;;
esac esac
AC_SUBST([TARGET_ASM_DIR]) AC_SUBST(TARGET_CPU)
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_CPU_I386], test $TARGET_CPU = i386)
AM_CONDITIONAL([TARGET_ASM_GENERIC], test $TARGET_ASM_DIR = asm-generic) AM_CONDITIONAL([TARGET_CPU_X86_64], test $TARGET_CPU = x86_64)
AC_MSG_RESULT([$TARGET_ASM_DIR]) 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)
]) ])

View File

@ -9,7 +9,7 @@ AM_CFLAGS += $(FRAME_LARGER_THAN)
noinst_LTLIBRARIES = libicp.la 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_C = asm-x86_64/aes/aeskey.c
ASM_SOURCES_AS = \ ASM_SOURCES_AS = \
asm-x86_64/aes/aes_amd64.S \ 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/sha1/sha1-x86_64.S \
asm-x86_64/sha2/sha256_impl.S \ asm-x86_64/sha2/sha256_impl.S \
asm-x86_64/sha2/sha512_impl.S asm-x86_64/sha2/sha512_impl.S
endif else
if TARGET_ASM_I386
ASM_SOURCES_C = ASM_SOURCES_C =
ASM_SOURCES_AS = ASM_SOURCES_AS =
endif endif
if TARGET_ASM_GENERIC
ASM_SOURCES_C =
ASM_SOURCES_AS =
endif
USER_C =
USER_ASM =
KERNEL_C = \ KERNEL_C = \
spi/kcf_spi.c \ spi/kcf_spi.c \
api/kcf_ctxops.c \ api/kcf_ctxops.c \
@ -78,8 +67,6 @@ KERNEL_C = \
KERNEL_ASM = $(ASM_SOURCES_AS) KERNEL_ASM = $(ASM_SOURCES_AS)
nodist_libicp_la_SOURCES = \ nodist_libicp_la_SOURCES = \
$(USER_C) \
$(USER_ASM) \
$(KERNEL_C) \ $(KERNEL_C) \
$(KERNEL_ASM) $(KERNEL_ASM)

View File

@ -1,10 +1,20 @@
include $(top_srcdir)/config/Rules.am 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 = \ VPATH = \
$(top_srcdir)/lib/libspl \ $(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 DIST_SUBDIRS = include asm-generic asm-i386 asm-x86_64
AM_CFLAGS += $(LIBTIRPC_CFLAGS) AM_CFLAGS += $(LIBTIRPC_CFLAGS)

1
lib/libspl/asm-generic/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/atomic.S

View File

@ -3,26 +3,6 @@ obj = @abs_builddir@
MODULE := icp 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 obj-$(CONFIG_ZFS) := $(MODULE).o
asflags-y := -I$(src)/include 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.o
$(MODULE)-objs += algs/skein/skein_block.o $(MODULE)-objs += algs/skein/skein_block.o
$(MODULE)-objs += algs/skein/skein_iv.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/modes/gcm_pclmulqdq.o
$(MODULE)-$(CONFIG_X86) += algs/aes/aes_impl_aesni.o $(MODULE)-$(CONFIG_X86) += algs/aes/aes_impl_aesni.o

View File

@ -3,9 +3,7 @@
# #
# Suppress unused-value warnings in sparc64 architecture headers # Suppress unused-value warnings in sparc64 architecture headers
ifeq ($(target_cpu),sparc64) ccflags-$(CONFIG_SPARC64) += -Wno-unused-value
ccflags-y += -Wno-unused-value
endif
ccflags-y += -I@abs_top_srcdir@/module/os/linux/zfs ccflags-y += -I@abs_top_srcdir@/module/os/linux/zfs

View File

@ -9,9 +9,7 @@ obj-$(CONFIG_ZFS) := $(MODULE).o
ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
# Suppress unused-value warnings in sparc64 architecture headers # Suppress unused-value warnings in sparc64 architecture headers
ifeq ($(target_cpu),sparc64) ccflags-$(CONFIG_SPARC64) += -Wno-unused-value
ccflags-y += -Wno-unused-value
endif
$(MODULE)-objs += zfeature_common.o $(MODULE)-objs += zfeature_common.o
$(MODULE)-objs += zfs_comutil.o $(MODULE)-objs += zfs_comutil.o

View File

@ -8,14 +8,12 @@ obj-$(CONFIG_ZFS) := $(MODULE).o
ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) 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 # Suppress unused but set variable warnings often due to ASSERTs
ccflags-y += $(NO_UNUSED_BUT_SET_VARIABLE) 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 += aggsum.o
$(MODULE)-objs += arc.o $(MODULE)-objs += arc.o
$(MODULE)-objs += blkptr.o $(MODULE)-objs += blkptr.o