From 3a24a0a5fe7cb24e8d6ca72316ddc8fbf114df6c Mon Sep 17 00:00:00 2001
From: Dmitry Puzyrkov <dmitry.puzyrkov@demlabs.net>
Date: Wed, 24 Jul 2024 17:00:11 +0000
Subject: [PATCH] Hotfix clang xkcp build

---
 crypto/XKCP/CMakeLists.txt              | 16 ++++++++++++----
 crypto/XKCP/lib/LowLevel.build          |  7 ++++++-
 crypto/XKCP/libdap-xkcp-armv7.build     |  1 +
 crypto/XKCP/libdap-xkcp-armv8.build     |  1 +
 crypto/XKCP/libdap-xkcp-reference.build |  3 ++-
 crypto/XKCP/libdap-xkcp-x8664.build     |  7 +++----
 6 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/crypto/XKCP/CMakeLists.txt b/crypto/XKCP/CMakeLists.txt
index 29e03d625..3e175bf4b 100644
--- a/crypto/XKCP/CMakeLists.txt
+++ b/crypto/XKCP/CMakeLists.txt
@@ -6,16 +6,22 @@ project (dap_crypto_XKCP)
 
 SET(XKCP_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/xkcp_build_src/)
 
+include(CheckCCompilerFlag)
+unset(COMPILER_SUPPORTS_MARCH_NATIVE CACHE)
+CHECK_C_COMPILER_FLAG(-march=native COMPILER_SUPPORTS_MARCH_NATIVE)
+if(COMPILER_SUPPORTS_MARCH_NATIVE)
+    SET(TARGET_POSTFIX "-native")
+endif()
 
 
 if (${TARGET_ARCH} MATCHES "x86_64")
-    SET(XKCP_TARGET libdap-XKCP-x8664.a)
+    SET(XKCP_TARGET libdap-XKCP-x8664${TARGET_POSTFIX}.a)
 elseif(${TARGET_ARCH} MATCHES "armv7")
-    SET(XKCP_TARGET libdap-XKCP-armv7.a)
+    SET(XKCP_TARGET libdap-XKCP-armv7${TARGET_POSTFIX}.a)
 elseif(${TARGET_ARCH} MATCHES "armv8")
-    SET(XKCP_TARGET libdap-XKCP-armv8.a)
+    SET(XKCP_TARGET libdap-XKCP-armv8${TARGET_POSTFIX}.a)
 else()
-    SET(XKCP_TARGET libdap-XKCP-ref.a)
+    SET(XKCP_TARGET libdap-XKCP-ref${TARGET_POSTFIX}.a)
 endif()
 
 message("[*] XKCP target: ${TARGET_ARCH} ${XKCP_TARGET}")
@@ -23,6 +29,8 @@ message("[*] XKCP build dir: ${XKCP_BUILD_DIR}")
 message("[*] XKCP make command: ${CMAKE_MAKE_PROGRAM}")
 message("[*] XKCP make CC: ${CMAKE_C_COMPILER}")
 message("[*] XKCP make AR: ${CMAKE_AR}")
+message("[*] XKCP compiller supports -march=native: ${COMPILER_SUPPORTS_MARCH_NATIVE}")
+
 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/ DESTINATION ${XKCP_BUILD_DIR})
 
 message("[*] XKCP OSXSYSROOT: ${CMAKE_OSX_SYSROOT}")
diff --git a/crypto/XKCP/lib/LowLevel.build b/crypto/XKCP/lib/LowLevel.build
index 723fa9377..78cd941bc 100644
--- a/crypto/XKCP/lib/LowLevel.build
+++ b/crypto/XKCP/lib/LowLevel.build
@@ -118,10 +118,15 @@ The fragments below allow to select the desired implementation of the permutatio
         <gcc>-fomit-frame-pointer</gcc>
         <gcc>-O2</gcc>
         <gcc>-g0</gcc>
-        <gcc>-march=native</gcc>
         <gcc>-mtune=native</gcc>
     </fragment>
 
+    <fragment name="optimized-march-native">
+        <gcc>-march=native</gcc>
+    </fragment>
+
+    
+
     <!-- Keccak-p[1600] -->
 
     <fragment name="K1600">
diff --git a/crypto/XKCP/libdap-xkcp-armv7.build b/crypto/XKCP/libdap-xkcp-armv7.build
index 33ea38553..5e0889403 100644
--- a/crypto/XKCP/libdap-xkcp-armv7.build
+++ b/crypto/XKCP/libdap-xkcp-armv7.build
@@ -1,4 +1,5 @@
 <?xml version="1.0"?>
 <group>
 	<target name="libdap-XKCP-armv7.a" inherits="FIPS202 K1600-ARMv7A-NEON"/>
+	<target name="libdap-XKCP-armv7-native.a" inherits="FIPS202 K1600-ARMv7A-NEON optimized-march-native"/>
 </group>
\ No newline at end of file
diff --git a/crypto/XKCP/libdap-xkcp-armv8.build b/crypto/XKCP/libdap-xkcp-armv8.build
index a3b8425c5..9e405d2c9 100644
--- a/crypto/XKCP/libdap-xkcp-armv8.build
+++ b/crypto/XKCP/libdap-xkcp-armv8.build
@@ -1,4 +1,5 @@
 <?xml version="1.0"?>
 <group>
 	<target name="libdap-XKCP-armv8.a" inherits="FIPS202 K1600-ARMv8A"/>
+	<target name="libdap-XKCP-armv8-native.a" inherits="FIPS202 K1600-ARMv8A optimized-march-native"/>
 </group>
\ No newline at end of file
diff --git a/crypto/XKCP/libdap-xkcp-reference.build b/crypto/XKCP/libdap-xkcp-reference.build
index 47bc6055f..2da072908 100644
--- a/crypto/XKCP/libdap-xkcp-reference.build
+++ b/crypto/XKCP/libdap-xkcp-reference.build
@@ -1,4 +1,5 @@
 <?xml version="1.0"?>
 <group>
-	<target name="libdap-XKCP-ref.a" inherits="FIPS202 K1600-plain-64bits-ua"/>
+	<target name="libdap-XKCP-ref.a" inherits="FIPS202 K1600-plain-64bits-ua "/>
+	<target name="libdap-XKCP-ref-native.a" inherits="FIPS202 K1600-plain-64bits-ua optimized-gcc optimized-march-native"/>
 </group>
\ No newline at end of file
diff --git a/crypto/XKCP/libdap-xkcp-x8664.build b/crypto/XKCP/libdap-xkcp-x8664.build
index 4ebcf5294..b7b187dbf 100644
--- a/crypto/XKCP/libdap-xkcp-x8664.build
+++ b/crypto/XKCP/libdap-xkcp-x8664.build
@@ -1,8 +1,7 @@
 <?xml version="1.0"?>
 <group>
-	<target name="libdap-XKCP-x8664.a" inherits="FIPS202 K1600-AVX2">
-		
-	</target>
-
+	<target name="libdap-XKCP-x8664.a" inherits="FIPS202 K1600-AVX2 "/>
+	<target name="libdap-XKCP-x8664-native.a" inherits="FIPS202 K1600-AVX2 optimized-march-native"/>
+	
 	
 </group>
\ No newline at end of file
-- 
GitLab