Line 0
Link Here
|
|
|
1 |
|
2 |
# HG changeset patch |
3 |
# User Daiki Ueno <dueno@redhat.com> |
4 |
# Date 1599626828 -7200 |
5 |
# Node ID b971c77c0d68d76c086a0df21841efb813b78c7b |
6 |
# Parent e524a577761d8d61ff096121a3c00bf22f2cfa94 |
7 |
Bug 1659256, add gcc version check on AArch64 optimization, r=rrelyea |
8 |
|
9 |
Summary: As described in https://access.redhat.com/solutions/19458, |
10 |
gcc version in RHEL-7 is still 4.8.x and cannot compile the newly |
11 |
added aes-armv8.c. There is a version check already for 32-bit arm, |
12 |
but not for AArch64. This also removes NS_USE_GCC check added in bug |
13 |
1652032 in favor of the automatic detection using CC_IS_* macros. |
14 |
|
15 |
Reviewers: rrelyea |
16 |
|
17 |
Reviewed By: rrelyea |
18 |
|
19 |
Subscribers: jmux, kjacobs |
20 |
|
21 |
Bug #: 1659256 |
22 |
|
23 |
Differential Revision: https://phabricator.services.mozilla.com/D87174 |
24 |
|
25 |
diff --git a/lib/freebl/Makefile b/lib/freebl/Makefile |
26 |
--- lib/freebl/Makefile |
27 |
+++ lib/freebl/Makefile |
28 |
@@ -114,31 +114,47 @@ ifeq (,$(filter-out i386 x386 x86 x86_64 |
29 |
$(OBJDIR)/gcm-x86.o: CFLAGS += -mpclmul -maes |
30 |
$(OBJDIR)/aes-x86.o: CFLAGS += -mpclmul -maes |
31 |
ifneq (,$(USE_64)$(USE_X32)) |
32 |
DEFINES += -DNSS_X64 |
33 |
else |
34 |
DEFINES += -DNSS_X86 |
35 |
endif |
36 |
endif |
37 |
-ifdef NS_USE_GCC |
38 |
ifeq ($(CPU_ARCH),aarch64) |
39 |
- DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 |
40 |
- EXTRA_SRCS += aes-armv8.c gcm-aarch64.c sha1-armv8.c sha256-armv8.c |
41 |
-endif |
42 |
+ ifdef CC_IS_CLANG |
43 |
+ DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 |
44 |
+ EXTRA_SRCS += aes-armv8.c gcm-aarch64.c sha1-armv8.c sha256-armv8.c |
45 |
+ else ifeq (1,$(CC_IS_GCC)) |
46 |
+ # GCC versions older than 4.9 don't support ARM AES. The check |
47 |
+ # is done in two parts, first allows "major.minor" == "4.9", |
48 |
+ # and then rejects any major versions prior to 5. Note that |
49 |
+ # there has been no GCC 4.10, as it was renamed to GCC 5. |
50 |
+ ifneq (,$(filter 4.9,$(word 1,$(GCC_VERSION)).$(word 2,$(GCC_VERSION)))) |
51 |
+ DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 |
52 |
+ EXTRA_SRCS += aes-armv8.c gcm-aarch64.c sha1-armv8.c sha256-armv8.c |
53 |
+ endif |
54 |
+ ifeq (,$(filter 0 1 2 3 4,$(word 1,$(GCC_VERSION)))) |
55 |
+ DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 |
56 |
+ EXTRA_SRCS += aes-armv8.c gcm-aarch64.c sha1-armv8.c sha256-armv8.c |
57 |
+ endif |
58 |
+ endif |
59 |
endif |
60 |
ifeq ($(CPU_ARCH),arm) |
61 |
ifndef NSS_DISABLE_ARM32_NEON |
62 |
EXTRA_SRCS += gcm-arm32-neon.c |
63 |
endif |
64 |
ifdef CC_IS_CLANG |
65 |
DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 |
66 |
EXTRA_SRCS += aes-armv8.c sha1-armv8.c sha256-armv8.c |
67 |
else ifeq (1,$(CC_IS_GCC)) |
68 |
- # Old compiler doesn't support ARM AES. |
69 |
+ # GCC versions older than 4.9 don't support ARM AES. The check |
70 |
+ # is done in two parts, first allows "major.minor" == "4.9", |
71 |
+ # and then rejects any major versions prior to 5. Note that |
72 |
+ # there has been no GCC 4.10, as it was renamed to GCC 5. |
73 |
ifneq (,$(filter 4.9,$(word 1,$(GCC_VERSION)).$(word 2,$(GCC_VERSION)))) |
74 |
DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 |
75 |
EXTRA_SRCS += aes-armv8.c sha1-armv8.c sha256-armv8.c |
76 |
endif |
77 |
ifeq (,$(filter 0 1 2 3 4,$(word 1,$(GCC_VERSION)))) |
78 |
DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 |
79 |
EXTRA_SRCS += aes-armv8.c sha1-armv8.c sha256-armv8.c |
80 |
endif |
81 |
@@ -723,24 +739,22 @@ USES_SOFTFLOAT_ABI := $(shell $(CC) -o - |
82 |
$(OBJDIR)/$(PROG_PREFIX)aes-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a -mfpu=crypto-neon-fp-armv8$(if $(USES_SOFTFLOAT_ABI), -mfloat-abi=softfp) |
83 |
$(OBJDIR)/$(PROG_PREFIX)sha1-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a -mfpu=crypto-neon-fp-armv8$(if $(USES_SOFTFLOAT_ABI), -mfloat-abi=softfp) |
84 |
$(OBJDIR)/$(PROG_PREFIX)sha256-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a -mfpu=crypto-neon-fp-armv8$(if $(USES_SOFTFLOAT_ABI), -mfloat-abi=softfp) |
85 |
ifndef NSS_DISABLE_ARM32_NEON |
86 |
$(OBJDIR)/$(PROG_PREFIX)gcm-arm32-neon$(OBJ_SUFFIX): CFLAGS += -mfpu=neon$(if $(USES_SOFTFLOAT_ABI), -mfloat-abi=softfp) |
87 |
endif |
88 |
endif |
89 |
|
90 |
-ifdef NS_USE_GCC |
91 |
ifeq ($(CPU_ARCH),aarch64) |
92 |
$(OBJDIR)/$(PROG_PREFIX)aes-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypto |
93 |
$(OBJDIR)/$(PROG_PREFIX)gcm-aarch64$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypto |
94 |
$(OBJDIR)/$(PROG_PREFIX)sha1-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypto |
95 |
$(OBJDIR)/$(PROG_PREFIX)sha256-armv8$(OBJ_SUFFIX): CFLAGS += -march=armv8-a+crypto |
96 |
endif |
97 |
-endif |
98 |
|
99 |
ifeq ($(CPU_ARCH),ppc) |
100 |
ifndef NSS_DISABLE_ALTIVEC |
101 |
$(OBJDIR)/$(PROG_PREFIX)gcm-ppc$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx |
102 |
$(OBJDIR)/$(PROG_PREFIX)gcm$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx |
103 |
$(OBJDIR)/$(PROG_PREFIX)rijndael$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx |
104 |
$(OBJDIR)/$(PROG_PREFIX)sha512$(OBJ_SUFFIX): CFLAGS += -mcrypto -maltivec -mvsx \ |
105 |
-funroll-loops -fpeel-loops |
106 |
|