Files
UnrealEngine/Engine/Plugins/Runtime/GeoReferencing/Source/ThirdParty/vcpkg.sh
2025-05-18 13:04:45 +08:00

134 lines
5.1 KiB
Bash

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
# this is a tag in the vcpkg repository
VCPKG_VERSION=2023.02.24
# this is where the artifacts get installed
VCPKG_INSTALLED=vcpkg-installed
VCPKG_TRIPLETS=()
# deduce vcpkg nomenclature for this system
if [ `uname` == "Linux" ]; then
VCPKG_TRIPLETS+=( overlay-x64-linux )
# Engine/Source/ThirdParty location
THIRD_PARTY=$(cd "${DIR}/../../../../../Source/ThirdParty" ; pwd)
# Folder containing HostLinux
export UE_SDKS_ROOT="${UE_SDKS_ROOT:-/epic}"
# Sanity SDKs existence
if [[ ! -d "${UE_SDKS_ROOT}" ]]; then
echo ERROR: UE_SDKS_ROOT envvar not set or specifies non-existant location
exit 1
fi
# Full path to toolchain root
export LINUX_MULTIARCH_ROOT="${LINUX_MULTIARCH_ROOT:-${UE_SDKS_ROOT}/HostLinux/Linux_x64/v21_clang-15.0.1-centos7}"
# Sanity compiler existence
if [[ ! -d "${LINUX_MULTIARCH_ROOT}" ]]; then
echo ERROR: LINUX_MULTIARCH_ROOT envvar not set or specifies non-existant toolchain
exit 1
fi
# Which toolchain in the root to use
export ARCH="${ARCH:-x86_64-unknown-linux-gnu}"
echo
echo === Generating toolchain file /tmp/__cmake_toolchain.cmake, using compiler at: ${LINUX_MULTIARCH_ROOT} ===
( cat <<_EOF_
## autogenerated by ${BASH_SOURCE} script
SET(LINUX_MULTIARCH_ROOT \$ENV{LINUX_MULTIARCH_ROOT})
SET(ARCHITECTURE_TRIPLE \$ENV{ARCH})
message (STATUS "LINUX_MULTIARCH_ROOT is '\${LINUX_MULTIARCH_ROOT}'")
message (STATUS "ARCHITECTURE_TRIPLE is '\${ARCHITECTURE_TRIPLE}'")
SET(CMAKE_CROSSCOMPILING TRUE)
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
# sysroot
SET(CMAKE_SYSROOT \${LINUX_MULTIARCH_ROOT}/\${ARCHITECTURE_TRIPLE})
SET(CMAKE_LIBRARY_ARCHITECTURE \${ARCHITECTURE_TRIPLE})
# specify the cross compiler
SET(CMAKE_C_COMPILER \${CMAKE_SYSROOT}/bin/clang)
SET(CMAKE_C_COMPILER_TARGET \${ARCHITECTURE_TRIPLE})
SET(CMAKE_C_FLAGS "-fPIC -fms-extensions -target \${ARCHITECTURE_TRIPLE}")
include_directories("${THIRD_PARTY}/Unix/LibCxx/include")
include_directories("${THIRD_PARTY}/Unix/LibCxx/include/c++/v1")
set(CMAKE_LINKER_FLAGS "-stdlib=libc++ -L${THIRD_PARTY}/Unix/LibCxx/lib/Unix/\${ARCHITECTURE_TRIPLE}/ ${THIRD_PARTY}/Unix/LibCxx/lib/Unix/\${ARCHITECTURE_TRIPLE}/libc++.a ${THIRD_PARTY}/Unix/LibCxx/lib/Unix/\${ARCHITECTURE_TRIPLE}/libc++abi.a -lpthread")
set(CMAKE_EXE_LINKER_FLAGS "\${CMAKE_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "\${CMAKE_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "\${CMAKE_LINKER_FLAGS}")
#set(CMAKE_STATIC_LINKER_FLAGS "\${CMAKE_LINKER_FLAGS}")
SET(CMAKE_CXX_COMPILER \${CMAKE_SYSROOT}/bin/clang++)
SET(CMAKE_CXX_COMPILER_TARGET \${ARCHITECTURE_TRIPLE})
SET(CMAKE_CXX_FLAGS "-fPIC -std=c++1z -fms-extensions")
# https://stackoverflow.com/questions/25525047/cmake-generator-expression-differentiate-c-c-code
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-nostdinc++>)
SET(CMAKE_ASM_COMPILER \${CMAKE_SYSROOT}/bin/clang)
SET(CMAKE_FIND_ROOT_PATH \${LINUX_MULTIARCH_ROOT})
# hoping to force it to use ar
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_EOF_
) > /tmp/__cmake_toolchain.cmake
elif [ `uname` == "Darwin" ]; then
VCPKG_TRIPLETS+=( overlay-x64_arm64-osx )
VCPKG_TRIPLETS+=( overlay-arm64-ios )
fi
# cleanup the git repo
[ -d "$DIR/vcpkg" ] && echo
[ -d "$DIR/vcpkg" ] && echo === Tidying up vcpkg and $VCPKG_INSTALLED/vcpkg ===
[ -d "$DIR/vcpkg" ] && rm -rf "$DIR/vcpkg" "$DIR/$VCPKG_INSTALLED/vcpkg"
echo
echo === Checking out vcpkg to $DIR/vcpkg ===
git clone https://github.com/microsoft/vcpkg.git --depth 1 --branch $VCPKG_VERSION "$DIR/vcpkg"
echo
echo === Bootstrapping vcpkg ===
"$DIR/vcpkg/bootstrap-vcpkg.sh"
for VCPKG_TRIPLET in ${VCPKG_TRIPLETS[@]}
do
# cleanup the prior artifacts
[ -d "$DIR/$VCPKG_INSTALLED" ] && echo
[ -d "$DIR/$VCPKG_INSTALLED" ] && echo === Tidying up $VCPKG_INSTALLED/$VCPKG_TRIPLET ===
[ -d "$DIR/$VCPKG_INSTALLED" ] && rm -rf "$DIR/$VCPKG_INSTALLED/$VCPKG_TRIPLET"
[ -d "$DIR/$VCPKG_INSTALLED/$VCPKG_TRIPLET" ] && echo
[ -d "$DIR/$VCPKG_INSTALLED/$VCPKG_TRIPLET" ] && echo === Making $VCPKG_INSTALLED/$VCPKG_TRIPLET artifacts writeable ===
[ -d "$DIR/$VCPKG_INSTALLED/$VCPKG_TRIPLET" ] && chmod -R u+w "$DIR/$VCPKG_INSTALLED/$VCPKG_TRIPLET"
echo
echo === Running vcpkg in manifest mode ===
# --overlay-ports tells it to resolve a named port via additional paths outside vcpkg/, PWD relative
# --overlay-triplets tells it to resolve a named triplet via additional paths outside vcpkg/, PWD relative
# --triplet names the triplet to configure the build with, our custom triplet file w/o .cmake extentions
# --debug will provide extra information to stdout
"$DIR/vcpkg/vcpkg" install --x-install-root="$DIR/$VCPKG_INSTALLED" --overlay-triplets=./overlay-triplets --triplet=$VCPKG_TRIPLET "proj[core]"
echo
echo === Reconciling $VCPKG_INSTALLED artifacts ===
p4 reconcile "$DIR/$VCPKG_INSTALLED/$VCPKG_TRIPLET/..."
done