diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a3f41bb..a2a5cb4f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: - name: Build with build-presets script shell: bash run: | - export VCPKG_ROOT=$(pwd)/../lifting-bits-downloads/vcpkg_${{ matrix.image.name }}-${{ matrix.image.tag }}_llvm-${{ matrix.llvm }}_amd64 + export CMAKE_TOOLCHAIN_FILE=$(pwd)/../lifting-bits-downloads/vcpkg_${{ matrix.image.name }}-${{ matrix.image.tag }}_llvm-${{ matrix.llvm }}_amd64/scripts/buildsystems/vcpkg.cmake export INSTALL_DIR=$(pwd)/remill-preset-install ./scripts/build-preset.sh release - name: Install Python Test Deps @@ -129,7 +129,7 @@ jobs: shell: bash run: | brew install ninja - export VCPKG_ROOT=$(pwd)/../lifting-bits-downloads/vcpkg_${{ matrix.os}}_llvm-${{ matrix.llvm }}_xcode-13.0_amd64 + export CMAKE_TOOLCHAIN_FILE=$(pwd)/../lifting-bits-downloads/vcpkg_${{ matrix.os}}_llvm-${{ matrix.llvm }}_xcode-13.0_amd64/scripts/buildsystems/vcpkg.cmake export INSTALL_DIR=$(pwd)/remill-preset-install ./scripts/build-preset.sh release - name: Run tests diff --git a/CMakeLists.txt b/CMakeLists.txt index cad52ecf..a4ff6cf5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,6 @@ # limitations under the License. cmake_minimum_required(VERSION 3.21) -include(cmake/vcpkg_helper.cmake) # Setup to use ccache include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/ccache.cmake") @@ -271,7 +270,6 @@ if(REMILL_ENABLE_INSTALL_TARGET) ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/remillConfig.cmake" - "${CMAKE_CURRENT_LIST_DIR}/cmake/vcpkg_helper.cmake" DESTINATION "${REMILL_INSTALL_LIB_DIR}/cmake/remill" ) diff --git a/CMakePresets.json b/CMakePresets.json index bc944261..1cfd763b 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -51,10 +51,8 @@ "generator": "Ninja", "cacheVariables": { "VCPKG_TARGET_TRIPLET": "$env{VCPKG_TARGET_TRIPLET}", - "VCPKG_ROOT": "$env{VCPKG_ROOT}", - "CMAKE_INSTALL_PREFIX": "$env{INSTALL_DIR}/install", - "CMAKE_C_COMPILER": "$env{VCPKG_ROOT}/installed/$env{VCPKG_TARGET_TRIPLET}/tools/llvm/clang", - "CMAKE_CXX_COMPILER": "$env{VCPKG_ROOT}/installed/$env{VCPKG_TARGET_TRIPLET}/tools/llvm/clang++" + "CMAKE_TOOLCHAIN_FILE": "$env{CMAKE_TOOLCHAIN_FILE}", + "CMAKE_INSTALL_PREFIX": "$env{INSTALL_DIR}/install" } }, { @@ -71,25 +69,25 @@ "name": "vcpkg-x64-dbg", "inherits": ["vcpkg-debug", "x86_64"], "displayName": "Debug Build (vcpkg) (x64)", - "description": "Build a Debug version against a VCPKG installation. Define 'VCPKG_ROOT', 'INSTALL_DIR', 'VCPKG_TARGET_TRIPLET' env vars!" + "description": "Build a Debug version against a VCPKG installation. Define 'CMAKE_TOOLCHAIN_FILE', 'INSTALL_DIR', 'VCPKG_TARGET_TRIPLET' env vars!" }, { "name": "vcpkg-x64-rel", "inherits": ["vcpkg-release", "x86_64"], "displayName": "Release Build (vcpkg) (x64)", - "description": "Build a Release version against a VCPKG installation. Define 'VCPKG_ROOT', 'INSTALL_DIR', 'VCPKG_TARGET_TRIPLET' env vars!" + "description": "Build a Release version against a VCPKG installation. Define 'CMAKE_TOOLCHAIN_FILE', 'INSTALL_DIR', 'VCPKG_TARGET_TRIPLET' env vars!" }, { "name": "vcpkg-arm64-dbg", "inherits": ["vcpkg-debug", "arm64"], "displayName": "Debug Build (vcpkg) (arm64)", - "description": "Build a Debug version against a VCPKG installation. Define 'VCPKG_ROOT', 'INSTALL_DIR', 'VCPKG_TARGET_TRIPLET' env vars!" + "description": "Build a Debug version against a VCPKG installation. Define 'CMAKE_TOOLCHAIN_FILE', 'INSTALL_DIR', 'VCPKG_TARGET_TRIPLET' env vars!" }, { "name": "vcpkg-arm64-rel", "inherits": ["vcpkg-release", "arm64"], "displayName": "Release Build (vcpkg) (arm64)", - "description": "Build a Release version against a VCPKG installation. Define 'VCPKG_ROOT', 'INSTALL_DIR', 'VCPKG_TARGET_TRIPLET' env vars!" + "description": "Build a Release version against a VCPKG installation. Define 'CMAKE_TOOLCHAIN_FILE', 'INSTALL_DIR', 'VCPKG_TARGET_TRIPLET' env vars!" } ], "buildPresets": [ diff --git a/README.md b/README.md index 1aa66dca..6140f688 100644 --- a/README.md +++ b/README.md @@ -147,7 +147,7 @@ mkdir build cd build cmake \ -DCMAKE_INSTALL_PREFIX="" \ - -DVCPKG_ROOT="/vcpkg" \ + -DCMAKE_TOOLCHAIN_FILE="/vcpkg/scripts/buildsystems/vcpkg.cmake" \ -G Ninja \ .. cmake --build . diff --git a/cmake/remillConfig.cmake.in b/cmake/remillConfig.cmake.in index 586681e4..dbb31948 100644 --- a/cmake/remillConfig.cmake.in +++ b/cmake/remillConfig.cmake.in @@ -14,46 +14,15 @@ @PACKAGE_INIT@ -if(NOT TARGET sleigh::support) - find_package(sleigh CONFIG REQUIRED COMPONENTS Support Specs) -endif() +set(REMILL_LLVM_VERSION @REMILL_LLVM_VERSION@) -foreach(_comp ${remill_FIND_COMPONENTS}) - if (NOT "VCPKG_DEPS" STREQUAL _comp) - set(remill_FOUND False) - set(remill_NOT_FOUND_MESSAGE "Unsupported component: ${_comp}. Only VCPKG_DEPS") - endif() +# External libs +include(CMakeFindDependencyMacro) +find_dependency(XED) +find_dependency(glog) +find_dependency(Z3) +find_dependency(LLVM) +find_dependency(sleigh COMPONENTS Support Specs) - if ("VCPKG_DEPS" STREQUAL _comp) - set(remill_setup_vcpkg True) - if(NOT "x@VCPKG_ROOT@x" STREQUAL "xx" AND NOT USE_SYSTEM_DEPENDENCIES) - if (EXISTS "@VCPKG_ROOT@") - set(VCPKG_ROOT "@VCPKG_ROOT@" - CACHE PATH "Location of dependency libraries" - ) - include(${CMAKE_CURRENT_LIST_DIR}/vcpkg_helper.cmake) - message(STATUS "Found VCPKG_ROOT: ${VCPKG_ROOT}") - set(vcpkgdeps_FOUND) - endif() - endif() - endif() -endforeach() - -if(NOT remill_setup_vcpkg AND NOT TARGET remill) - set(LLVM_MAJOR_VERSION @LLVM_MAJOR_VERSION@) - set(LLVM_MINOR_VERSION @LLVM_MINOR_VERSION@) - set(REMILL_LLVM_VERSION @LLVM_MAJOR_VERSION@) - - # External libs - include(CMakeFindDependencyMacro) - find_dependency(XED) - find_dependency(glog) - find_dependency(Z3) - find_dependency(LLVM) - - # Exported Targets - include("${CMAKE_CURRENT_LIST_DIR}/remillTargets.cmake") - -endif() - -set(remill_setup_vcpkg False) +# Exported Targets +include("${CMAKE_CURRENT_LIST_DIR}/remillTargets.cmake") diff --git a/cmake/vcpkg_helper.cmake b/cmake/vcpkg_helper.cmake deleted file mode 100644 index 8075263c..00000000 --- a/cmake/vcpkg_helper.cmake +++ /dev/null @@ -1,57 +0,0 @@ -set(USE_SYSTEM_DEPENDENCIES OFF CACHE BOOL "Use system dependencies instead of trying to find vcpkg") - -if (NOT USE_SYSTEM_DEPENDENCIES) - set(VCPKG_ROOT "" CACHE FILEPATH "Root directory to use for vcpkg-managed dependencies") - if (VCPKG_ROOT) - if (NOT EXISTS "${VCPKG_ROOT}") - message(FATAL_ERROR "VCPKG_ROOT directory does not exist: '${VCPKG_ROOT}'") - endif() - - set(VCPKG_ROOT_INSTALL_DIR "${VCPKG_ROOT}/installed") - if (NOT EXISTS "${VCPKG_ROOT_INSTALL_DIR}") - message(FATAL_ERROR "VCPKG_ROOT installation directory does not exist: '${VCPKG_ROOT_INSTALL_DIR}'") - endif() - - set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE FILEPATH "" FORCE) - else() - message(FATAL_ERROR "Please define a path to VCPKG_ROOT. See https://github.com/lifting-bits/cxx-common for more details. Or if you don't want to use vcpkg dependencies, add '-DUSE_SYSTEM_DEPENDENCIES=ON'") - endif() - - # Set default triplet to Release VCPKG build unless we can't find it - if (NOT DEFINED VCPKG_TARGET_TRIPLET) - set(_project_arch "x64") - if (UNIX) - execute_process(COMMAND uname -m - OUTPUT_VARIABLE _SYSTEM_ARCH - OUTPUT_STRIP_TRAILING_WHITESPACE) - else() - message(WARNING "No detection of architecture for this platform. Assuming x64") - endif() - if (_SYSTEM_ARCH MATCHES "^[Aa][Aa][Rr][Cc][Hh]64$" OR _SYSTEM_ARCH MATCHES "^[Aa][Rr][Mm]64$") - set(_project_arch "arm64") - endif() - - if (APPLE) - set(_project_vcpkg_triplet "${_project_arch}-osx-rel") - elseif(UNIX) - set(_project_vcpkg_triplet "${_project_arch}-linux-rel") - elseif(WIN32) - set(_project_vcpkg_triplet "${_project_arch}-windows-static-md-rel") - else() - message(FATAL_ERROR "Could not detect default release triplet") - endif() - - if (NOT EXISTS "${VCPKG_ROOT_INSTALL_DIR}/${_project_vcpkg_triplet}") - message(STATUS "Could not find installed project-default triplet '${_project_vcpkg_triplet}' using vcpkg-default for your system") - else() - set(VCPKG_TARGET_TRIPLET "${_project_vcpkg_triplet}" CACHE STRING "") - message(STATUS "Setting default vcpkg triplet to release-only libraries: ${VCPKG_TARGET_TRIPLET}") - endif() - endif() - - if (DEFINED VCPKG_TARGET_TRIPLET AND NOT EXISTS "${VCPKG_ROOT_INSTALL_DIR}/${VCPKG_TARGET_TRIPLET}") - message(FATAL_ERROR "Could not find vcpkg triplet (${VCPKG_TARGET_TRIPLET}) installation libraries '${VCPKG_ROOT_INSTALL_DIR}/${VCPKG_TARGET_TRIPLET}'.") - endif() - - message(STATUS "Using vcpkg installation directory at '${VCPKG_ROOT_INSTALL_DIR}/${VCPKG_TARGET_TRIPLET}'") -endif() diff --git a/scripts/build-preset.sh b/scripts/build-preset.sh index 80cc8389..54a6cf33 100755 --- a/scripts/build-preset.sh +++ b/scripts/build-preset.sh @@ -11,11 +11,11 @@ VCPKG_SUFFIX="-rel" set -o pipefail function sanity_check { - if [ -z "${VCPKG_ROOT}" ]; then - echo "Please set the VCPKG_ROOT environment variable to the VCPKG root to build against" + if [ -z "${CMAKE_TOOLCHAIN_FILE}" ]; then + echo "Please set the CMAKE_TOOLCHAIN_FILE environment variable to the CMake toolchain file to build against" exit 1 else - echo "Building against VCPKG: [${VCPKG_ROOT}]" + echo "Building against CMake toolchain file: [${CMAKE_TOOLCHAIN_FILE}]" fi if [ -z "${INSTALL_DIR}" ]; then @@ -36,22 +36,11 @@ function show_usage { printf "\tArguments after '--' are passed to CMake during configuration (e.g. -DCMAKE_C_COMPILER=foo)\n" printf "\n" printf "INSTALL_DIR set to [${INSTALL_DIR}]\n" - printf "VCPKG_ROOT set to [${VCPKG_ROOT}]\n" + printf "CMAKE_TOOLCHAIN_FILE set to [${CMAKE_TOOLCHAIN_FILE}]\n" return 0 } -function compiler_check { - printf "Checking for clang/clang++ in [${VCPKG_ROOT}] [${VCPKG_TARGET_TRIPLET}]:\n" - for c in ${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}/tools/llvm/{clang,clang++} - do - ver=$(${c} --version) - printf "Found a clang [${c}]:\n" - printf "${ver}\n" - done - printf "\n" -} - function set_arch { local arch=$(uname -m) case ${arch} in @@ -130,9 +119,6 @@ ARCH=$(set_arch) OS=$(set_os) export VCPKG_TARGET_TRIPLET=${ARCH}-${OS}${VCPKG_SUFFIX} -compiler_check - - echo "Configuring [${BUILD_TYPE}] [${ARCH}] against vcpkg [${VCPKG_TARGET_TRIPLET}]..." if [[ "${@}" != "" ]] then diff --git a/scripts/build.sh b/scripts/build.sh index 8f9cf0f0..d525b5ea 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -184,12 +184,19 @@ function DownloadLibraries return 1 fi + VCPKG_TARGET_ARCH="${ARCH_VERSION}" + if [[ "${VCPKG_TARGET_ARCH}" == "amd64" ]]; then + VCPKG_TARGET_ARCH="x64" + fi + if [[ "${OS_VERSION}" == "macos-"* ]]; then # TODO Figure out Xcode compatibility LIBRARY_VERSION="vcpkg_${OS_VERSION}_${LLVM_VERSION}_xcode-${XCODE_VERSION}_${ARCH_VERSION}" + VCPKG_TARGET_TRIPLET="${VCPKG_TARGET_ARCH}-osx-rel" else # TODO Arch version LIBRARY_VERSION="vcpkg_${OS_VERSION}_${LLVM_VERSION}_${ARCH_VERSION}" + VCPKG_TARGET_TRIPLET="${VCPKG_TARGET_ARCH}-linux-rel" fi echo "[-] Library version is ${LIBRARY_VERSION}" @@ -214,7 +221,8 @@ function Configure cmake \ -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ -DCMAKE_VERBOSE_MAKEFILE=True \ - -DVCPKG_ROOT="${DOWNLOAD_DIR}/${LIBRARY_VERSION}" \ + -DCMAKE_TOOLCHAIN_FILE="${DOWNLOAD_DIR}/${LIBRARY_VERSION}/scripts/buildsystems/vcpkg.cmake" \ + -DVCPKG_TARGET_TRIPLET="${VCPKG_TARGET_TRIPLET}" \ ${BUILD_FLAGS} \ "${SRC_DIR}" ) || exit $?