mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-05-07 12:16:24 +00:00
188 lines
4.7 KiB
CMake
188 lines
4.7 KiB
CMake
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
cmake_minimum_required(VERSION 3.14)
|
|
|
|
project(wamr_fuzzing LANGUAGES ASM C CXX)
|
|
|
|
include(CMakePrintHelpers)
|
|
|
|
# Ensure Clang is used as the compiler
|
|
if(NOT CMAKE_C_COMPILER_ID STREQUAL "Clang"
|
|
OR NOT CMAKE_ASM_COMPILER_ID STREQUAL "Clang")
|
|
message(FATAL_ERROR "Please use Clang as the C compiler for libFuzzer compatibility.")
|
|
endif()
|
|
|
|
#
|
|
# Global settings
|
|
#
|
|
set(CMAKE_BUILD_TYPE Debug)
|
|
set(CMAKE_C_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
string(TOLOWER ${CMAKE_HOST_SYSTEM_NAME} WAMR_BUILD_PLATFORM)
|
|
|
|
# Reset default linker flags
|
|
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
|
|
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
|
|
|
|
# Check if the compiler supports the sanitizer flags
|
|
include(CheckCXXCompilerFlag)
|
|
check_cxx_compiler_flag("-fsanitize=address" HAS_ADDRESS_SANITIZER)
|
|
check_cxx_compiler_flag("-fsanitize=memory" HAS_MEMORY_SANITIZER)
|
|
check_cxx_compiler_flag("-fsanitize=undefined" HAS_UNDEFINED_SANITIZER)
|
|
|
|
# Determine WAMR_BUILD_TARGET based on system properties
|
|
if(NOT DEFINED WAMR_BUILD_TARGET)
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)")
|
|
set(WAMR_BUILD_TARGET "AARCH64")
|
|
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64")
|
|
set(WAMR_BUILD_TARGET "RISCV64")
|
|
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(WAMR_BUILD_TARGET "X86_64")
|
|
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
set(WAMR_BUILD_TARGET "X86_32")
|
|
else()
|
|
message(SEND_ERROR "Unsupported build target platform!")
|
|
endif()
|
|
endif()
|
|
|
|
if(APPLE)
|
|
add_definitions(-DBH_PLATFORM_DARWIN)
|
|
endif()
|
|
|
|
# Disable hardware bound check and enable AOT validator
|
|
set(WAMR_DISABLE_HW_BOUND_CHECK 1)
|
|
set(WAMR_BUILD_AOT_VALIDATOR 1)
|
|
|
|
set(REPO_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../../..)
|
|
message(STATUS "REPO_ROOT_DIR: ${REPO_ROOT_DIR}")
|
|
|
|
# Use LLVM_DIR from command line if defined
|
|
# LLVM_DIR should be something like /path/to/llvm/build/lib/cmake/llvm
|
|
if(DEFINED LLVM_DIR)
|
|
set(LLVM_DIR $ENV{LLVM_DIR})
|
|
else()
|
|
set(LLVM_SRC_ROOT ${REPO_ROOT_DIR}/core/deps/llvm)
|
|
set(LLVM_BUILD_ROOT ${LLVM_SRC_ROOT}/build)
|
|
set(LLVM_DIR ${LLVM_BUILD_ROOT}/lib/cmake/llvm)
|
|
endif()
|
|
|
|
# if LLVM_DIR is an existing directory, use it
|
|
if(NOT EXISTS ${LLVM_DIR})
|
|
message(FATAL_ERROR "LLVM_DIR not found: ${LLVM_DIR}")
|
|
endif()
|
|
|
|
find_package(LLVM REQUIRED CONFIG)
|
|
|
|
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
|
|
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
|
|
|
|
include_directories(${LLVM_INCLUDE_DIRS})
|
|
separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS})
|
|
add_definitions(${LLVM_DEFINITIONS_LIST})
|
|
|
|
list(
|
|
APPEND
|
|
REQUIRED_LLVM_LIBS
|
|
LLVMDemangle
|
|
LLVMSupport
|
|
LLVMTableGen
|
|
LLVMTableGenGlobalISel
|
|
LLVMCore
|
|
LLVMFuzzerCLI
|
|
LLVMFuzzMutate
|
|
LLVMFileCheck
|
|
LLVMInterfaceStub
|
|
LLVMIRReader
|
|
LLVMCodeGen
|
|
LLVMSelectionDAG
|
|
LLVMAsmPrinter
|
|
LLVMMIRParser
|
|
LLVMGlobalISel
|
|
LLVMBinaryFormat
|
|
LLVMBitReader
|
|
LLVMBitWriter
|
|
LLVMBitstreamReader
|
|
LLVMDWARFLinker
|
|
LLVMExtensions
|
|
LLVMFrontendOpenACC
|
|
LLVMFrontendOpenMP
|
|
LLVMTransformUtils
|
|
LLVMInstrumentation
|
|
LLVMAggressiveInstCombine
|
|
LLVMInstCombine
|
|
LLVMScalarOpts
|
|
LLVMipo
|
|
LLVMVectorize
|
|
LLVMObjCARCOpts
|
|
LLVMCoroutines
|
|
LLVMCFGuard
|
|
LLVMLinker
|
|
LLVMAnalysis
|
|
LLVMLTO
|
|
LLVMMC
|
|
LLVMMCParser
|
|
LLVMMCDisassembler
|
|
LLVMMCA
|
|
LLVMObjCopy
|
|
LLVMObject
|
|
LLVMObjectYAML
|
|
LLVMOption
|
|
LLVMRemarks
|
|
LLVMDebuginfod
|
|
LLVMDebugInfoDWARF
|
|
LLVMDebugInfoGSYM
|
|
LLVMDebugInfoMSF
|
|
LLVMDebugInfoCodeView
|
|
LLVMDebugInfoPDB
|
|
LLVMSymbolize
|
|
LLVMDWP
|
|
LLVMExecutionEngine
|
|
LLVMInterpreter
|
|
LLVMJITLink
|
|
LLVMMCJIT
|
|
LLVMOrcJIT
|
|
LLVMOrcShared
|
|
LLVMOrcTargetProcess
|
|
LLVMRuntimeDyld
|
|
LLVMTarget
|
|
LLVMX86CodeGen
|
|
LLVMX86AsmParser
|
|
LLVMX86Disassembler
|
|
LLVMX86TargetMCA
|
|
LLVMX86Desc
|
|
LLVMX86Info
|
|
LLVMAsmParser
|
|
LLVMLineEditor
|
|
LLVMProfileData
|
|
LLVMCoverage
|
|
LLVMPasses
|
|
LLVMTextAPI
|
|
LLVMDlltoolDriver
|
|
LLVMLibDriver
|
|
LLVMXRay
|
|
LLVMWindowsDriver
|
|
LLVMWindowsManifest
|
|
)
|
|
|
|
set(SHARED_DIR ${REPO_ROOT_DIR}/core/shared)
|
|
set(IWASM_DIR ${REPO_ROOT_DIR}/core/iwasm)
|
|
|
|
# Global setting
|
|
add_compile_options(-Wno-unused-command-line-argument)
|
|
|
|
# Enable fuzzer
|
|
add_definitions(-DWASM_ENABLE_FUZZ_TEST=1)
|
|
# '-fsanitize=vptr' not allowed with '-fno-rtti
|
|
# But, LLVM by default, disables the use of `rtti` in the compiler
|
|
add_compile_options(-fsanitize=fuzzer -fno-sanitize=vptr)
|
|
add_link_options(-fsanitize=fuzzer -fno-sanitize=vptr)
|
|
|
|
# Enable sanitizers if not in oss-fuzz environment
|
|
set(CFLAGS_ENV $ENV{CFLAGS})
|
|
string(FIND "${CFLAGS_ENV}" "-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" IN_OSS_FUZZ)
|
|
|
|
add_subdirectory(aot-compiler)
|
|
add_subdirectory(wasm-mutator)
|