mirror of
https://github.com/overte-org/overte.git
synced 2025-04-10 17:22:25 +02:00
Merge pull request #300 from thoys/feature/gha_vircadia
GitHub Actions (with artifact uploading)
This commit is contained in:
commit
affcc6f918
21 changed files with 419 additions and 155 deletions
103
.github/workflows/pr_build.yml
vendored
103
.github/workflows/pr_build.yml
vendored
|
@ -9,7 +9,8 @@ env:
|
|||
BUILD_TYPE: Release
|
||||
CI_BUILD: Github
|
||||
GIT_COMMIT: ${{ github.sha }}
|
||||
HIFI_VCPKG_BOOTSTRAP: true
|
||||
# VCPKG did not build well on OSX disabling HIFI_VCPKG_BOOTSTRAP, which invokes a download to a working version of vcpkg
|
||||
# HIFI_VCPKG_BOOTSTRAP: true
|
||||
RELEASE_TYPE: PR
|
||||
RELEASE_NUMBER: ${{ github.event.number }}
|
||||
VERSION_CODE: ${{ github.event.number }}
|
||||
|
@ -28,8 +29,12 @@ jobs:
|
|||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest, macOS-latest]
|
||||
os: [windows-latest, macOS-latest, ubuntu-18.04]
|
||||
build_type: [full]
|
||||
include:
|
||||
- os: ubuntu-18.04
|
||||
build_type: full
|
||||
apt-dependencies: mesa-common-dev libegl1 libglvnd-dev libdouble-conversion1 libpulse0
|
||||
fail-fast: false
|
||||
runs-on: ${{matrix.os}}
|
||||
if: github.event.action != 'labeled' || github.event.label.name == 'rebuild'
|
||||
|
@ -39,10 +44,14 @@ jobs:
|
|||
id: buildenv1
|
||||
run: |
|
||||
echo ::set-env name=GIT_COMMIT_SHORT::`echo $GIT_COMMIT | cut -c1-7`
|
||||
echo ::set-env name=JOB_NAME::"build (${{matrix.os}}, ${{matrix.build_type}})"
|
||||
|
||||
# Linux build variables
|
||||
if [ "${{ matrix.os }}" = "ubuntu-latest" ]; then
|
||||
if [[ "${{ matrix.os }}" = "ubuntu-"* ]]; then
|
||||
echo ::set-env name=PYTHON_EXEC::python3
|
||||
echo ::set-env name=INSTALLER_EXT::tgz
|
||||
echo ::set-env name=INSTALLER_EXT::*
|
||||
echo ::set-env name=CMAKE_BUILD_EXTRA::"-- -j3"
|
||||
echo ::set-env name=CMAKE_EXTRA::"-DBUILD_TOOLS:BOOLEAN=FALSE"
|
||||
fi
|
||||
# Mac build variables
|
||||
if [ "${{ matrix.os }}" = "macOS-latest" ]; then
|
||||
|
@ -61,11 +70,11 @@ jobs:
|
|||
shell: bash
|
||||
run: |
|
||||
echo "${{ steps.buildenv1.outputs.symbols_archive }}"
|
||||
echo ::set-env name=ARTIFACT_PATTERN::HighFidelity-Beta-*.$INSTALLER_EXT
|
||||
echo ::set-env name=ARTIFACT_PATTERN::ProjectAthena-Alpha-PR${{ github.event.number }}-*.$INSTALLER_EXT
|
||||
# Build type variables
|
||||
echo ::set-env name=INSTALLER::HighFidelity-Beta-$RELEASE_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT
|
||||
- name: Clear Working Directory
|
||||
if: matrix.os[1] == 'windows'
|
||||
if: startsWith(matrix.os, 'windows')
|
||||
shell: bash
|
||||
working-directory: ${{runner.workspace}}
|
||||
run: rm -rf ./*
|
||||
|
@ -73,61 +82,83 @@ jobs:
|
|||
with:
|
||||
submodules: true
|
||||
fetch-depth: 1
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
if: startsWith(matrix.os, 'ubuntu')
|
||||
run: |
|
||||
echo "Installing Python Modules:"
|
||||
pip3 install distro || exit 1
|
||||
|
||||
echo "Updating apt repository index"
|
||||
sudo apt update || exit 1
|
||||
|
||||
echo "Installing apt packages"
|
||||
sudo apt install -y ${{ matrix.apt-dependencies }} || exit 1
|
||||
- name: Create Build Environment
|
||||
shell: bash
|
||||
run: cmake -E make_directory "${{runner.workspace}}/build"
|
||||
- name: Configure CMake
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
shell: bash
|
||||
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CMAKE_EXTRA
|
||||
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DVCPKG_BUILD_TYPE=release $CMAKE_EXTRA
|
||||
- name: Build Application
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
shell: bash
|
||||
run: cmake --build . --config $BUILD_TYPE --target $APP_NAME
|
||||
run: cmake --build . --config $BUILD_TYPE --target $APP_NAME $CMAKE_BUILD_EXTRA
|
||||
- name: Build Domain Server
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
shell: bash
|
||||
run: cmake --build . --config $BUILD_TYPE --target domain-server
|
||||
run: cmake --build . --config $BUILD_TYPE --target domain-server $CMAKE_BUILD_EXTRA
|
||||
- name: Build Assignment Client
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
shell: bash
|
||||
run: cmake --build . --config $BUILD_TYPE --target assignment-client
|
||||
run: cmake --build . --config $BUILD_TYPE --target assignment-client $CMAKE_BUILD_EXTRA
|
||||
- name: Build Console
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
shell: bash
|
||||
run: cmake --build . --config $BUILD_TYPE --target packaged-server-console
|
||||
run: cmake --build . --config $BUILD_TYPE --target packaged-server-console $CMAKE_BUILD_EXTRA
|
||||
- name: Build Installer
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
shell: bash
|
||||
run: cmake --build . --config $BUILD_TYPE --target package
|
||||
run: |
|
||||
echo "Retry code from https://unix.stackexchange.com/a/137639"
|
||||
function fail {
|
||||
echo $1 >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function retry {
|
||||
local n=1
|
||||
local max=5
|
||||
local delay=15
|
||||
while true; do
|
||||
"$@" && break || {
|
||||
if [[ $n -lt $max ]]; then
|
||||
((n++))
|
||||
echo "Command failed. Attempt $n/$max:"
|
||||
sleep $delay;
|
||||
else
|
||||
fail "The command has failed after $n attempts."
|
||||
fi
|
||||
}
|
||||
done
|
||||
}
|
||||
retry cmake --build . --config $BUILD_TYPE --target package $CMAKE_BUILD_EXTRA
|
||||
- name: Output system stats
|
||||
if: ${{ always() }}
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
shell: bash
|
||||
run: |
|
||||
echo "Disk usage:"
|
||||
df -h
|
||||
- name: Output Installer Logs
|
||||
if: failure() && matrix.os == 'windows-latest'
|
||||
shell: bash
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
run: cat ./_CPack_Packages/win64/NSIS/NSISOutput.log
|
||||
|
||||
build_full_linux:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.action != 'labeled' || github.event.label.name == 'rebuild'
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: true
|
||||
fetch-depth: 1
|
||||
- name: Update apt repository index
|
||||
run: sudo apt update
|
||||
- name: Install apt packages
|
||||
run: sudo apt install -y mesa-common-dev libegl1 libglvnd-dev libdouble-conversion1 libpulse0
|
||||
- name: Install python modules
|
||||
shell: bash
|
||||
run: pip install boto3 distro PyGithub
|
||||
- name: Create Build Environment
|
||||
run: cmake -E make_directory ${{runner.workspace}}/build
|
||||
- name: Configure CMake
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
shell: bash
|
||||
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_TOOLS:BOOLEAN=FALSE
|
||||
- name:
|
||||
- name: Upload Artifact
|
||||
shell: bash
|
||||
working-directory: ${{runner.workspace}}/build
|
||||
run: cmake --build . -- -j3
|
||||
env:
|
||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
run: $PYTHON_EXEC "$GITHUB_WORKSPACE/tools/ci-scripts/upload_to_publish_server.py"
|
||||
|
|
12
BUILD.md
12
BUILD.md
|
@ -73,6 +73,18 @@ Create a build directory in the root of your checkout and then run the CMake bui
|
|||
|
||||
If cmake gives you the same error message repeatedly after the build fails, try removing `CMakeCache.txt`.
|
||||
|
||||
##### Generating a release/debug only vcpkg build
|
||||
|
||||
In order to generate a release or debug only vcpkg package, you could use the use the `VCPKG_BUILD_TYPE` define in your cmake generate command. Building a release only vcpkg can drastically decrease the total build time.
|
||||
|
||||
For release only vcpkg:
|
||||
|
||||
`cmake .. -DVCPKG_BUILD_TYPE=release`
|
||||
|
||||
For debug only vcpkg:
|
||||
|
||||
`cmake .. -DVCPKG_BUILD_TYPE=debug`
|
||||
|
||||
#### Variables
|
||||
|
||||
Any variables that need to be set for CMake to find dependencies can be set as ENV variables in your shell profile, or passed directly to CMake with a `-D` flag appended to the `cmake ..` command.
|
||||
|
|
|
@ -67,8 +67,12 @@ if (HIFI_ANDROID)
|
|||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
else()
|
||||
set(VCPKG_BUILD_TYPE_PARAM "")
|
||||
if (VCPKG_BUILD_TYPE)
|
||||
set(VCPKG_BUILD_TYPE_PARAM --vcpkg-build-type ${VCPKG_BUILD_TYPE})
|
||||
endif()
|
||||
execute_process(
|
||||
COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_CURRENT_SOURCE_DIR}/prebuild.py --release-type ${RELEASE_TYPE} --build-root ${CMAKE_BINARY_DIR}
|
||||
COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_CURRENT_SOURCE_DIR}/prebuild.py --release-type ${RELEASE_TYPE} --build-root ${CMAKE_BINARY_DIR} ${VCPKG_BUILD_TYPE_PARAM}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
# squelch the Policy CMP0074 warning without requiring an update to cmake 3.12.
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
macro(TARGET_DRACO)
|
||||
set(LIBS draco dracodec dracoenc)
|
||||
find_library(LIBPATH ${LIB} PATHS )
|
||||
if (ANDROID)
|
||||
set(INSTALL_DIR ${HIFI_ANDROID_PRECOMPILED}/draco)
|
||||
set(DRACO_INCLUDE_DIRS "${INSTALL_DIR}/include" CACHE STRING INTERNAL)
|
||||
|
@ -12,6 +11,8 @@ macro(TARGET_DRACO)
|
|||
else()
|
||||
set(LIB_SEARCH_PATH_RELEASE ${VCPKG_INSTALL_ROOT}/lib/)
|
||||
set(LIB_SEARCH_PATH_DEBUG ${VCPKG_INSTALL_ROOT}/debug/lib/)
|
||||
set(DRACO_LIBRARY_RELEASE "")
|
||||
set(DRACO_LIBRARY_DEBUG "")
|
||||
foreach(LIB ${LIBS})
|
||||
find_library(${LIB}_LIBPATH ${LIB} PATHS ${LIB_SEARCH_PATH_RELEASE} NO_DEFAULT_PATH)
|
||||
list(APPEND DRACO_LIBRARY_RELEASE ${${LIB}_LIBPATH})
|
||||
|
|
|
@ -28,6 +28,8 @@ macro(TARGET_OPENEXR)
|
|||
string(REGEX MATCHALL "[0-9]" OPENEXR_MINOR_VERSION ${TMP})
|
||||
endif()
|
||||
|
||||
set(OPENEXR_LIBRARY_RELEASE "")
|
||||
set(OPENEXR_LIBRARY_DEBUG "")
|
||||
foreach(OPENEXR_LIB
|
||||
IlmImf
|
||||
IlmImfUtil
|
||||
|
|
|
@ -1,17 +1,19 @@
|
|||
include(vcpkg_common_functions)
|
||||
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
|
||||
|
||||
file(READ "${VCPKG_ROOT_DIR}/_env/EXTERNAL_BUILD_ASSETS.txt" EXTERNAL_BUILD_ASSETS)
|
||||
|
||||
if (ANDROID)
|
||||
vcpkg_download_distfile(
|
||||
SOURCE_ARCHIVE
|
||||
URLS https://athena-public.s3.amazonaws.com/dependencies/glad/glad32es.zip
|
||||
URLS ${EXTERNAL_BUILD_ASSETS}/dependencies/glad/glad32es.zip
|
||||
SHA512 2e02ac633eed8f2ba2adbf96ea85d08998f48dd2e9ec9a88ec3c25f48eaf1405371d258066327c783772fcb3793bdb82bd7375fdabb2ba5e2ce0835468b17f65
|
||||
)
|
||||
else()
|
||||
# else Linux desktop
|
||||
vcpkg_download_distfile(
|
||||
SOURCE_ARCHIVE
|
||||
URLS https://athena-public.s3.amazonaws.com/dependencies/glad/glad45.zip
|
||||
URLS ${EXTERNAL_BUILD_ASSETS}/dependencies/glad/glad45.zip
|
||||
SHA512 653a7b873f9fbc52e0ab95006cc3143bc7b6f62c6e032bc994e87669273468f37978525c9af5efe36f924cb4acd221eb664ad9af0ce4bf711b4f1be724c0065e
|
||||
FILENAME glad45.zip
|
||||
)
|
||||
|
@ -33,4 +35,3 @@ vcpkg_install_cmake()
|
|||
|
||||
file(COPY ${CMAKE_CURRENT_LIST_DIR}/copyright DESTINATION ${CURRENT_PACKAGES_DIR}/share/glad)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Source: hifi-deps
|
||||
Version: 0.1.4-github-actions
|
||||
Version: 0.1.5-github-actions
|
||||
Description: Collected dependencies for High Fidelity applications
|
||||
Build-Depends: bullet3, draco, etc2comp, glad, glm, nvtt, openexr (!android), openssl (windows), opus, polyvox, tbb (!android), vhacd, webrtc (!android), zlib
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
include(vcpkg_common_functions)
|
||||
|
||||
file(READ "${VCPKG_ROOT_DIR}/_env/EXTERNAL_BUILD_ASSETS.txt" EXTERNAL_BUILD_ASSETS)
|
||||
|
||||
# else Linux desktop
|
||||
vcpkg_download_distfile(
|
||||
SOURCE_ARCHIVE
|
||||
URLS https://athena-public.s3.amazonaws.com/dependencies/polyvox-master-2015-7-15.zip
|
||||
URLS ${EXTERNAL_BUILD_ASSETS}/dependencies/polyvox-master-2015-7-15.zip
|
||||
SHA512 cc04cd43ae74b9c7bb065953540c0048053fcba6b52dc4218b3d9431fba178d65ad4f6c53cc1122ba61d0ab4061e99a7ebbb15db80011d607c5070ebebf8eddc
|
||||
FILENAME polyvox.zip
|
||||
)
|
||||
|
@ -23,33 +25,45 @@ vcpkg_install_cmake()
|
|||
|
||||
file(INSTALL ${SOURCE_PATH}/LICENSE.TXT DESTINATION ${CURRENT_PACKAGES_DIR}/share/polyvox RENAME copyright)
|
||||
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/include)
|
||||
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/lib)
|
||||
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/lib)
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
|
||||
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/lib)
|
||||
endif()
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
|
||||
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/lib)
|
||||
endif()
|
||||
if(WIN32)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/PolyVoxCore/lib/Release/PolyVoxCore.lib ${CURRENT_PACKAGES_DIR}/lib/PolyVoxCore.lib)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/PolyVoxCore/lib/Debug/PolyVoxCore.lib ${CURRENT_PACKAGES_DIR}/debug/lib/PolyVoxCore.lib)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/PolyVoxUtil/lib/PolyVoxUtil.lib ${CURRENT_PACKAGES_DIR}/lib/PolyVoxUtil.lib)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/PolyVoxUtil/lib/PolyVoxUtil.lib ${CURRENT_PACKAGES_DIR}/debug/lib/PolyVoxUtil.lib)
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/PolyVoxCore/lib/Release/PolyVoxCore.lib ${CURRENT_PACKAGES_DIR}/lib/PolyVoxCore.lib)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/PolyVoxUtil/lib/PolyVoxUtil.lib ${CURRENT_PACKAGES_DIR}/lib/PolyVoxUtil.lib)
|
||||
endif()
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/PolyVoxCore/lib/Debug/PolyVoxCore.lib ${CURRENT_PACKAGES_DIR}/debug/lib/PolyVoxCore.lib)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/PolyVoxUtil/lib/PolyVoxUtil.lib ${CURRENT_PACKAGES_DIR}/debug/lib/PolyVoxUtil.lib)
|
||||
endif()
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/PolyVoxCore/include/PolyVoxCore ${CURRENT_PACKAGES_DIR}/include/PolyVoxCore)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/PolyVoxUtil/include/PolyVoxUtil ${CURRENT_PACKAGES_DIR}/include/PolyVoxUtil)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/cmake/PolyVoxConfig.cmake ${CURRENT_PACKAGES_DIR}/share/polyvox/polyvoxConfig.cmake)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/cmake)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/cmake)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/PolyVoxCore)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/PolyVoxUtil)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/PolyVoxUtil)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/cmake)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/PolyVoxCore)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/PolyVoxUtil)
|
||||
else()
|
||||
file(GLOB LIBS ${CURRENT_PACKAGES_DIR}/lib/Release/*)
|
||||
foreach(_lib ${LIBS})
|
||||
file(RELATIVE_PATH _libName ${CURRENT_PACKAGES_DIR}/lib/Release ${_lib})
|
||||
file(RENAME ${_lib} ${CURRENT_PACKAGES_DIR}/lib/${_libName})
|
||||
endforeach()
|
||||
file(GLOB LIBS ${CURRENT_PACKAGES_DIR}/debug/lib/Debug/*)
|
||||
foreach(_lib ${LIBS})
|
||||
file(RELATIVE_PATH _libName ${CURRENT_PACKAGES_DIR}/debug/lib/Debug ${_lib})
|
||||
file(RENAME ${_lib} ${CURRENT_PACKAGES_DIR}/debug/lib/${_libName})
|
||||
endforeach()
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
|
||||
file(GLOB LIBS ${CURRENT_PACKAGES_DIR}/lib/Release/*)
|
||||
foreach(_lib ${LIBS})
|
||||
file(RELATIVE_PATH _libName ${CURRENT_PACKAGES_DIR}/lib/Release ${_lib})
|
||||
file(RENAME ${_lib} ${CURRENT_PACKAGES_DIR}/lib/${_libName})
|
||||
endforeach()
|
||||
endif()
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
|
||||
file(GLOB LIBS ${CURRENT_PACKAGES_DIR}/debug/lib/Debug/*)
|
||||
foreach(_lib ${LIBS})
|
||||
file(RELATIVE_PATH _libName ${CURRENT_PACKAGES_DIR}/debug/lib/Debug ${_lib})
|
||||
file(RENAME ${_lib} ${CURRENT_PACKAGES_DIR}/debug/lib/${_libName})
|
||||
endforeach()
|
||||
endif()
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/include/PolyVoxCore ${CURRENT_PACKAGES_DIR}/include/PolyVoxCore.temp)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/include/PolyVoxCore.temp/PolyVoxCore ${CURRENT_PACKAGES_DIR}/include/PolyVoxCore)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/PolyVoxCore.temp)
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
include(vcpkg_common_functions)
|
||||
|
||||
file(READ "${VCPKG_ROOT_DIR}/_env/QT_CMAKE_PREFIX_PATH.txt" QT_CMAKE_PREFIX_PATH)
|
||||
file(READ "${VCPKG_ROOT_DIR}/_env/EXTERNAL_BUILD_ASSETS.txt" EXTERNAL_BUILD_ASSETS)
|
||||
|
||||
vcpkg_download_distfile(
|
||||
SOURCE_ARCHIVE
|
||||
URLS https://athena-public.s3.amazonaws.com/dependencies/quazip-0.7.3.zip
|
||||
URLS ${EXTERNAL_BUILD_ASSETS}/dependencies/quazip-0.7.3.zip
|
||||
SHA512 b2d812b6346317fd6d8f4f1344ad48b721d697c429acc8b7e7cb776ce5cba15a59efd64b2c5ae1f31b5a3c928014f084aa1379fd55d8a452a6cf4fd510b3afcc
|
||||
FILENAME quazip.zip
|
||||
)
|
||||
|
@ -24,10 +25,14 @@ vcpkg_configure_cmake(
|
|||
vcpkg_install_cmake()
|
||||
|
||||
if (WIN32)
|
||||
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/bin)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/lib/quazip5.dll ${CURRENT_PACKAGES_DIR}/bin/quazip5.dll)
|
||||
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/bin)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/quazip5d.dll ${CURRENT_PACKAGES_DIR}/debug/bin/quazip5.dll)
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
|
||||
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/bin)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/lib/quazip5.dll ${CURRENT_PACKAGES_DIR}/bin/quazip5.dll)
|
||||
endif()
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
|
||||
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/bin)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/quazip5d.dll ${CURRENT_PACKAGES_DIR}/debug/bin/quazip5.dll)
|
||||
endif()
|
||||
elseif(DEFINED VCPKG_TARGET_IS_LINUX)
|
||||
# We only want static libs.
|
||||
file(GLOB QUAZIP5_DYNAMIC_LIBS ${CURRENT_PACKAGES_DIR}/lib/libquazip5.so* ${CURRENT_PACKAGES_DIR}/debug/lib/libquazip5d.so*)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Source: tbb
|
||||
Version: 2019_U8-1
|
||||
Homepage: https://github.com/01org/tbb
|
||||
Homepage: https://github.com/oneapi-src/oneTBB
|
||||
Description: Intel's Threading Building Blocks.
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
include(vcpkg_common_functions)
|
||||
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
|
||||
|
||||
file(READ "${VCPKG_ROOT_DIR}/_env/EXTERNAL_BUILD_ASSETS.txt" EXTERNAL_BUILD_ASSETS)
|
||||
|
||||
# else Linux desktop
|
||||
vcpkg_download_distfile(
|
||||
SOURCE_ARCHIVE
|
||||
URLS https://athena-public.s3.amazonaws.com/dependencies/v-hacd-master.zip
|
||||
URLS ${EXTERNAL_BUILD_ASSETS}/dependencies/v-hacd-master.zip
|
||||
SHA512 5d9bd4872ead9eb3574e4806d6c4f490353a04036fd5f571e1e44f47cb66b709e311abcd53af30bae0015a690152170aeed93209a626c28ebcfd6591f3bb036f
|
||||
FILENAME vhacd.zip
|
||||
)
|
||||
|
@ -22,10 +24,17 @@ vcpkg_configure_cmake(
|
|||
vcpkg_install_cmake()
|
||||
|
||||
file(COPY ${CMAKE_CURRENT_LIST_DIR}/copyright DESTINATION ${CURRENT_PACKAGES_DIR}/share/vhacd)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/lib/Release/VHACD_LIB.lib ${CURRENT_PACKAGES_DIR}/lib/VHACD.lib)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/lib/Release)
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/Debug/VHACD_LIB.lib ${CURRENT_PACKAGES_DIR}/debug/lib/VHACD.lib)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/lib/Debug)
|
||||
endif()
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/lib/Release/VHACD_LIB.lib ${CURRENT_PACKAGES_DIR}/lib/VHACD.lib)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/lib/Release)
|
||||
endif()
|
||||
if (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
|
||||
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/Debug/VHACD_LIB.lib ${CURRENT_PACKAGES_DIR}/debug/lib/VHACD.lib)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/lib/Debug)
|
||||
endif()
|
||||
endif()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Source: zlib
|
||||
Version: 1.2.11-5
|
||||
Version: 1.2.11-6
|
||||
Homepage: https://www.zlib.net/
|
||||
Description: A compression library
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 0fe939d..8d2f5f1 100644
|
||||
index 0fe939d..a1291d5 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -7,6 +7,7 @@ set(VERSION "1.2.11")
|
||||
|
@ -10,24 +10,56 @@ index 0fe939d..8d2f5f1 100644
|
|||
|
||||
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
|
||||
set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
|
||||
@@ -211,7 +212,15 @@ elseif(BUILD_SHARED_LIBS AND WIN32)
|
||||
@@ -124,9 +125,11 @@ set(ZLIB_SRCS
|
||||
)
|
||||
|
||||
if(NOT MINGW)
|
||||
- set(ZLIB_DLL_SRCS
|
||||
- win32/zlib1.rc # If present will override custom build rule below.
|
||||
- )
|
||||
+ if(BUILD_SHARED_LIBS)
|
||||
+ set(ZLIB_DLL_SRCS
|
||||
+ win32/zlib1.rc # If present will override custom build rule below.
|
||||
+ )
|
||||
+ endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCC)
|
||||
@@ -180,11 +183,12 @@ if(MINGW)
|
||||
-I ${CMAKE_CURRENT_BINARY_DIR}
|
||||
-o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
|
||||
-i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)
|
||||
- set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
|
||||
+ if(BUILD_SHARED_LIBS)
|
||||
+ set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
|
||||
+ endif()
|
||||
endif(MINGW)
|
||||
|
||||
-add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
|
||||
-add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
|
||||
+add_library(zlib ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
|
||||
set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
|
||||
set_target_properties(zlib PROPERTIES SOVERSION 1)
|
||||
|
||||
@@ -201,7 +205,7 @@ endif()
|
||||
|
||||
if(UNIX)
|
||||
# On unix-like platforms the library is almost always called libz
|
||||
- set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z)
|
||||
+ set_target_properties(zlib PROPERTIES OUTPUT_NAME z)
|
||||
if(NOT APPLE)
|
||||
set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"")
|
||||
endif()
|
||||
@@ -211,7 +215,7 @@ elseif(BUILD_SHARED_LIBS AND WIN32)
|
||||
endif()
|
||||
|
||||
if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
|
||||
- install(TARGETS zlib zlibstatic
|
||||
+ if (BUILD_SHARED_LIBS)
|
||||
+ set(ZLIB_TARGETS zlib)
|
||||
+ set_target_properties(zlibstatic PROPERTIES EXCLUDE_FROM_ALL ON)
|
||||
+ else()
|
||||
+ set(ZLIB_TARGETS zlibstatic)
|
||||
+ set_target_properties(zlib PROPERTIES EXCLUDE_FROM_ALL ON)
|
||||
+ endif()
|
||||
+
|
||||
+ install(TARGETS ${ZLIB_TARGETS}
|
||||
+ install(TARGETS zlib
|
||||
RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
|
||||
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
|
||||
LIBRARY DESTINATION "${INSTALL_LIB_DIR}" )
|
||||
@@ -230,6 +239,7 @@ endif()
|
||||
@@ -230,6 +234,7 @@ endif()
|
||||
# Example binaries
|
||||
#============================================================================
|
||||
|
||||
|
@ -35,7 +67,7 @@ index 0fe939d..8d2f5f1 100644
|
|||
add_executable(example test/example.c)
|
||||
target_link_libraries(example zlib)
|
||||
add_test(example example)
|
||||
@@ -247,3 +257,4 @@ if(HAVE_OFF64_T)
|
||||
@@ -247,3 +252,4 @@ if(HAVE_OFF64_T)
|
||||
target_link_libraries(minigzip64 zlib)
|
||||
set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
|
||||
endif()
|
||||
|
|
10
hifi_qt.py
10
hifi_qt.py
|
@ -29,7 +29,7 @@ endif()
|
|||
self.configFilePath = os.path.join(args.build_root, 'qt.cmake')
|
||||
self.version = os.getenv('VIRCADIA_USE_QT_VERSION', '5.12.3')
|
||||
|
||||
self.assets_url = self.readVar('EXTERNAL_BUILD_ASSETS')
|
||||
self.assets_url = hifi_utils.readEnviromentVariableFromFile(args.build_root, 'EXTERNAL_BUILD_ASSETS')
|
||||
|
||||
defaultBasePath = os.path.expanduser('~/hifi/qt')
|
||||
self.basePath = os.getenv('HIFI_QT_BASE', defaultBasePath)
|
||||
|
@ -74,10 +74,10 @@ endif()
|
|||
self.qtUrl = self.assets_url + '/dependencies/vcpkg/qt5-install-5.12.6-ubuntu-19.10.tar.xz'
|
||||
elif u_major > 18 and ( u_major != 19 and u_minor != 4):
|
||||
print("We don't support " + distro.name(pretty=True) + " yet. Perhaps consider helping us out?")
|
||||
raise Exception('UNSUPPORTED LINUX VERSION!!!')
|
||||
raise Exception('LINUX DISTRO IS NOT SUPPORTED YET!!!')
|
||||
else:
|
||||
print("Sorry, " + distro.name(pretty=True) + " is old and won't be officially supported. Please consider upgrading.");
|
||||
raise Exception('UNSUPPORTED LINUX VERSION!!!')
|
||||
raise Exception('UNKNOWN LINUX DISTRO VERSION!!!')
|
||||
else:
|
||||
print("Sorry, " + distro.name(pretty=True) + " is not supported. Please consider helping us out.")
|
||||
print("It's also possible to build Qt for your distribution, please see the documentation at:")
|
||||
|
@ -89,10 +89,6 @@ endif()
|
|||
print("Machine : " + platform.machine())
|
||||
raise Exception('UNKNOWN OPERATING SYSTEM!!!')
|
||||
|
||||
def readVar(self, var):
|
||||
with open(os.path.join(self.args.build_root, '_env', var + ".txt")) as fp:
|
||||
return fp.read()
|
||||
|
||||
def writeConfig(self):
|
||||
print("Writing cmake config to {}".format(self.configFilePath))
|
||||
# Write out the configuration for use by CMake
|
||||
|
|
|
@ -121,3 +121,7 @@ def downloadAndExtract(url, destPath, hash=None, hasher=hashlib.sha512(), isZip=
|
|||
with tarfile.open(tempFileName, 'r:*') as tgz:
|
||||
tgz.extractall(destPath)
|
||||
os.remove(tempFileName)
|
||||
|
||||
def readEnviromentVariableFromFile(buildRootDir, var):
|
||||
with open(os.path.join(buildRootDir, '_env', var + ".txt")) as fp:
|
||||
return fp.read()
|
||||
|
|
|
@ -21,6 +21,7 @@ get_filename_component(CMAKE_TOOLCHAIN_FILE "{}" ABSOLUTE CACHE)
|
|||
get_filename_component(CMAKE_TOOLCHAIN_FILE_UNCACHED "{}" ABSOLUTE)
|
||||
set(VCPKG_INSTALL_ROOT "{}")
|
||||
set(VCPKG_TOOLS_DIR "{}")
|
||||
set(VCPKG_TARGET_TRIPLET "{}")
|
||||
"""
|
||||
|
||||
CMAKE_TEMPLATE_NON_ANDROID = """
|
||||
|
@ -34,7 +35,11 @@ endif()
|
|||
self.args = args
|
||||
# our custom ports, relative to the script location
|
||||
self.sourcePortsPath = args.ports_path
|
||||
self.id = hifi_utils.hashFolder(self.sourcePortsPath)[:8]
|
||||
self.vcpkgBuildType = args.vcpkg_build_type
|
||||
if (self.vcpkgBuildType):
|
||||
self.id = hifi_utils.hashFolder(self.sourcePortsPath)[:8] + "-" + self.vcpkgBuildType
|
||||
else:
|
||||
self.id = hifi_utils.hashFolder(self.sourcePortsPath)[:8]
|
||||
self.configFilePath = os.path.join(args.build_root, 'vcpkg.cmake')
|
||||
self.assets_url = self.readVar('EXTERNAL_BUILD_ASSETS')
|
||||
|
||||
|
@ -78,27 +83,31 @@ endif()
|
|||
self.bootstrapEnv = os.environ.copy()
|
||||
self.buildEnv = os.environ.copy()
|
||||
self.prebuiltArchive = None
|
||||
usePrebuilt = ('CI_BUILD' in os.environ) and os.environ["CI_BUILD"] == "Github" and (not self.noClean)
|
||||
usePrebuilt = False
|
||||
# usePrebuild Disabled, to re-enabled using the prebuilt archives for GitHub action builds uncomment the following line:
|
||||
# usePrebuilt = ('CI_BUILD' in os.environ) and os.environ["CI_BUILD"] == "Github" and (not self.noClean)
|
||||
|
||||
if 'Windows' == system:
|
||||
self.exe = os.path.join(self.path, 'vcpkg.exe')
|
||||
self.bootstrapCmds = [ os.path.join(self.path, 'bootstrap-vcpkg.bat') ]
|
||||
self.bootstrapCmds = [ os.path.join(self.path, 'bootstrap-vcpkg.bat'), '-disableMetrics' ]
|
||||
self.vcpkgUrl = self.assets_url + '/dependencies/vcpkg/builds/vcpkg-win32-client.zip%3FversionId=tSFzbw01VkkVFeRQ6YuAY4dro2HxJR9U'
|
||||
self.vcpkgHash = 'a650db47a63ccdc9904b68ddd16af74772e7e78170b513ea8de5a3b47d032751a3b73dcc7526d88bcb500753ea3dd9880639ca842bb176e2bddb1710f9a58cd3'
|
||||
self.hostTriplet = 'x64-windows'
|
||||
if usePrebuilt:
|
||||
self.prebuiltArchive = self.assets_url + "/dependencies/vcpkg/builds/vcpkg-win32.zip%3FversionId=3SF3mDC8dkQH1JP041m88xnYmWNzZflx"
|
||||
self.prebuiltArchive = self.assets_url + "/dependencies/vcpkg/builds/vcpkg-win32.zip%3FversionId=3SF3mDC8dkQH1JP041m88xnYmWNzZflx"
|
||||
elif 'Darwin' == system:
|
||||
self.exe = os.path.join(self.path, 'vcpkg')
|
||||
self.bootstrapCmds = [ os.path.join(self.path, 'bootstrap-vcpkg.sh'), '--allowAppleClang' ]
|
||||
self.bootstrapCmds = [ os.path.join(self.path, 'bootstrap-vcpkg.sh'), '--allowAppleClang', '-disableMetrics' ]
|
||||
self.vcpkgUrl = self.assets_url + '/dependencies/vcpkg/builds/vcpkg-osx-client.tgz%3FversionId=j0b4azo_zTlH_Q9DElEWOz1UMYZ2nqQw'
|
||||
self.vcpkgHash = '519d666d02ef22b87c793f016ca412e70f92e1d55953c8f9bd4ee40f6d9f78c1df01a6ee293907718f3bbf24075cc35492fb216326dfc50712a95858e9cbcb4d'
|
||||
self.hostTriplet = 'x64-osx'
|
||||
# Potential fix for a vcpkg build issue on OSX (see https://github.com/microsoft/vcpkg/issues/9029)
|
||||
self.bootstrapEnv['CXXFLAGS'] = '-D_CTERMID_H_'
|
||||
if usePrebuilt:
|
||||
self.prebuiltArchive = self.assets_url + "/dependencies/vcpkg/builds/vcpkg-osx.tgz%3FversionId=6JrIMTdvpBF3MAsjA92BMkO79Psjzs6Z"
|
||||
else:
|
||||
self.exe = os.path.join(self.path, 'vcpkg')
|
||||
self.bootstrapCmds = [ os.path.join(self.path, 'bootstrap-vcpkg.sh') ]
|
||||
self.bootstrapCmds = [ os.path.join(self.path, 'bootstrap-vcpkg.sh'), '-disableMetrics' ]
|
||||
self.vcpkgUrl = self.assets_url + '/dependencies/vcpkg/builds/vcpkg-linux-client.tgz%3FversionId=y7mct0gFicEXz5hJy3KROBugcLR56YWf'
|
||||
self.vcpkgHash = '6a1ce47ef6621e699a4627e8821ad32528c82fce62a6939d35b205da2d299aaa405b5f392df4a9e5343dd6a296516e341105fbb2dd8b48864781d129d7fba10d'
|
||||
self.hostTriplet = 'x64-linux'
|
||||
|
@ -206,6 +215,19 @@ endif()
|
|||
print(actualCommands)
|
||||
hifi_utils.executeSubprocess(actualCommands, folder=self.path, env=self.buildEnv)
|
||||
|
||||
def copyTripletForBuildType(self, triplet):
|
||||
print('Copying triplet ' + triplet + ' to have build type ' + self.vcpkgBuildType)
|
||||
tripletPath = os.path.join(self.path, 'triplets', triplet + '.cmake')
|
||||
tripletForBuildTypePath = os.path.join(self.path, 'triplets', self.getTripletWithBuildType(triplet) + '.cmake')
|
||||
shutil.copy(tripletPath, tripletForBuildTypePath)
|
||||
with open(tripletForBuildTypePath, "a") as tripletForBuildTypeFile:
|
||||
tripletForBuildTypeFile.write("set(VCPKG_BUILD_TYPE " + self.vcpkgBuildType + ")\n")
|
||||
|
||||
def getTripletWithBuildType(self, triplet):
|
||||
if (not self.vcpkgBuildType):
|
||||
return triplet
|
||||
return triplet + '-' + self.vcpkgBuildType
|
||||
|
||||
def setupDependencies(self, qt=None):
|
||||
if self.prebuiltArchive:
|
||||
if not os.path.isfile(self.prebuildTagFile):
|
||||
|
@ -224,12 +246,16 @@ endif()
|
|||
self.setupAndroidDependencies()
|
||||
|
||||
print("Installing host tools")
|
||||
self.run(['install', '--triplet', self.hostTriplet, 'hifi-host-tools'])
|
||||
if (self.vcpkgBuildType):
|
||||
self.copyTripletForBuildType(self.hostTriplet)
|
||||
self.run(['install', '--triplet', self.getTripletWithBuildType(self.hostTriplet), 'hifi-host-tools'])
|
||||
|
||||
# If not android, install the hifi-client-deps libraries
|
||||
if not self.args.android:
|
||||
print("Installing build dependencies")
|
||||
self.run(['install', '--triplet', self.triplet, 'hifi-client-deps'])
|
||||
if (self.vcpkgBuildType):
|
||||
self.copyTripletForBuildType(self.triplet)
|
||||
self.run(['install', '--triplet', self.getTripletWithBuildType(self.triplet), 'hifi-client-deps'])
|
||||
|
||||
def cleanBuilds(self):
|
||||
if self.noClean:
|
||||
|
@ -240,6 +266,12 @@ endif()
|
|||
print("Wiping build trees")
|
||||
shutil.rmtree(builddir, ignore_errors=True)
|
||||
|
||||
# Removes large files used to build the vcpkg, for CI purposes.
|
||||
def cleanupDevelopmentFiles(self):
|
||||
shutil.rmtree(os.path.join(self.path, "downloads"), ignore_errors=True)
|
||||
shutil.rmtree(os.path.join(self.path, "packages"), ignore_errors=True)
|
||||
|
||||
|
||||
def setupAndroidDependencies(self):
|
||||
# vcpkg prebuilt
|
||||
if not os.path.isdir(os.path.join(self.path, 'installed', 'arm64-android')):
|
||||
|
@ -276,12 +308,32 @@ endif()
|
|||
with open(self.prebuildTagFile, 'w') as f:
|
||||
f.write(self.tagContents)
|
||||
|
||||
def fixupCmakeScript(self):
|
||||
cmakeScript = os.path.join(self.path, 'scripts/buildsystems/vcpkg.cmake')
|
||||
newCmakeScript = cmakeScript + '.new'
|
||||
isFileChanged = False
|
||||
removalPrefix = "set(VCPKG_TARGET_TRIPLET "
|
||||
# Open original file in read only mode and dummy file in write mode
|
||||
with open(cmakeScript, 'r') as read_obj, open(newCmakeScript, 'w') as write_obj:
|
||||
# Line by line copy data from original file to dummy file
|
||||
for line in read_obj:
|
||||
if not line.startswith(removalPrefix):
|
||||
write_obj.write(line)
|
||||
else:
|
||||
isFileChanged = True
|
||||
|
||||
if isFileChanged:
|
||||
shutil.move(newCmakeScript, cmakeScript)
|
||||
else:
|
||||
os.remove(newCmakeScript)
|
||||
|
||||
|
||||
def writeConfig(self):
|
||||
print("Writing cmake config to {}".format(self.configFilePath))
|
||||
# Write out the configuration for use by CMake
|
||||
cmakeScript = os.path.join(self.path, 'scripts/buildsystems/vcpkg.cmake')
|
||||
installPath = os.path.join(self.path, 'installed', self.triplet)
|
||||
toolsPath = os.path.join(self.path, 'installed', self.hostTriplet, 'tools')
|
||||
installPath = os.path.join(self.path, 'installed', self.getTripletWithBuildType(self.triplet))
|
||||
toolsPath = os.path.join(self.path, 'installed', self.getTripletWithBuildType(self.hostTriplet), 'tools')
|
||||
|
||||
cmakeTemplate = VcpkgRepo.CMAKE_TEMPLATE
|
||||
if self.args.android:
|
||||
|
@ -289,7 +341,7 @@ endif()
|
|||
cmakeTemplate += 'set(HIFI_ANDROID_PRECOMPILED "{}")\n'.format(precompiled)
|
||||
else:
|
||||
cmakeTemplate += VcpkgRepo.CMAKE_TEMPLATE_NON_ANDROID
|
||||
cmakeConfig = cmakeTemplate.format(cmakeScript, cmakeScript, installPath, toolsPath).replace('\\', '/')
|
||||
cmakeConfig = cmakeTemplate.format(cmakeScript, cmakeScript, installPath, toolsPath, self.getTripletWithBuildType(self.hostTriplet)).replace('\\', '/')
|
||||
with open(self.configFilePath, 'w') as f:
|
||||
f.write(cmakeConfig)
|
||||
|
||||
|
|
|
@ -120,50 +120,6 @@ template<> glm::uint32 forEach<glm::vec3>(const gpu::BufferView& view, std::func
|
|||
return forEachGlmVec<glm::vec3>(view, func);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
QVariant glmVecToVariant(const T& v, bool asArray /*= false*/) {
|
||||
static const auto len = T().length();
|
||||
if (asArray) {
|
||||
QVariantList list;
|
||||
for (int i = 0; i < len ; i++) {
|
||||
list << v[i];
|
||||
}
|
||||
return list;
|
||||
} else {
|
||||
QVariantMap obj;
|
||||
for (int i = 0; i < len ; i++) {
|
||||
obj[XYZW[i]] = v[i];
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
const T glmVecFromVariant(const QVariant& v) {
|
||||
auto isMap = v.type() == (QVariant::Type)QMetaType::QVariantMap;
|
||||
static const auto len = T().length();
|
||||
const auto& components = isMap ? XYZW : ZERO123;
|
||||
T result;
|
||||
QVariantMap map;
|
||||
QVariantList list;
|
||||
if (isMap) map = v.toMap(); else list = v.toList();
|
||||
for (int i = 0; i < len ; i++) {
|
||||
float value;
|
||||
if (isMap) {
|
||||
value = map.value(components[i]).toFloat();
|
||||
} else {
|
||||
value = list.value(i).toFloat();
|
||||
}
|
||||
#ifdef DEBUG_BUFFERVIEW_HELPERS
|
||||
if (value != value) { // NAN
|
||||
qWarning().nospace()<< "vec" << len << "." << components[i] << " NAN received from script.... " << v.toString();
|
||||
}
|
||||
#endif
|
||||
result[i] = value;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// QVector<T> => BufferView
|
||||
template <typename T>
|
||||
gpu::BufferView newFromVector(const QVector<T>& elements, const gpu::Element& elementType) {
|
||||
|
|
|
@ -27,8 +27,54 @@ namespace buffer_helpers {
|
|||
extern const std::array<const char*, 4> XYZW;
|
||||
extern const std::array<const char*, 4> ZERO123;
|
||||
|
||||
template <typename T> QVariant glmVecToVariant(const T& v, bool asArray = false);
|
||||
template <typename T> const T glmVecFromVariant(const QVariant& v);
|
||||
template <typename T>
|
||||
QVariant glmVecToVariant(const T& v, bool asArray = false) {
|
||||
static const auto len = T().length();
|
||||
if (asArray) {
|
||||
QVariantList list;
|
||||
for (int i = 0; i < len; i++) {
|
||||
list << v[i];
|
||||
}
|
||||
return list;
|
||||
} else {
|
||||
QVariantMap obj;
|
||||
for (int i = 0; i < len; i++) {
|
||||
obj[XYZW[i]] = v[i];
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
const T glmVecFromVariant(const QVariant& v) {
|
||||
auto isMap = v.type() == (QVariant::Type)QMetaType::QVariantMap;
|
||||
static const auto len = T().length();
|
||||
const auto& components = isMap ? XYZW : ZERO123;
|
||||
T result;
|
||||
QVariantMap map;
|
||||
QVariantList list;
|
||||
if (isMap) {
|
||||
map = v.toMap();
|
||||
} else {
|
||||
list = v.toList();
|
||||
}
|
||||
for (int i = 0; i < len; i++) {
|
||||
float value;
|
||||
if (isMap) {
|
||||
value = map.value(components[i]).toFloat();
|
||||
} else {
|
||||
value = list.value(i).toFloat();
|
||||
}
|
||||
#ifdef DEBUG_BUFFERVIEW_HELPERS
|
||||
if (value != value) { // NAN
|
||||
qWarning().nospace() << "vec" << len << "." << components[i] << " NAN received from script.... " << v.toString();
|
||||
}
|
||||
#endif
|
||||
result[i] = value;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
glm::uint32 forEachVariant(const gpu::BufferView& view, std::function<bool(glm::uint32 index, const QVariant& value)> func, const char* hint = "");
|
||||
template <typename T> glm::uint32 forEach(const gpu::BufferView& view, std::function<bool(glm::uint32 index, const T& value)> func);
|
||||
|
@ -36,7 +82,7 @@ namespace buffer_helpers {
|
|||
template <typename T> gpu::BufferView newFromVector(const QVector<T>& elements, const gpu::Element& elementType);
|
||||
template <typename T> gpu::BufferView newFromVariantList(const QVariantList& list, const gpu::Element& elementType);
|
||||
|
||||
template <typename T> QVector<T> variantToVector(const QVariant& list);
|
||||
template <typename T> QVector<T> variantToVector(const QVariant& value);
|
||||
template <typename T> QVector<T> bufferToVector(const gpu::BufferView& view, const char *hint = "");
|
||||
|
||||
// note: these do value conversions from the underlying buffer type into the template type
|
||||
|
|
|
@ -13,6 +13,13 @@ if (ANDROID)
|
|||
target_link_libraries(${TARGET_NAME} android)
|
||||
endif()
|
||||
|
||||
if (APPLE)
|
||||
find_library(FRAMEWORK_IOKIT IOKit)
|
||||
find_library(CORE_FOUNDATION CoreFoundation)
|
||||
find_library(OpenGL OpenGL)
|
||||
target_link_libraries(${TARGET_NAME} ${FRAMEWORK_IOKIT} ${CORE_FOUNDATION} ${OpenGL})
|
||||
endif()
|
||||
|
||||
target_zlib()
|
||||
target_nsight()
|
||||
target_json()
|
||||
|
|
19
prebuild.py
19
prebuild.py
|
@ -94,6 +94,8 @@ def parse_args():
|
|||
parser.add_argument('--force-build', action='store_true')
|
||||
parser.add_argument('--release-type', type=str, default="DEV", help="DEV, PR, or PRODUCTION")
|
||||
parser.add_argument('--vcpkg-root', type=str, help='The location of the vcpkg distribution')
|
||||
parser.add_argument('--vcpkg-build-type', type=str, help='Could be `release` or `debug`. By default it doesn`t set the build-type')
|
||||
parser.add_argument('--vcpkg-skip-clean', action='store_true', help='Skip the cleanup of vcpkg downloads and packages folders after vcpkg build completition.')
|
||||
parser.add_argument('--build-root', required=True, type=str, help='The location of the cmake build')
|
||||
parser.add_argument('--ports-path', type=str, default=defaultPortsPath)
|
||||
parser.add_argument('--ci-build', action='store_true', default=os.getenv('CI_BUILD') is not None)
|
||||
|
@ -113,6 +115,7 @@ def main():
|
|||
del os.environ[var]
|
||||
|
||||
args = parse_args()
|
||||
assets_url = hifi_utils.readEnviromentVariableFromFile(args.build_root, 'EXTERNAL_BUILD_ASSETS')
|
||||
|
||||
if args.ci_build:
|
||||
logging.basicConfig(datefmt='%H:%M:%S', format='%(asctime)s %(guid)s %(message)s', level=logging.INFO)
|
||||
|
@ -125,7 +128,7 @@ def main():
|
|||
if 'Windows' == system and 'CI_BUILD' in os.environ and os.environ["CI_BUILD"] == "Github":
|
||||
logger.info("Downloading NSIS")
|
||||
with timer('NSIS'):
|
||||
hifi_utils.downloadAndExtract('https://athena-public.s3.amazonaws.com/dependencies/NSIS-hifi-plugins-1.0.tgz', "C:/Program Files (x86)")
|
||||
hifi_utils.downloadAndExtract(assets_url + '/dependencies/NSIS-hifi-plugins-1.0.tgz', "C:/Program Files (x86)")
|
||||
|
||||
qtInstallPath = ''
|
||||
# If not android, install our Qt build
|
||||
|
@ -138,6 +141,11 @@ def main():
|
|||
qt.writeConfig()
|
||||
|
||||
pm = hifi_vcpkg.VcpkgRepo(args)
|
||||
if qtInstallPath != '':
|
||||
pm.writeVar('QT_CMAKE_PREFIX_PATH', qtInstallPath)
|
||||
|
||||
# Only allow one instance of the program to run at a time
|
||||
|
||||
if qtInstallPath != '':
|
||||
pm.writeVar('QT_CMAKE_PREFIX_PATH', qtInstallPath)
|
||||
|
||||
|
@ -160,7 +168,7 @@ def main():
|
|||
pm.setupDependencies(qt=qtInstallPath)
|
||||
|
||||
# wipe out the build directories (after writing the tag, since failure
|
||||
# here shouldn't invalidte the vcpkg install)
|
||||
# here shouldn't invalidate the vcpkg install)
|
||||
with timer('Cleaning builds'):
|
||||
pm.cleanBuilds()
|
||||
|
||||
|
@ -175,6 +183,13 @@ def main():
|
|||
qtPath = os.path.join(pm.androidPackagePath, 'qt')
|
||||
hifi_android.QtPackager(appPath, qtPath).bundle()
|
||||
|
||||
# Fixup the vcpkg cmake to not reset VCPKG_TARGET_TRIPLET
|
||||
pm.fixupCmakeScript()
|
||||
|
||||
if not args.vcpkg_skip_clean:
|
||||
# Cleanup downloads and packages folders in vcpkg to make it smaller for CI
|
||||
pm.cleanupDevelopmentFiles()
|
||||
|
||||
# Write the vcpkg config to the build directory last
|
||||
with timer('Writing configuration'):
|
||||
pm.writeConfig()
|
||||
|
|
77
tools/ci-scripts/upload_to_publish_server.py
Normal file
77
tools/ci-scripts/upload_to_publish_server.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
import os
|
||||
import json
|
||||
from hashlib import sha256
|
||||
import http.client
|
||||
from http import HTTPStatus
|
||||
import time
|
||||
import struct
|
||||
import random
|
||||
import glob
|
||||
|
||||
FILE_READ_BUFFER = 4096
|
||||
|
||||
path = os.path.join(os.getcwd(), os.environ['ARTIFACT_PATTERN'])
|
||||
files = glob.glob(path, recursive=False)
|
||||
uploading_files = []
|
||||
for archive_file in files:
|
||||
file = open(archive_file, 'rb')
|
||||
sha256_hash = sha256()
|
||||
file.seek(0, 0)
|
||||
for byte_block in iter(lambda: file.read(FILE_READ_BUFFER), b""):
|
||||
sha256_hash.update(byte_block)
|
||||
|
||||
checksum = sha256_hash.hexdigest()
|
||||
|
||||
uploading_files.append({
|
||||
"filename": os.path.basename(archive_file),
|
||||
"sha256_checksum": checksum,
|
||||
"file_length": file.tell()
|
||||
})
|
||||
file.close()
|
||||
|
||||
print("BuildFileHashes: " + json.dumps(uploading_files))
|
||||
|
||||
file_contents = []
|
||||
file_sizes = []
|
||||
|
||||
for archiveFile in files:
|
||||
file = open(archiveFile, 'rb')
|
||||
file_data = file.read()
|
||||
file_sizes.append(len(file_data))
|
||||
file_contents.append(file_data)
|
||||
file.close()
|
||||
|
||||
conn = http.client.HTTPSConnection("build-uploader.vircadia.com")
|
||||
|
||||
context = json.loads(os.environ['GITHUB_CONTEXT'])
|
||||
|
||||
owner_and_repository = context["repository"].split("/")
|
||||
owner = owner_and_repository[0]
|
||||
repository = owner_and_repository[1]
|
||||
|
||||
headers = {
|
||||
"owner": owner,
|
||||
"repo": repository,
|
||||
"commit_hash": context["event"]["pull_request"]["head"]["sha"],
|
||||
"pull_number": context["event"]["number"],
|
||||
"job_name": os.environ["JOB_NAME"],
|
||||
"run_id": context["run_id"],
|
||||
"file_sizes": ','.join(str(e) for e in file_sizes)
|
||||
}
|
||||
|
||||
concat_file_body = b''.join(file_contents)
|
||||
|
||||
print("Total files size: " + str(len(concat_file_body)))
|
||||
|
||||
conn.request("PUT", "/", body=concat_file_body, headers=headers)
|
||||
response = conn.getresponse()
|
||||
|
||||
EXIT_CODE_OK = 0
|
||||
EXIT_CODE_ERROR = 1
|
||||
|
||||
if (response.status == HTTPStatus.OK):
|
||||
print("response: ", json.loads(response.read()))
|
||||
exit(EXIT_CODE_OK)
|
||||
else:
|
||||
print(response.status, response.reason, response.read())
|
||||
exit(EXIT_CODE_ERROR)
|
Loading…
Reference in a new issue