mirror of
https://github.com/lifting-bits/remill
synced 2026-06-21 13:56:07 +00:00
104 lines
3.8 KiB
CMake
104 lines
3.8 KiB
CMake
# https://alexreinking.com/blog/how-to-use-cmake-without-the-agonizing-pain-part-1.html
|
|
cmake_minimum_required(VERSION 3.21)
|
|
|
|
# Default to a Release config. Required before project() because Windows defaults to Debug
|
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "")
|
|
if(CMAKE_BUILD_TYPE STREQUAL "")
|
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
|
|
endif()
|
|
|
|
project(dependencies)
|
|
|
|
option(USE_EXTERNAL_LLVM "Do not compile LLVM as part of the superbuild, use an external one instead" OFF)
|
|
option(USE_SANITIZERS "Use ASan and UBSan" OFF)
|
|
option(ENABLE_SLEIGH "Build and install sleigh into the dependencies prefix" OFF)
|
|
|
|
if(USE_EXTERNAL_LLVM)
|
|
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin" AND NOT CMAKE_PREFIX_PATH)
|
|
execute_process(
|
|
COMMAND brew --prefix llvm
|
|
RESULT_VARIABLE BREW_LLVM
|
|
OUTPUT_VARIABLE BREW_LLVM_PREFIX
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
if(BREW_LLVM EQUAL 0 AND EXISTS "${BREW_LLVM_PREFIX}")
|
|
set(CMAKE_PREFIX_PATH "${BREW_LLVM_PREFIX}")
|
|
message(STATUS "Found LLVM keg installed by Homebrew at ${BREW_LLVM_PREFIX}")
|
|
else()
|
|
message(WARNING "LLVM not found, to install: brew install llvm")
|
|
endif()
|
|
endif()
|
|
find_package(LLVM CONFIG REQUIRED)
|
|
message(STATUS "LLVM ${LLVM_PACKAGE_VERSION}: ${LLVM_DIR}")
|
|
endif()
|
|
|
|
if(USE_SANITIZERS)
|
|
list(APPEND CMAKE_C_FLAGS "-fsanitize=address,undefined")
|
|
list(APPEND CMAKE_CXX_FLAGS "-fsanitize=address,undefined")
|
|
endif()
|
|
|
|
include(superbuild.cmake)
|
|
|
|
simple_git(https://github.com/gflags/gflags 52e94563eba1968783864942fedf6e87e3c611f4
|
|
)
|
|
simple_git(https://github.com/google/glog v0.7.1
|
|
"-DGFLAGS_USE_TARGET_NAMESPACE:STRING=ON"
|
|
"-DBUILD_TESTING:STRING=OFF"
|
|
)
|
|
simple_git(https://github.com/google/googletest v1.17.0
|
|
"-Dgtest_force_shared_crt:STRING=ON"
|
|
"-DGFLAGS_USE_TARGET_NAMESPACE:STRING=ON"
|
|
)
|
|
|
|
include(xed.cmake)
|
|
|
|
set(LLVM_CONFIG "${CMAKE_INSTALL_PREFIX}/lib/cmake/llvm/LLVMConfig.cmake")
|
|
if(USE_EXTERNAL_LLVM)
|
|
# Create a forwarding LLVMConfig.cmake file that adds the external LLVM to CMAKE_PREFIX_PATH
|
|
# and then includes the external LLVMConfig.cmake
|
|
if(NOT EXISTS "${LLVM_DIR}/LLVMConfig.cmake")
|
|
message(FATAL_ERROR "LLVMConfig.cmake not found in LLVM_DIR (${LLVM_DIR})")
|
|
endif()
|
|
file(WRITE "${CMAKE_INSTALL_PREFIX}/lib/cmake/llvm/LLVMConfig.cmake"
|
|
"if(NOT \"${LLVM_INSTALL_PREFIX}\" IN_LIST CMAKE_PREFIX_PATH)\n"
|
|
" list(PREPEND CMAKE_PREFIX_PATH \"${LLVM_INSTALL_PREFIX}\")\n"
|
|
" set(CMAKE_PREFIX_PATH \"\${CMAKE_PREFIX_PATH}\" CACHE PATH \"\" FORCE)\n"
|
|
" message(STATUS \"Updating CMAKE_PREFIX_PATH: \${CMAKE_PREFIX_PATH}\")\n"
|
|
"endif()\n"
|
|
"include(\"${LLVM_DIR}/LLVMConfig.cmake\")\n"
|
|
)
|
|
else()
|
|
file(REMOVE "${LLVM_CONFIG}")
|
|
include(llvm.cmake)
|
|
endif()
|
|
|
|
if(ENABLE_SLEIGH)
|
|
file(GLOB sleigh_patches LIST_DIRECTORIES FALSE
|
|
"${CMAKE_CURRENT_LIST_DIR}/sleigh_patches/*.patch"
|
|
)
|
|
list(SORT sleigh_patches)
|
|
|
|
if(NOT sleigh_patches)
|
|
message(FATAL_ERROR "ENABLE_SLEIGH did not find any patches in sleigh_patches")
|
|
endif()
|
|
|
|
string(REPLACE ";" "\\;" sleigh_patches_arg "${sleigh_patches}")
|
|
|
|
simple_git(https://github.com/lifting-bits/sleigh 7c6b742
|
|
"-Dsleigh_ADDITIONAL_PATCHES:STRING=${sleigh_patches_arg}"
|
|
"-Dsleigh_ENABLE_TESTS:BOOL=OFF"
|
|
"-Dsleigh_RELEASE_TYPE:STRING=HEAD"
|
|
"-Dsleigh_BUILD_SUPPORT:BOOL=ON"
|
|
"-Dsleigh_BUILD_SLEIGHSPECS:BOOL=ON"
|
|
)
|
|
|
|
ExternalProject_Add_Step(sleigh ppc_e200_spec_install
|
|
COMMAND
|
|
"${CMAKE_COMMAND}"
|
|
"-Dinstall_prefix:PATH=${CMAKE_INSTALL_PREFIX}"
|
|
"-Dbinary_dir:PATH=<BINARY_DIR>"
|
|
-P "${CMAKE_CURRENT_LIST_DIR}/build_ppc_e200_sla.cmake"
|
|
DEPENDEES install
|
|
)
|
|
endif()
|