# 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 "slm\;-march=silvermont")
+ list(APPEND VARIANTS "hsw\;-march=haswell")
+ if(compiler_flag_march_skylake_avx512 AND compiler_flag_mprefer_vector_width_256)
+ list(APPEND VARIANTS "skx\;-march=skylake-avx512 -mprefer-vector-width=256")
+ endif()
+ if(compiler_flag_march_icelake_client AND compiler_flag_mprefer_vector_width_512)
+ list(APPEND VARIANTS "icl\;-march=icelake-client -mprefer-vector-width=512")
+ endif()
+ if(compiler_flag_march_alderlake)
+ list(APPEND VARIANTS "adl\;-march=alderlake -mprefer-vector-width=256")
+ endif()
+ set (COMPILE_FILES aes_cbc.c aes_gcm.c aes_ctr.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=armv8.1-a+crc+crypto")
+ set (COMPILE_FILES aes_cbc.c aes_gcm.c aes_ctr.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)
+ separate_arguments(f)
+ target_compile_options(${l} PUBLIC ${f} ${COMPILE_OPTS})
target_sources(crypto_native_plugin PRIVATE $<TARGET_OBJECTS:${l}>)
endforeach()