cmake_minimum_required(VERSION 3.15)
project(xo_obf CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 针对**本机 LLVM**构建：与宿主 clang 链接同一份 libLLVM，ABI 天然一致。
# （O-MVLL 预编译插件把 LLVM 静态内联，ABI 不一致时 pass 运行期会堆损坏崩溃）
find_package(LLVM REQUIRED CONFIG)
message(STATUS "xo-obf: building against LLVM ${LLVM_PACKAGE_VERSION}")

add_library(xo_obf MODULE xo_obf.cpp)
target_include_directories(xo_obf PRIVATE ${LLVM_INCLUDE_DIRS})
# LLVM_DEFINITIONS 是带引号的整串，必须拆开否则会拼成非法宏
separate_arguments(XO_LLVM_DEFS UNIX_COMMAND "${LLVM_DEFINITIONS}")
target_compile_definitions(xo_obf PRIVATE ${XO_LLVM_DEFS}
        -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS)
if(NOT LLVM_ENABLE_RTTI)
  target_compile_options(xo_obf PRIVATE -fno-rtti)
endif()

# 共享 libLLVM（Debian 提供 LLVM 目标）；否则退回 LLVM_LIBRARIES
if(TARGET LLVM)
  target_link_libraries(xo_obf PRIVATE LLVM)
else()
  target_link_libraries(xo_obf PRIVATE ${LLVM_LIBRARIES})
endif()

set_target_properties(xo_obf PROPERTIES PREFIX "" OUTPUT_NAME "xo-obf")
