1 # Copyright (c) 2018 Cisco and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
6 # http://www.apache.org/licenses/LICENSE-2.0
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
14 ##############################################################################
15 # CPU optimizations and multiarch support
16 ##############################################################################
17 if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
18 set(CMAKE_C_FLAGS "-march=corei7 -mtune=corei7-avx ${CMAKE_C_FLAGS}")
19 check_c_compiler_flag("-march=core-avx2" AVX2)
21 list(APPEND MARCH_VARIANTS "avx2\;-march=core-avx2 -mtune=core-avx2")
23 check_c_compiler_flag("-march=skylake-avx512" AVX512)
25 list(APPEND MARCH_VARIANTS "avx512\;-march=skylake-avx512 -mtune=skylake-avx512")
27 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)")
28 set(CMAKE_C_FLAGS "-march=armv8-a+crc ${CMAKE_C_FLAGS}")
31 macro(vpp_library_set_multiarch_sources lib)
32 foreach(V ${MARCH_VARIANTS})
34 list(GET V 1 VARIANT_FLAGS)
35 set(l ${lib}_${VARIANT})
36 add_library(${l} OBJECT ${ARGN})
37 set_target_properties(${l} PROPERTIES POSITION_INDEPENDENT_CODE ON)
38 target_compile_options(${l} PUBLIC "-DCLIB_MARCH_VARIANT=${VARIANT}")
39 separate_arguments(VARIANT_FLAGS)
40 target_compile_options(${l} PUBLIC ${VARIANT_FLAGS})
41 target_sources(${lib} PRIVATE $<TARGET_OBJECTS:${l}>)