xref: /aosp_15_r20/external/libhevc/cmake/utils.cmake (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawarinclude(CheckCXXCompilerFlag)
2*c83a76b0SSuyog Pawar
3*c83a76b0SSuyog Pawar# Adds compiler options for all targets
4*c83a76b0SSuyog Pawarfunction(libhevc_add_compile_options)
5*c83a76b0SSuyog Pawar  if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
6*c83a76b0SSuyog Pawar    add_compile_options(-march=armv8-a)
7*c83a76b0SSuyog Pawar  elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch32")
8*c83a76b0SSuyog Pawar    add_compile_options(-march=armv7-a -mfpu=neon)
9*c83a76b0SSuyog Pawar  else()
10*c83a76b0SSuyog Pawar    add_compile_options(-msse4.2 -mno-avx)
11*c83a76b0SSuyog Pawar  endif()
12*c83a76b0SSuyog Pawar
13*c83a76b0SSuyog Pawar  set(CMAKE_REQUIRED_FLAGS -fsanitize=fuzzer-no-link)
14*c83a76b0SSuyog Pawar  check_cxx_compiler_flag(-fsanitize=fuzzer-no-link
15*c83a76b0SSuyog Pawar                          COMPILER_HAS_SANITIZE_FUZZER)
16*c83a76b0SSuyog Pawar  unset(CMAKE_REQUIRED_FLAGS)
17*c83a76b0SSuyog Pawar
18*c83a76b0SSuyog Pawar  if(DEFINED SANITIZE)
19*c83a76b0SSuyog Pawar    set(CMAKE_REQUIRED_FLAGS -fsanitize=${SANITIZE})
20*c83a76b0SSuyog Pawar    check_cxx_compiler_flag(-fsanitize=${SANITIZE} COMPILER_HAS_SANITIZER)
21*c83a76b0SSuyog Pawar    unset(CMAKE_REQUIRED_FLAGS)
22*c83a76b0SSuyog Pawar
23*c83a76b0SSuyog Pawar    if(NOT COMPILER_HAS_SANITIZER)
24*c83a76b0SSuyog Pawar      message(
25*c83a76b0SSuyog Pawar        FATAL_ERROR "ERROR: Compiler doesn't support -fsanitize=${SANITIZE}")
26*c83a76b0SSuyog Pawar      return()
27*c83a76b0SSuyog Pawar    endif()
28*c83a76b0SSuyog Pawar    add_compile_options(-fno-omit-frame-pointer -fsanitize=${SANITIZE})
29*c83a76b0SSuyog Pawar  endif()
30*c83a76b0SSuyog Pawar
31*c83a76b0SSuyog Pawarendfunction()
32*c83a76b0SSuyog Pawar
33*c83a76b0SSuyog Pawar# Adds defintions for all targets
34*c83a76b0SSuyog Pawarfunction(libhevc_add_definitions)
35*c83a76b0SSuyog Pawar  if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
36*c83a76b0SSuyog Pawar    add_definitions(-DARMV8 -DDEFAULT_ARCH=D_ARCH_ARMV8_GENERIC -DENABLE_NEON)
37*c83a76b0SSuyog Pawar  elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch32")
38*c83a76b0SSuyog Pawar    add_definitions(-DARMV7 -DDEFAULT_ARCH=D_ARCH_ARM_A9Q -DENABLE_NEON
39*c83a76b0SSuyog Pawar                    -DDISABLE_NEONINTR)
40*c83a76b0SSuyog Pawar  else()
41*c83a76b0SSuyog Pawar    add_definitions(-DX86 -DX86_LINUX=1 -DDISABLE_AVX2
42*c83a76b0SSuyog Pawar                    -DDEFAULT_ARCH=D_ARCH_X86_SSE42)
43*c83a76b0SSuyog Pawar  endif()
44*c83a76b0SSuyog Pawarendfunction()
45*c83a76b0SSuyog Pawar
46*c83a76b0SSuyog Pawar# Adds libraries needed for executables
47*c83a76b0SSuyog Pawarfunction(libhevc_set_link_libraries)
48*c83a76b0SSuyog Pawar  link_libraries(Threads::Threads m)
49*c83a76b0SSuyog Pawarendfunction()
50*c83a76b0SSuyog Pawar
51*c83a76b0SSuyog Pawar# cmake-format: off
52*c83a76b0SSuyog Pawar# Adds a target for an executable
53*c83a76b0SSuyog Pawar#
54*c83a76b0SSuyog Pawar# Arguments:
55*c83a76b0SSuyog Pawar# NAME: Name of the executatble
56*c83a76b0SSuyog Pawar# LIB: Library that executable depends on
57*c83a76b0SSuyog Pawar# SOURCES: Source files
58*c83a76b0SSuyog Pawar#
59*c83a76b0SSuyog Pawar# Optional Arguments:
60*c83a76b0SSuyog Pawar# INCLUDES: Include paths
61*c83a76b0SSuyog Pawar# LIBS: Additional libraries
62*c83a76b0SSuyog Pawar# FUZZER: flag to specify if the target is a fuzzer binary
63*c83a76b0SSuyog Pawar# cmake-format: on
64*c83a76b0SSuyog Pawar
65*c83a76b0SSuyog Pawarfunction(libhevc_add_executable NAME LIB)
66*c83a76b0SSuyog Pawar  set(multi_value_args SOURCES INCLUDES LIBS)
67*c83a76b0SSuyog Pawar  set(optional_args FUZZER)
68*c83a76b0SSuyog Pawar  cmake_parse_arguments(ARG "${optional_args}" "${single_value_args}"
69*c83a76b0SSuyog Pawar                        "${multi_value_args}" ${ARGN})
70*c83a76b0SSuyog Pawar
71*c83a76b0SSuyog Pawar  # Check if compiler supports -fsanitize=fuzzer. If not, skip building fuzzer
72*c83a76b0SSuyog Pawar  # binary
73*c83a76b0SSuyog Pawar  if(ARG_FUZZER)
74*c83a76b0SSuyog Pawar    if(NOT COMPILER_HAS_SANITIZE_FUZZER)
75*c83a76b0SSuyog Pawar      message("Compiler doesn't support -fsanitize=fuzzer. Skipping ${NAME}")
76*c83a76b0SSuyog Pawar      return()
77*c83a76b0SSuyog Pawar    endif()
78*c83a76b0SSuyog Pawar  endif()
79*c83a76b0SSuyog Pawar
80*c83a76b0SSuyog Pawar  add_executable(${NAME} ${ARG_SOURCES})
81*c83a76b0SSuyog Pawar  target_include_directories(${NAME} PRIVATE ${ARG_INCLUDES})
82*c83a76b0SSuyog Pawar  add_dependencies(${NAME} ${LIB} ${ARG_LIBS})
83*c83a76b0SSuyog Pawar
84*c83a76b0SSuyog Pawar  target_link_libraries(${NAME} ${LIB} ${ARG_LIBS})
85*c83a76b0SSuyog Pawar  if(ARG_FUZZER)
86*c83a76b0SSuyog Pawar    target_compile_options(${NAME}
87*c83a76b0SSuyog Pawar                           PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-std=c++17>)
88*c83a76b0SSuyog Pawar    if(DEFINED ENV{LIB_FUZZING_ENGINE})
89*c83a76b0SSuyog Pawar      set_target_properties(${NAME} PROPERTIES LINK_FLAGS
90*c83a76b0SSuyog Pawar                                               $ENV{LIB_FUZZING_ENGINE})
91*c83a76b0SSuyog Pawar    elseif(DEFINED SANITIZE)
92*c83a76b0SSuyog Pawar      set_target_properties(${NAME} PROPERTIES LINK_FLAGS
93*c83a76b0SSuyog Pawar                                               -fsanitize=fuzzer,${SANITIZE})
94*c83a76b0SSuyog Pawar    else()
95*c83a76b0SSuyog Pawar      set_target_properties(${NAME} PROPERTIES LINK_FLAGS -fsanitize=fuzzer)
96*c83a76b0SSuyog Pawar    endif()
97*c83a76b0SSuyog Pawar  else()
98*c83a76b0SSuyog Pawar    if(DEFINED SANITIZE)
99*c83a76b0SSuyog Pawar      set_target_properties(${NAME} PROPERTIES LINK_FLAGS
100*c83a76b0SSuyog Pawar                                               -fsanitize=${SANITIZE})
101*c83a76b0SSuyog Pawar    endif()
102*c83a76b0SSuyog Pawar  endif()
103*c83a76b0SSuyog Pawarendfunction()
104*c83a76b0SSuyog Pawar
105*c83a76b0SSuyog Pawar# cmake-format: off
106*c83a76b0SSuyog Pawar# Adds a target for a fuzzer binary
107*c83a76b0SSuyog Pawar# Calls libhevc_add_executable with all arguments with FUZZER set to 1
108*c83a76b0SSuyog Pawar# Arguments:
109*c83a76b0SSuyog Pawar# Refer to libhevc_add_executable's arguments
110*c83a76b0SSuyog Pawar# cmake-format: on
111*c83a76b0SSuyog Pawar
112*c83a76b0SSuyog Pawarfunction(libhevc_add_fuzzer NAME LIB)
113*c83a76b0SSuyog Pawar  libhevc_add_executable(${NAME} ${LIB} FUZZER 1 ${ARGV})
114*c83a76b0SSuyog Pawarendfunction()
115