Skip to content

Commit

Permalink
Unify target_cpu handling
Browse files Browse the repository at this point in the history
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
  • Loading branch information
behlendorf authored Jan 17, 2020
1 parent e5030fb commit 70835c5
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 63 deletions.
47 changes: 33 additions & 14 deletions config/always-arch.m4
Original file line number Diff line number Diff line change
@@ -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
;;
x86_64)
TARGET_CPU=x86_64
;;
*)
TARGET_ASM_DIR=asm-generic
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)
])
17 changes: 2 additions & 15 deletions lib/libicp/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand All @@ -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
ASM_SOURCES_C =
ASM_SOURCES_AS =
endif

if TARGET_ASM_GENERIC
else
ASM_SOURCES_C =
ASM_SOURCES_AS =
endif

USER_C =

USER_ASM =

KERNEL_C = \
spi/kcf_spi.c \
api/kcf_ctxops.c \
Expand Down Expand Up @@ -78,8 +67,6 @@ KERNEL_C = \
KERNEL_ASM = $(ASM_SOURCES_AS)

nodist_libicp_la_SOURCES = \
$(USER_C) \
$(USER_ASM) \
$(KERNEL_C) \
$(KERNEL_ASM)

Expand Down
14 changes: 12 additions & 2 deletions lib/libspl/Makefile.am
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
1 change: 1 addition & 0 deletions lib/libspl/asm-generic/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/atomic.S
29 changes: 8 additions & 21 deletions module/icp/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 1 addition & 3 deletions module/os/linux/zfs/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
4 changes: 1 addition & 3 deletions module/zcommon/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 3 additions & 5 deletions module/zfs/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 70835c5

Please sign in to comment.