LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
To: linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: "Jason A. Donenfeld" <Jason@zx2c4.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	x86@kernel.org, linux-crypto@vger.kernel.org
Subject: [PATCH RFC 1/3] x86: probe assembler instead of kconfig instead of makefile
Date: Fri, 20 Mar 2020 18:49:43 -0600	[thread overview]
Message-ID: <20200321004945.451497-2-Jason@zx2c4.com> (raw)
In-Reply-To: <20200321004945.451497-1-Jason@zx2c4.com>

Doing this probing inside of the Makefiles means we have a maze of
ifdefs inside the source code and child Makefiles that need to make
proper decisions on this too. Instead, we do it at Kconfig time, like
many other compiler and assembler options, which allows us to set up the
dependencies normally for full compilation units.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
 arch/x86/Kconfig              |  2 ++
 arch/x86/Kconfig.assembler    | 36 +++++++++++++++++++++++++++++++++++
 arch/x86/Makefile             | 22 ---------------------
 drivers/gpu/drm/i915/Makefile |  3 ---
 lib/raid6/test/Makefile       |  9 ---------
 5 files changed, 38 insertions(+), 34 deletions(-)
 create mode 100644 arch/x86/Kconfig.assembler

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index beea77046f9b..707673227837 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -2935,3 +2935,5 @@ config HAVE_ATOMIC_IOMAP
 source "drivers/firmware/Kconfig"
 
 source "arch/x86/kvm/Kconfig"
+
+source "arch/x86/Kconfig.assembler"
diff --git a/arch/x86/Kconfig.assembler b/arch/x86/Kconfig.assembler
new file mode 100644
index 000000000000..d90ed2d7adae
--- /dev/null
+++ b/arch/x86/Kconfig.assembler
@@ -0,0 +1,36 @@
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+
+config AS_CFI
+	def_bool $(as-instr,.cfi_startproc\n.cfi_rel_offset rsp$(comma)0\n.cfi_endproc) if 64BIT
+	def_bool $(as-instr,.cfi_startproc\n.cfi_rel_offset esp$(comma)0\n.cfi_endproc) if !64BIT
+
+config AS_CFI_SIGNAL_FRAME
+	def_bool $(as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc)
+
+config AS_CFI_SECTIONS
+	def_bool $(as-instr,.cfi_sections .debug_frame)
+
+config AS_SSSE3
+	def_bool $(as-instr,pshufb %xmm0$(comma)%xmm0)
+
+config AS_AVX
+	def_bool $(as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2)
+
+config AS_AVX2
+	def_bool $(as-instr,vpbroadcastb %xmm0$(comma)%ymm1)
+
+config AS_AVX512
+	def_bool $(as-instr,vpmovm2b %k1$(comma)%zmm5)
+
+config AS_SHA1_NI
+	def_bool $(as-instr,sha1msg1 %xmm0$(comma)%xmm1)
+
+config AS_SHA256_NI
+	def_bool $(as-instr,sha256msg1 %xmm0$(comma)%xmm1)
+
+config AS_ADX
+	def_bool $(as-instr,adox %r10$(comma)%r10)
+
+config AS_MOVNTDQA
+	def_bool $(as-instr,movntdqa (%eax)$(comma)%xmm0)
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 513a55562d75..b65ec63c7db7 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -177,28 +177,6 @@ ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1)
 	KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,)
 endif
 
-# Stackpointer is addressed different for 32 bit and 64 bit x86
-sp-$(CONFIG_X86_32) := esp
-sp-$(CONFIG_X86_64) := rsp
-
-# do binutils support CFI?
-cfi := $(call as-instr,.cfi_startproc\n.cfi_rel_offset $(sp-y)$(comma)0\n.cfi_endproc,-DCONFIG_AS_CFI=1)
-# is .cfi_signal_frame supported too?
-cfi-sigframe := $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1)
-cfi-sections := $(call as-instr,.cfi_sections .debug_frame,-DCONFIG_AS_CFI_SECTIONS=1)
-
-# does binutils support specific instructions?
-asinstr += $(call as-instr,pshufb %xmm0$(comma)%xmm0,-DCONFIG_AS_SSSE3=1)
-avx_instr := $(call as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2,-DCONFIG_AS_AVX=1)
-avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1)
-avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1)
-sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1)
-sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1)
-adx_instr := $(call as-instr,adox %r10$(comma)%r10,-DCONFIG_AS_ADX=1)
-
-KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
-KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
-
 KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)
 
 #
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index a1f2411aa21b..e559e53fc634 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -28,9 +28,6 @@ subdir-ccflags-$(CONFIG_DRM_I915_WERROR) += -Werror
 CFLAGS_i915_pci.o = $(call cc-disable-warning, override-init)
 CFLAGS_display/intel_fbdev.o = $(call cc-disable-warning, override-init)
 
-subdir-ccflags-y += \
-	$(call as-instr,movntdqa (%eax)$(comma)%xmm0,-DCONFIG_AS_MOVNTDQA)
-
 subdir-ccflags-y += -I$(srctree)/$(src)
 
 # Please keep these build lists sorted!
