crypto-native: add ARMv8 AES-CBC implementation
[vpp.git] / src / plugins / crypto_native / CMakeLists.txt
index cd701ec..9fc3e7d 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
-  return()
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
+  list(APPEND VARIANTS "sse42\;-march=silvermont")
+  list(APPEND VARIANTS "avx2\;-march=core-avx2")
+  if(compiler_flag_march_skylake_avx512)
+    list(APPEND VARIANTS "avx512\;-march=skylake-avx512")
+  endif()
+  if(compiler_flag_march_icelake_client)
+    list(APPEND VARIANTS "vaesni\;-march=icelake-client")
+  endif()
+  set (COMPILE_FILES aes_cbc.c aes_gcm.c)
+  set (COMPILE_OPTS -Wall -fno-common -maes)
 endif()
 
-add_vpp_plugin(crypto_native SOURCES main.c)
-
-list(APPEND VARIANTS "sse42\;-march=silvermont")
-list(APPEND VARIANTS "avx2\;-march=core-avx2")
-if(compiler_flag_march_skylake_avx512)
-  list(APPEND VARIANTS "avx512\;-march=skylake-avx512")
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)")
+  list(APPEND VARIANTS "armv8\;-march=native")
+  set (COMPILE_FILES aes_cbc.c)
+  set (COMPILE_OPTS -Wall -fno-common)
 endif()
-if(compiler_flag_march_icelake_client)
-  list(APPEND VARIANTS "vaesni\;-march=icelake-client")
+
+if (NOT VARIANTS)
+  return()
 endif()
 
+add_vpp_plugin(crypto_native SOURCES main.c)
+
 foreach(VARIANT ${VARIANTS})
   list(GET VARIANT 0 v)
   list(GET VARIANT 1 f)
   set(l crypto_native_${v})
-  add_library(${l} OBJECT aes_cbc.c aes_gcm.c)
+  add_library(${l} OBJECT ${COMPILE_FILES})
   set_target_properties(${l} PROPERTIES POSITION_INDEPENDENT_CODE ON)
-  target_compile_options(${l} PUBLIC ${f} -Wall -fno-common -maes)
+  target_compile_options(${l} PUBLIC ${f} ${COMPILE_OPTS})
   target_sources(crypto_native_plugin PRIVATE $<TARGET_OBJECTS:${l}>)
 endforeach()