Move to explicitly setting CMake toolchain file (#639)

* Move to CMake toolchain file

* Update docs and scripts

* Fix `build.sh` to manually specify the `VCPKG_TARGET_TRIPLET`

* Use x64 instead of amd64 in the VCPKG target triplet

* Remove references to VCPKG in Remill config

* Update cmake/remillConfig.cmake.in

Co-authored-by: Eric Kilmer <eric.d.kilmer@gmail.com>

* Update cmake/remillConfig.cmake.in

Co-authored-by: Eric Kilmer <eric.d.kilmer@gmail.com>

* Fix suggested edit

* Stop specifying compilers in CMake presets

* Fix typo

* Remove trailing comma from JSON file

Co-authored-by: Eric Kilmer <eric.d.kilmer@gmail.com>
This commit is contained in:
Alex Cameron
2022-12-02 15:45:48 +11:00
committed by GitHub
parent 829ee4acf5
commit a8ead7b584
8 changed files with 32 additions and 130 deletions
+2 -2
View File
@@ -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
-2
View File
@@ -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"
)
+6 -8
View File
@@ -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": [
+1 -1
View File
@@ -147,7 +147,7 @@ mkdir build
cd build
cmake \
-DCMAKE_INSTALL_PREFIX="<path where remill will install>" \
-DVCPKG_ROOT="<path to cxx-common directory>/vcpkg" \
-DCMAKE_TOOLCHAIN_FILE="<path to cxx-common directory>/vcpkg/scripts/buildsystems/vcpkg.cmake" \
-G Ninja \
..
cmake --build .
+10 -41
View File
@@ -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")
-57
View File
@@ -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()
+4 -18
View File
@@ -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
+9 -1
View File
@@ -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 $?