mirror of
https://github.com/lifting-bits/remill
synced 2026-06-21 13:56:07 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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
@@ -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": [
|
||||
|
||||
@@ -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
@@ -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")
|
||||
|
||||
@@ -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
@@ -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
@@ -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 $?
|
||||
|
||||
Reference in New Issue
Block a user