ACPI AML decompiler w/ CFG recovery and structured pseudocode
2.3 kB
68 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)
7
8set(CMAKE_C_STANDARD 11)
9set(CMAKE_C_STANDARD_REQUIRED ON)
10set(CMAKE_C_EXTENSIONS OFF)
11
12set(TOBI_COMMON
13 src/rd.c src/p.c src/op.c src/nm.c src/ir.c src/cf.c src/dc.c
14 src/da.c src/dg.c src/js.c src/mem.c src/str.c)
15
16add_library(tobilib ${TOBI_COMMON})
17target_include_directories(tobilib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src)
18target_compile_definitions(tobilib PUBLIC _POSIX_C_SOURCE=200809L)
19
20add_executable(tobi src/main.c)
21target_link_libraries(tobi PRIVATE tobilib)
22
23set(TOBI_WARN -Wall -Wextra -Wpedantic)
24if(TOBI_WERROR)
25 list(APPEND TOBI_WARN -Werror)
26endif()
27target_compile_options(tobilib PRIVATE ${TOBI_WARN})
28target_compile_options(tobi PRIVATE ${TOBI_WARN})
29
30if(TOBI_SAN)
31 set(SAN_FLAGS -fsanitize=address,undefined -fno-omit-frame-pointer)
32 target_compile_definitions(tobilib PUBLIC TOBI_SAN_BUILD=1)
33 target_compile_options(tobilib PRIVATE ${SAN_FLAGS})
34 target_compile_options(tobi PRIVATE ${SAN_FLAGS})
35 target_link_options(tobi PRIVATE ${SAN_FLAGS})
36 target_link_options(tobilib INTERFACE ${SAN_FLAGS})
37endif()
38
39enable_testing()
40
41add_executable(tobi_test
42 test/main.c test/t_rd.c test/t_nm.c test/t_p.c test/t_ir.c
43 test/t_cf.c test/t_da.c test/t_dc.c test/t_js.c test/t_bad.c test/t_cli.c
44 test/t_prod.c)
45target_link_libraries(tobi_test PRIVATE tobilib)
46target_compile_options(tobi_test PRIVATE ${TOBI_WARN})
47target_compile_definitions(tobi_test PRIVATE
48 TOBI_BIN="$<TARGET_FILE:tobi>"
49 TOBI_SRC_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
50if(TOBI_SAN)
51 target_compile_options(tobi_test PRIVATE ${SAN_FLAGS})
52 target_link_options(tobi_test PRIVATE ${SAN_FLAGS})
53endif()
54
55foreach(t rd nm p ir cf da dc js bad cli prod)
56 add_test(NAME ${t} COMMAND tobi_test ${t})
57endforeach()
58
59if(TOBI_FZ)
60 add_executable(fz fuzz/fz.c)
61 target_link_libraries(fz PRIVATE tobilib)
62 target_compile_options(fz PRIVATE ${TOBI_WARN})
63 target_compile_definitions(fz PRIVATE TOBI_SRC_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
64 if(TOBI_SAN)
65 target_compile_options(fz PRIVATE ${SAN_FLAGS})
66 target_link_options(fz PRIVATE ${SAN_FLAGS})
67 endif()
68endif()