diff --git a/lib/raid6/test/Makefile b/lib/raid6/test/Makefile
index 3ab8720aa2f8..f8d4a44bc03d 100644
--- a/lib/raid6/test/Makefile
+++ b/lib/raid6/test/Makefile
@@ -34,15 +34,6 @@ endif
 
 ifeq ($(IS_X86),yes)
         OBJS   += mmx.o sse1.o sse2.o avx2.o recov_ssse3.o recov_avx2.o avx512.o recov_avx512.o
-        CFLAGS += $(shell echo "pshufb %xmm0, %xmm0" |		\
-                    gcc -c -x assembler - >&/dev/null &&	\
-                    rm ./-.o && echo -DCONFIG_AS_SSSE3=1)
-        CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1" |	\
-                    gcc -c -x assembler - >&/dev/null &&	\
-                    rm ./-.o && echo -DCONFIG_AS_AVX2=1)
-	CFLAGS += $(shell echo "vpmovm2b %k1, %zmm5" |          \
-		    gcc -c -x assembler - >&/dev/null &&        \
-		    rm ./-.o && echo -DCONFIG_AS_AVX512=1)
 else ifeq ($(HAS_NEON),yes)
         OBJS   += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
         CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1
-- 
2.25.1


  reply	other threads:[~2020-03-21  0:50 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-16  8:49 [GIT PULL] Crypto Update for 5.4 Herbert Xu
2019-09-18 19:55 ` pr-tracker-bot
2019-09-23  5:05 ` [GIT PULL] Crypto Fixes " Herbert Xu
2019-09-23 16:50   ` pr-tracker-bot
2019-10-10 12:38   ` Herbert Xu
2019-10-10 15:45     ` pr-tracker-bot
2019-11-17  1:00     ` Herbert Xu
2019-11-17  2:35       ` pr-tracker-bot
2019-12-02  6:20   ` [GIT PULL] Crypto Fixes for 5.5 Herbert Xu
2019-12-03  1:30     ` pr-tracker-bot
2019-12-14  8:47     ` Herbert Xu
2019-12-14 22:05       ` pr-tracker-bot
2020-01-15 15:08       ` Herbert Xu
2020-01-15 19:35         ` pr-tracker-bot
2020-02-13  3:32         ` [GIT PULL] Crypto Fixes for 5.6 Herbert Xu
2020-02-13 22:40           ` pr-tracker-bot
2020-02-24  6:00           ` Herbert Xu
2020-02-24 20:25             ` pr-tracker-bot
2020-03-12 11:57             ` Herbert Xu
2020-03-12 16:40               ` Linus Torvalds
2020-03-13  5:27                 ` Masahiro Yamada
2020-03-20 23:53                 ` Jason A. Donenfeld
2020-03-21 15:43                   ` Linus Torvalds
2020-03-21  0:49                 ` [PATCH RFC 0/3] x86: probe for assembler capabilities in Kconfig Jason A. Donenfeld
2020-03-21  0:49                   ` Jason A. Donenfeld [this message]
2020-03-21  0:49                   ` [PATCH RFC 2/3] crypto: x86 - rework configuration based on Kconfig Jason A. Donenfeld
2020-03-21  0:49                   ` [PATCH RFC 3/3] crypto: curve25519 - do not pollute dispatcher based on assembler Jason A. Donenfeld
2020-03-12 17:05               ` [GIT PULL] Crypto Fixes for 5.6 pr-tracker-bot
2020-03-23 22:54               ` Herbert Xu
2020-03-23 23:05                 ` pr-tracker-bot
2020-04-08  6:15           ` [GIT PULL] Crypto Fixes for 5.7 Herbert Xu
2020-04-09  4:55             ` pr-tracker-bot
2020-04-29  5:54             ` Herbert Xu
2020-04-29 16:50               ` pr-tracker-bot
2020-05-06  5:10               ` Herbert Xu
2020-05-06 17:25                 ` pr-tracker-bot
2020-06-11  4:05             ` [GIT PULL] Crypto Fixes for 5.8 Herbert Xu
2020-06-11 18:25               ` pr-tracker-bot
2020-06-21  8:23               ` Herbert Xu
2020-06-21 17:10                 ` pr-tracker-bot
2020-06-29  2:16                 ` Herbert Xu
2020-06-29 17:15                   ` pr-tracker-bot
2020-08-14 13:18               ` [GIT PULL] Crypto Fixes for 5.9 Herbert Xu
2020-08-14 20:34                 ` pr-tracker-bot
2019-11-25  3:45 ` [GIT PULL] Crypto Update for 5.5 Herbert Xu
2019-11-26  4:25   ` pr-tracker-bot
2020-01-28  5:03   ` [GIT PULL] Crypto Update for 5.6 Herbert Xu
2020-01-29  0:30     ` pr-tracker-bot
2020-04-01  4:27     ` [GIT PULL] Crypto Update for 5.7 Herbert Xu
2020-04-01 22:35       ` pr-tracker-bot
2020-06-01  2:45       ` [GIT PULL] Crypto Update for 5.8 Herbert Xu
2020-06-01 19:35         ` pr-tracker-bot

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=20200321004945.451497-2-Jason@zx2c4.com \
    --to=jason@zx2c4.com \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=x86@kernel.org \
    --cc=yamada.masahiro@socionext.com \
    --subject='Re: [PATCH RFC 1/3] x86: probe assembler instead of kconfig instead of makefile' \
    /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

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).