ACPI AML decompiler w/ CFG recovery and structured pseudocode
29

Configure Feed

Select the types of activity you want to include in your feed.

tobi / CMakeLists.txt
3.4 kB 90 lines
1cmake_minimum_required(VERSION 3.16) 2project(tobi VERSION 0.1.0 LANGUAGES C) 3 4option(TOBI_WERROR "Build with warnings as errors" ON) 5option(TOBI_SAN "Build with AddressSanitizer and UndefinedBehaviorSanitizer" OFF) 6option(TOBI_FZ "Build fuzz smoke target" ON) 7option(TOBI_LIBFUZZER "Build LLVM libFuzzer target" OFF) 8 9set(CMAKE_C_STANDARD 11) 10set(CMAKE_C_STANDARD_REQUIRED ON) 11set(CMAKE_C_EXTENSIONS OFF) 12 13set(TOBI_COMMON 14 src/rd.c src/p.c src/op.c src/nm.c src/ir.c src/cf.c src/dc.c 15 src/da.c src/dg.c src/js.c src/mem.c src/str.c) 16 17find_program(CLANG_FORMAT_EXE NAMES clang-format) 18if(CLANG_FORMAT_EXE) 19 file(GLOB TOBI_FORMAT_FILES CONFIGURE_DEPENDS 20 src/*.c src/*.h test/*.c test/*.h fuzz/*.c) 21 add_custom_target(format 22 COMMAND ${CLANG_FORMAT_EXE} -i ${TOBI_FORMAT_FILES} 23 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 24 COMMENT "Format tobi C sources") 25endif() 26 27add_library(tobilib ${TOBI_COMMON}) 28target_include_directories(tobilib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) 29target_compile_definitions(tobilib PUBLIC _POSIX_C_SOURCE=200809L) 30 31add_executable(tobi src/main.c) 32target_link_libraries(tobi PRIVATE tobilib) 33target_compile_definitions(tobi PRIVATE TOBI_VERSION="${PROJECT_VERSION}") 34 35set(TOBI_WARN -Wall -Wextra -Wpedantic) 36if(TOBI_WERROR) 37 list(APPEND TOBI_WARN -Werror) 38endif() 39target_compile_options(tobilib PRIVATE ${TOBI_WARN}) 40target_compile_options(tobi PRIVATE ${TOBI_WARN}) 41 42if(TOBI_SAN) 43 set(SAN_FLAGS -fsanitize=address,undefined -fno-omit-frame-pointer) 44 target_compile_definitions(tobilib PUBLIC TOBI_SAN_BUILD=1) 45 target_compile_options(tobilib PRIVATE ${SAN_FLAGS}) 46 target_compile_options(tobi PRIVATE ${SAN_FLAGS}) 47 target_link_options(tobi PRIVATE ${SAN_FLAGS}) 48 target_link_options(tobilib INTERFACE ${SAN_FLAGS}) 49endif() 50 51enable_testing() 52 53add_executable(tobi_test 54 test/main.c test/t_rd.c test/t_nm.c test/t_p.c test/t_ir.c 55 test/t_cf.c test/t_da.c test/t_dc.c test/t_js.c test/t_bad.c test/t_cli.c 56 test/t_prod.c test/t_corpus.c test/t_snap.c) 57target_link_libraries(tobi_test PRIVATE tobilib) 58target_compile_options(tobi_test PRIVATE ${TOBI_WARN}) 59target_compile_definitions(tobi_test PRIVATE 60 TOBI_BIN="$<TARGET_FILE:tobi>" 61 TOBI_SRC_DIR="${CMAKE_CURRENT_SOURCE_DIR}") 62if(TOBI_SAN) 63 target_compile_options(tobi_test PRIVATE ${SAN_FLAGS}) 64 target_link_options(tobi_test PRIVATE ${SAN_FLAGS}) 65endif() 66 67foreach(t rd nm p ir cf da dc js bad cli prod corpus snap) 68 add_test(NAME ${t} COMMAND tobi_test ${t}) 69endforeach() 70 71if(TOBI_FZ) 72 add_executable(fz fuzz/fz.c) 73 target_link_libraries(fz PRIVATE tobilib) 74 target_compile_options(fz PRIVATE ${TOBI_WARN}) 75 target_compile_definitions(fz PRIVATE TOBI_SRC_DIR="${CMAKE_CURRENT_SOURCE_DIR}") 76 if(TOBI_SAN) 77 target_compile_options(fz PRIVATE ${SAN_FLAGS}) 78 target_link_options(fz PRIVATE ${SAN_FLAGS}) 79 endif() 80endif() 81 82if(TOBI_LIBFUZZER) 83 set(LIBFUZZER_COMPILE_FLAGS -fsanitize=fuzzer-no-link,address,undefined -fno-omit-frame-pointer) 84 target_compile_definitions(tobilib PUBLIC TOBI_SAN_BUILD=1) 85 target_compile_options(tobilib PRIVATE ${LIBFUZZER_COMPILE_FLAGS}) 86 add_executable(fz_llvm fuzz/lf.c) 87 target_link_libraries(fz_llvm PRIVATE tobilib) 88 target_compile_options(fz_llvm PRIVATE ${TOBI_WARN} -fsanitize=fuzzer,address,undefined -fno-omit-frame-pointer) 89 target_link_options(fz_llvm PRIVATE -fsanitize=fuzzer,address,undefined -fno-omit-frame-pointer) 90endif()