1fd4e5da5Sopenharmony_ci# Copyright (c) 2021 Google LLC 2fd4e5da5Sopenharmony_ci# 3fd4e5da5Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 4fd4e5da5Sopenharmony_ci# you may not use this file except in compliance with the License. 5fd4e5da5Sopenharmony_ci# You may obtain a copy of the License at 6fd4e5da5Sopenharmony_ci# 7fd4e5da5Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 8fd4e5da5Sopenharmony_ci# 9fd4e5da5Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 10fd4e5da5Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 11fd4e5da5Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fd4e5da5Sopenharmony_ci# See the License for the specific language governing permissions and 13fd4e5da5Sopenharmony_ci# limitations under the License. 14fd4e5da5Sopenharmony_ci 15fd4e5da5Sopenharmony_cifunction(add_spvtools_libfuzzer_target) 16fd4e5da5Sopenharmony_ci set(one_value_args TARGET) 17fd4e5da5Sopenharmony_ci set(multi_value_args SRCS LIBS) 18fd4e5da5Sopenharmony_ci cmake_parse_arguments( 19fd4e5da5Sopenharmony_ci ARG "" "${one_value_args}" "${multi_value_args}" ${ARGN}) 20fd4e5da5Sopenharmony_ci 21fd4e5da5Sopenharmony_ci add_executable(${ARG_TARGET} ${ARG_SRCS}) 22fd4e5da5Sopenharmony_ci spvtools_default_compile_options(${ARG_TARGET}) 23fd4e5da5Sopenharmony_ci target_link_libraries(${ARG_TARGET} PRIVATE ${ARG_LIBS}) 24fd4e5da5Sopenharmony_ci target_include_directories(${ARG_TARGET} PRIVATE 25fd4e5da5Sopenharmony_ci ${spirv-tools_SOURCE_DIR} 26fd4e5da5Sopenharmony_ci ${spirv-tools_BINARY_DIR} 27fd4e5da5Sopenharmony_ci ) 28fd4e5da5Sopenharmony_ci set_property(TARGET ${ARG_TARGET} PROPERTY FOLDER "SPIRV-Tools libFuzzer targets") 29fd4e5da5Sopenharmony_ci if(NOT ${SPIRV_LIB_FUZZING_ENGINE_LINK_OPTIONS} STREQUAL "") 30fd4e5da5Sopenharmony_ci # This is set when the fuzzers are being built by OSS-Fuzz. In this case the 31fd4e5da5Sopenharmony_ci # variable provides the necessary linker flags, and OSS-Fuzz will take care 32fd4e5da5Sopenharmony_ci # of passing suitable compiler flags. 33fd4e5da5Sopenharmony_ci target_link_options(${ARG_TARGET} PRIVATE ${SPIRV_LIB_FUZZING_ENGINE_LINK_OPTIONS}) 34fd4e5da5Sopenharmony_ci else() 35fd4e5da5Sopenharmony_ci # When the fuzzers are being built outside of OSS-Fuzz, standard libFuzzer 36fd4e5da5Sopenharmony_ci # arguments to enable fuzzing are used. 37fd4e5da5Sopenharmony_ci target_compile_options(${ARG_TARGET} PRIVATE "-fsanitize=fuzzer") 38fd4e5da5Sopenharmony_ci target_link_options(${ARG_TARGET} PRIVATE "-fsanitize=fuzzer") 39fd4e5da5Sopenharmony_ci endif() 40fd4e5da5Sopenharmony_ciendfunction() 41fd4e5da5Sopenharmony_ci 42fd4e5da5Sopenharmony_ciif (${SPIRV_BUILD_LIBFUZZER_TARGETS}) 43fd4e5da5Sopenharmony_ci if(NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") 44fd4e5da5Sopenharmony_ci message(FATAL_ERROR "The libFuzzer targets are only supported with the Clang compiler. Compiler '${CMAKE_CXX_COMPILER_ID}' is not supported!") 45fd4e5da5Sopenharmony_ci endif() 46fd4e5da5Sopenharmony_ci add_spvtools_libfuzzer_target(TARGET spvtools_as_fuzzer SRCS spvtools_as_fuzzer.cpp random_generator.cpp LIBS ${SPIRV_TOOLS_FULL_VISIBILITY}) 47fd4e5da5Sopenharmony_ci add_spvtools_libfuzzer_target(TARGET spvtools_binary_parser_fuzzer SRCS spvtools_binary_parser_fuzzer.cpp random_generator.cpp LIBS ${SPIRV_TOOLS_FULL_VISIBILITY}) 48fd4e5da5Sopenharmony_ci add_spvtools_libfuzzer_target(TARGET spvtools_dis_fuzzer SRCS spvtools_dis_fuzzer.cpp random_generator.cpp LIBS ${SPIRV_TOOLS_FULL_VISIBILITY}) 49fd4e5da5Sopenharmony_ci add_spvtools_libfuzzer_target(TARGET spvtools_opt_legalization_fuzzer SRCS spvtools_opt_legalization_fuzzer.cpp spvtools_opt_fuzzer_common.cpp random_generator.cpp LIBS SPIRV-Tools-opt ${SPIRV_TOOLS_FULL_VISIBILITY}) 50fd4e5da5Sopenharmony_ci add_spvtools_libfuzzer_target(TARGET spvtools_opt_performance_fuzzer SRCS spvtools_opt_performance_fuzzer.cpp spvtools_opt_fuzzer_common.cpp random_generator.cpp LIBS SPIRV-Tools-opt ${SPIRV_TOOLS_FULL_VISIBILITY}) 51fd4e5da5Sopenharmony_ci add_spvtools_libfuzzer_target(TARGET spvtools_opt_size_fuzzer SRCS spvtools_opt_size_fuzzer.cpp spvtools_opt_fuzzer_common.cpp random_generator.cpp LIBS SPIRV-Tools-opt ${SPIRV_TOOLS_FULL_VISIBILITY}) 52fd4e5da5Sopenharmony_ci add_spvtools_libfuzzer_target(TARGET spvtools_val_fuzzer SRCS spvtools_val_fuzzer.cpp random_generator.cpp LIBS ${SPIRV_TOOLS_FULL_VISIBILITY}) 53fd4e5da5Sopenharmony_ci if (${SPIRV_BUILD_FUZZER}) 54fd4e5da5Sopenharmony_ci add_spvtools_libfuzzer_target(TARGET spvtools_fuzz_fuzzer SRCS spvtools_fuzz_fuzzer.cpp random_generator.cpp LIBS SPIRV-Tools-fuzz ${SPIRV_TOOLS_FULL_VISIBILITY}) 55fd4e5da5Sopenharmony_ci endif() 56fd4e5da5Sopenharmony_ciendif() 57