From bbba7d1b1d7115c31fc9ad172d1af1b67ff93c8e Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 30 Oct 2018 07:57:55 -0700 Subject: [PATCH 1/8] Updating build notes --- BUILD.md | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/BUILD.md b/BUILD.md index 4198c39d1a..0ba89ffd4b 100644 --- a/BUILD.md +++ b/BUILD.md @@ -10,14 +10,11 @@ - [cmake](https://cmake.org/download/): 3.9 - [Qt](https://www.qt.io/download-open-source): 5.10.1 - [Python](https://www.python.org/downloads/): 3.6 or higher -- [OpenSSL](https://www.openssl.org/): Use the latest available 1.0 version (**NOT** 1.1) of OpenSSL to avoid security vulnerabilities. -- [VHACD](https://github.com/virneo/v-hacd)(clone this repository)(Optional) ### CMake External Project Dependencies These dependencies need not be installed manually. They are automatically downloaded on the platforms where they are required. - [Bullet Physics Engine](https://github.com/bulletphysics/bullet3/releases): 2.83 -- [GLEW](http://glew.sourceforge.net/): 1.13 - [glm](https://glm.g-truc.net/0.9.8/index.html): 0.9.8 - [Oculus SDK](https://developer.oculus.com/downloads/): 1.11 (Win32) / 0.5 (Mac) - [OpenVR](https://github.com/ValveSoftware/openvr): 1.0.6 (Win32 only) @@ -25,9 +22,10 @@ These dependencies need not be installed manually. They are automatically downlo - [QuaZip](https://sourceforge.net/projects/quazip/files/quazip/): 0.7.3 - [SDL2](https://www.libsdl.org/download-2.0.php): 2.0.3 - [Intel Threading Building Blocks](https://www.threadingbuildingblocks.org/): 4.3 -- [Sixense](http://sixense.com/): 071615 +- [vcpkg](https://github.com/highfidelity/vcpkg): +- [VHACD](https://github.com/virneo/v-hacd) - [zlib](http://www.zlib.net/): 1.28 (Win32 only) -- nVidia Texture Tools: 2.1 +- [nvtt](https://github.com/highfidelity/nvidia-texture-tools): 2.1.1 (customized) The above dependencies will be downloaded, built, linked and included automatically by CMake where we require them. The CMakeLists files that handle grabbing each of the following external dependencies can be found in the [cmake/externals folder](cmake/externals). The resulting downloads, source files and binaries will be placed in the `build/ext` folder in each of the subfolders for each external project. @@ -82,9 +80,22 @@ In the examples below the variable $NAME would be replaced by the name of the de * $NAME_ROOT_DIR - set this variable in your ENV * HIFI_LIB_DIR - set this variable in your ENV to your High Fidelity lib folder, should contain a folder '$name' - ### Optional Components +#### Build Options + +The following build options can be used when running CMake + +* BUILD_CLIENT +* BUILD_SERVER +* BUILD_TESTS +* BUILD_TOOLS + +#### Developer Build Options + +* USE_GLES +* DISABLE_UI + #### Devices You can support external input/output devices such as Leap Motion, MIDI, and more by adding each individual SDK in the visible building path. Refer to the readme file available in each device folder in [interface/external/](interface/external) for the detailed explanation of the requirements to use the device. From caf952c2521213a7f20e10e7cf6bd654a34c2aa7 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sun, 4 Nov 2018 14:36:59 -0800 Subject: [PATCH 2/8] Fix duplicated window member --- libraries/gl/src/gl/Context.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/gl/src/gl/Context.h b/libraries/gl/src/gl/Context.h index 05cb361725..1040868c78 100644 --- a/libraries/gl/src/gl/Context.h +++ b/libraries/gl/src/gl/Context.h @@ -56,6 +56,7 @@ namespace gl { void release(); virtual ~Context(); + QWindow* getWindow() const { return _window; } void clear(); void setWindow(QWindow* window); bool makeCurrent(); @@ -80,8 +81,6 @@ namespace gl { class OffscreenContext : public Context { using Parent = Context; - protected: - QWindow* _window { nullptr }; public: virtual ~OffscreenContext(); void create(QOpenGLContext* shareContext = nullptr) override; From 8c4237b5201b22f3f4577ccd0be0250cb1438da0 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sun, 4 Nov 2018 14:38:01 -0800 Subject: [PATCH 3/8] Fix warnings --- domain-server/src/AssetsBackupHandler.cpp | 9 +++++++++ domain-server/src/ContentSettingsBackupHandler.cpp | 11 +++++++++++ domain-server/src/EntitiesBackupHandler.cpp | 9 +++++++++ .../src/RenderableModelEntityItem.cpp | 1 - libraries/fbx/src/FBXReader_Mesh.cpp | 4 ++-- 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/domain-server/src/AssetsBackupHandler.cpp b/domain-server/src/AssetsBackupHandler.cpp index 6bcabc0bf1..b3ba74a985 100644 --- a/domain-server/src/AssetsBackupHandler.cpp +++ b/domain-server/src/AssetsBackupHandler.cpp @@ -15,9 +15,18 @@ #include #include +#if !defined(__clang__) && defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsuggest-override" +#endif + #include #include +#if !defined(__clang__) && defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + #include #include #include diff --git a/domain-server/src/ContentSettingsBackupHandler.cpp b/domain-server/src/ContentSettingsBackupHandler.cpp index 8ffd25b7a4..de7669b6a5 100644 --- a/domain-server/src/ContentSettingsBackupHandler.cpp +++ b/domain-server/src/ContentSettingsBackupHandler.cpp @@ -11,8 +11,19 @@ #include "ContentSettingsBackupHandler.h" +#if !defined(__clang__) && defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsuggest-override" +#endif + #include #include +#include + +#if !defined(__clang__) && defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + ContentSettingsBackupHandler::ContentSettingsBackupHandler(DomainServerSettingsManager& domainServerSettingsManager) : _settingsManager(domainServerSettingsManager) diff --git a/domain-server/src/EntitiesBackupHandler.cpp b/domain-server/src/EntitiesBackupHandler.cpp index 599a730107..90a066036d 100644 --- a/domain-server/src/EntitiesBackupHandler.cpp +++ b/domain-server/src/EntitiesBackupHandler.cpp @@ -13,9 +13,18 @@ #include +#if !defined(__clang__) && defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsuggest-override" +#endif + #include #include +#if !defined(__clang__) && defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + #include EntitiesBackupHandler::EntitiesBackupHandler(QString entitiesFilePath, QString entitiesReplacementFilePath) : diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index f60bf20e3d..9a68f81b66 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -510,7 +510,6 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& shapeInfo) { // we backtranslate by the registration offset so we can apply that offset to the shapeInfo later localTransforms.push_back(invRegistraionOffset * jointMatrix * cluster.inverseBindMatrix); } else { - glm::mat4 identity; localTransforms.push_back(invRegistraionOffset); } totalNumVertices += mesh.vertices.size(); diff --git a/libraries/fbx/src/FBXReader_Mesh.cpp b/libraries/fbx/src/FBXReader_Mesh.cpp index e098aff99a..5b1c708378 100644 --- a/libraries/fbx/src/FBXReader_Mesh.cpp +++ b/libraries/fbx/src/FBXReader_Mesh.cpp @@ -397,7 +397,7 @@ ExtractedMesh FBXReader::extractMesh(const FBXNode& object, unsigned int& meshIn } // enumerate the vertices and construct the extracted mesh - for (int i = 0; i < numVertices; ++i) { + for (uint32_t i = 0; i < numVertices; ++i) { draco::PointIndex vertexIndex(i); if (positionAttribute) { @@ -453,7 +453,7 @@ ExtractedMesh FBXReader::extractMesh(const FBXNode& object, unsigned int& meshIn } } - for (int i = 0; i < dracoMesh->num_faces(); ++i) { + for (uint32_t i = 0; i < dracoMesh->num_faces(); ++i) { // grab the material ID and texture ID for this face, if we have it auto& dracoFace = dracoMesh->face(draco::FaceIndex(i)); auto& firstCorner = dracoFace[0]; From 8c4f0ec7741b31d69f6dc444a7da6202eebd2413 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sun, 4 Nov 2018 14:38:24 -0800 Subject: [PATCH 4/8] Vcpkg migration --- CMakeLists.txt | 44 +- android/app/build.gradle | 1 - android/build.gradle | 44 +- .../src/audio/AudioMixerClientData.cpp | 2 +- cmake/externals/boostconfig/CMakeLists.txt | 20 - cmake/externals/bullet/CMakeLists.txt | 85 -- cmake/externals/draco/CMakeLists.txt | 41 - cmake/externals/etc2comp/CMakeLists.txt | 58 - cmake/externals/gli/CMakeLists.txt | 21 - cmake/externals/glm/CMakeLists.txt | 21 - cmake/externals/glslang/CMakeLists.txt | 42 - cmake/externals/json/CMakeLists.txt | 22 - cmake/externals/nvtt/CMakeLists.txt | 87 -- cmake/externals/openvr/CMakeLists.txt | 49 - cmake/externals/quazip/CMakeLists.txt | 13 +- cmake/externals/sdl2/CMakeLists.txt | 90 -- cmake/externals/spirv_binaries/CMakeLists.txt | 34 - cmake/externals/spirv_cross/CMakeLists.txt | 35 - cmake/externals/spirv_headers/CMakeLists.txt | 18 - cmake/externals/spirv_tools/CMakeLists.txt | 33 - cmake/externals/zlib/CMakeLists.txt | 33 - cmake/macros/AutoScribeShader.cmake | 79 +- .../macros/ManuallyInstallOpenSSLForQt.cmake | 4 +- cmake/macros/TargetBullet.cmake | 1 - cmake/macros/TargetDraco.cmake | 22 +- cmake/macros/TargetEtc2Comp.cmake | 11 +- cmake/macros/TargetGli.cmake | 5 +- cmake/macros/TargetGlm.cmake | 10 +- cmake/macros/TargetJson.cmake | 5 +- cmake/macros/TargetNvtt.cmake | 13 +- cmake/macros/TargetOpenSSL.cmake | 9 +- cmake/macros/TargetOpenVR.cmake | 13 + cmake/macros/TargetSDL2.cmake | 13 +- cmake/macros/TargetTBB.cmake | 13 +- cmake/macros/TargetVulkan.cmake | 14 +- cmake/macros/TargetZlib.cmake | 11 +- cmake/modules/FindDraco.cmake | 30 - cmake/modules/FindEtc2Comp.cmake | 37 - cmake/modules/FindGLEW.cmake | 33 - cmake/modules/FindJSON.cmake | 19 - cmake/modules/FindOpenSSL.cmake | 174 --- cmake/modules/FindOpenVR.cmake | 21 - cmake/modules/FindSDL2.cmake | 224 ---- cmake/ports/bullet3/CONTROL | 3 + cmake/ports/bullet3/portfile.cmake | 57 + cmake/ports/draco/CONTROL | 4 + cmake/ports/draco/portfile.cmake | 56 + cmake/ports/etc2comp/CONTROL | 3 + cmake/ports/etc2comp/portfile.cmake | 39 + cmake/ports/gli/CONTROL | 4 + cmake/ports/gli/portfile.cmake | 19 + cmake/ports/glm/CONTROL | 3 + .../ports/glm/disable_warnings_as_error.patch | 13 + cmake/ports/glm/portfile.cmake | 32 + cmake/ports/glslang/CONTROL | 3 + cmake/ports/glslang/copyright | 35 + cmake/ports/glslang/portfile.cmake | 26 + cmake/ports/hifi-client-deps/CONTROL | 4 + cmake/ports/hifi-client-deps/portfile.cmake | 1 + cmake/ports/hifi-deps/CONTROL | 4 + cmake/ports/hifi-deps/portfile.cmake | 1 + cmake/ports/hifi-host-tools/CONTROL | 4 + cmake/ports/hifi-host-tools/portfile.cmake | 1 + cmake/ports/hifi-scribe/CONTROL | 3 + cmake/ports/hifi-scribe/portfile.cmake | 19 + cmake/ports/nlohmann-json/CONTROL | 3 + cmake/ports/nlohmann-json/portfile.cmake | 18 + cmake/ports/nvtt/CONTROL | 3 + cmake/ports/nvtt/portfile.cmake | 39 + cmake/ports/openssl-android/CONTROL | 3 + cmake/ports/openssl-android/LICENSE.txt | 125 ++ cmake/ports/openssl-android/portfile.cmake | 24 + cmake/ports/openssl-unix/CMakeLists.txt | 136 +++ cmake/ports/openssl-unix/CONTROL | 3 + .../ConfigureIncludeQuotesFix.patch | 13 + .../EmbedSymbolsInStaticLibsZ7.patch | 25 + cmake/ports/openssl-unix/STRINGIFYPatch.patch | 23 + cmake/ports/openssl-unix/portfile.cmake | 63 + cmake/ports/openssl-unix/remove-deps.cmake | 7 + cmake/ports/openssl-unix/usage | 4 + .../openssl-unix/vcpkg-cmake-wrapper.cmake | 10 + cmake/ports/openssl-windows/CONTROL | 3 + .../ConfigureIncludeQuotesFix.patch | 13 + .../EmbedSymbolsInStaticLibsZ7.patch | 25 + .../openssl-windows/STRINGIFYPatch.patch | 23 + cmake/ports/openssl-windows/portfile.cmake | 163 +++ cmake/ports/openssl-windows/usage | 4 + cmake/ports/openssl/CONTROL | 4 + cmake/ports/openssl/portfile.cmake | 2 + cmake/ports/openssl/usage | 4 + cmake/ports/openvr/CONTROL | 3 + cmake/ports/openvr/portfile.cmake | 47 + cmake/ports/sdl2/CONTROL | 3 + cmake/ports/sdl2/enable-winrt-cmake.patch | 206 ++++ .../export-symbols-only-in-shared-build.patch | 24 + cmake/ports/sdl2/portfile.cmake | 79 ++ ...01-Do-not-generate-build-version.inc.patch | 30 + cmake/ports/shaderc/CMakeLists.txt | 31 + cmake/ports/shaderc/CMakeLists_spirv.txt | 8 + cmake/ports/shaderc/CONTROL | 4 + cmake/ports/shaderc/build-version.inc | 3 + cmake/ports/shaderc/portfile.cmake | 49 + cmake/ports/spirv-cross/CONTROL | 3 + cmake/ports/spirv-cross/portfile.cmake | 33 + cmake/ports/spirv-tools/CONTROL | 3 + cmake/ports/spirv-tools/portfile.cmake | 43 + cmake/ports/tbb/CMakeLists.txt | 18 + cmake/ports/tbb/CONTROL | 3 + cmake/ports/tbb/portfile.cmake | 86 ++ cmake/ports/tbb/usage | 4 + cmake/ports/vulkanmemoryallocator/CONTROL | 3 + .../vulkanmemoryallocator/portfile.cmake | 14 + cmake/ports/zlib/CONTROL | 3 + cmake/ports/zlib/LICENSE | 20 + .../cmake_dont_build_more_than_needed.patch | 42 + cmake/ports/zlib/portfile.cmake | 47 + cmake/ports/zlib/usage | 4 + domain-server/CMakeLists.txt | 26 +- interface/CMakeLists.txt | 2 - interface/src/Util.cpp | 2 +- .../audio/src/AudioInjectorLocalBuffer.h | 2 +- libraries/baking/CMakeLists.txt | 5 +- .../graphics/src/graphics/BufferViewHelpers.h | 1 - libraries/image/src/image/Image.cpp | 4 +- libraries/networking/src/udt/SequenceNumber.h | 2 +- libraries/render-utils/src/LightStage.cpp | 3 +- libraries/shaders/src/shaders/Shaders.cpp | 2 +- plugins/hifiSdl2/src/Joystick.h | 2 +- plugins/hifiSdl2/src/SDL2Manager.h | 2 +- plugins/oculus/CMakeLists.txt | 3 - plugins/openvr/CMakeLists.txt | 9 +- prebuild.py | 249 ++++ tests-manual/controllers/CMakeLists.txt | 8 +- .../render-texture-load/src/GLIHelpers.cpp | 2 + .../render-texture-load/src/GLIHelpers.h | 5 +- tests/shaders/CMakeLists.txt | 8 + tests/shaders/src/ShaderTests.cpp | 231 ++-- tools/CMakeLists.txt | 4 +- tools/scribe/CMakeLists.txt | 8 - tools/scribe/src/TextTemplate.cpp | 1012 ----------------- tools/scribe/src/TextTemplate.h | 213 ---- tools/scribe/src/main.cpp | 400 ------- tools/shadergen.py | 30 +- 143 files changed, 2373 insertions(+), 3303 deletions(-) delete mode 100644 cmake/externals/boostconfig/CMakeLists.txt delete mode 100644 cmake/externals/bullet/CMakeLists.txt delete mode 100644 cmake/externals/draco/CMakeLists.txt delete mode 100644 cmake/externals/etc2comp/CMakeLists.txt delete mode 100644 cmake/externals/gli/CMakeLists.txt delete mode 100644 cmake/externals/glm/CMakeLists.txt delete mode 100644 cmake/externals/glslang/CMakeLists.txt delete mode 100644 cmake/externals/json/CMakeLists.txt delete mode 100644 cmake/externals/nvtt/CMakeLists.txt delete mode 100644 cmake/externals/openvr/CMakeLists.txt delete mode 100644 cmake/externals/sdl2/CMakeLists.txt delete mode 100644 cmake/externals/spirv_binaries/CMakeLists.txt delete mode 100644 cmake/externals/spirv_cross/CMakeLists.txt delete mode 100644 cmake/externals/spirv_headers/CMakeLists.txt delete mode 100644 cmake/externals/spirv_tools/CMakeLists.txt delete mode 100644 cmake/externals/zlib/CMakeLists.txt create mode 100644 cmake/macros/TargetOpenVR.cmake delete mode 100644 cmake/modules/FindDraco.cmake delete mode 100644 cmake/modules/FindEtc2Comp.cmake delete mode 100644 cmake/modules/FindGLEW.cmake delete mode 100644 cmake/modules/FindJSON.cmake delete mode 100644 cmake/modules/FindOpenSSL.cmake delete mode 100644 cmake/modules/FindOpenVR.cmake delete mode 100644 cmake/modules/FindSDL2.cmake create mode 100644 cmake/ports/bullet3/CONTROL create mode 100644 cmake/ports/bullet3/portfile.cmake create mode 100644 cmake/ports/draco/CONTROL create mode 100644 cmake/ports/draco/portfile.cmake create mode 100644 cmake/ports/etc2comp/CONTROL create mode 100644 cmake/ports/etc2comp/portfile.cmake create mode 100644 cmake/ports/gli/CONTROL create mode 100644 cmake/ports/gli/portfile.cmake create mode 100644 cmake/ports/glm/CONTROL create mode 100644 cmake/ports/glm/disable_warnings_as_error.patch create mode 100644 cmake/ports/glm/portfile.cmake create mode 100644 cmake/ports/glslang/CONTROL create mode 100644 cmake/ports/glslang/copyright create mode 100644 cmake/ports/glslang/portfile.cmake create mode 100644 cmake/ports/hifi-client-deps/CONTROL create mode 100644 cmake/ports/hifi-client-deps/portfile.cmake create mode 100644 cmake/ports/hifi-deps/CONTROL create mode 100644 cmake/ports/hifi-deps/portfile.cmake create mode 100644 cmake/ports/hifi-host-tools/CONTROL create mode 100644 cmake/ports/hifi-host-tools/portfile.cmake create mode 100644 cmake/ports/hifi-scribe/CONTROL create mode 100644 cmake/ports/hifi-scribe/portfile.cmake create mode 100644 cmake/ports/nlohmann-json/CONTROL create mode 100644 cmake/ports/nlohmann-json/portfile.cmake create mode 100644 cmake/ports/nvtt/CONTROL create mode 100644 cmake/ports/nvtt/portfile.cmake create mode 100644 cmake/ports/openssl-android/CONTROL create mode 100644 cmake/ports/openssl-android/LICENSE.txt create mode 100644 cmake/ports/openssl-android/portfile.cmake create mode 100644 cmake/ports/openssl-unix/CMakeLists.txt create mode 100644 cmake/ports/openssl-unix/CONTROL create mode 100644 cmake/ports/openssl-unix/ConfigureIncludeQuotesFix.patch create mode 100644 cmake/ports/openssl-unix/EmbedSymbolsInStaticLibsZ7.patch create mode 100644 cmake/ports/openssl-unix/STRINGIFYPatch.patch create mode 100644 cmake/ports/openssl-unix/portfile.cmake create mode 100644 cmake/ports/openssl-unix/remove-deps.cmake create mode 100644 cmake/ports/openssl-unix/usage create mode 100644 cmake/ports/openssl-unix/vcpkg-cmake-wrapper.cmake create mode 100644 cmake/ports/openssl-windows/CONTROL create mode 100644 cmake/ports/openssl-windows/ConfigureIncludeQuotesFix.patch create mode 100644 cmake/ports/openssl-windows/EmbedSymbolsInStaticLibsZ7.patch create mode 100644 cmake/ports/openssl-windows/STRINGIFYPatch.patch create mode 100644 cmake/ports/openssl-windows/portfile.cmake create mode 100644 cmake/ports/openssl-windows/usage create mode 100644 cmake/ports/openssl/CONTROL create mode 100644 cmake/ports/openssl/portfile.cmake create mode 100644 cmake/ports/openssl/usage create mode 100644 cmake/ports/openvr/CONTROL create mode 100644 cmake/ports/openvr/portfile.cmake create mode 100644 cmake/ports/sdl2/CONTROL create mode 100644 cmake/ports/sdl2/enable-winrt-cmake.patch create mode 100644 cmake/ports/sdl2/export-symbols-only-in-shared-build.patch create mode 100644 cmake/ports/sdl2/portfile.cmake create mode 100644 cmake/ports/shaderc/0001-Do-not-generate-build-version.inc.patch create mode 100644 cmake/ports/shaderc/CMakeLists.txt create mode 100644 cmake/ports/shaderc/CMakeLists_spirv.txt create mode 100644 cmake/ports/shaderc/CONTROL create mode 100644 cmake/ports/shaderc/build-version.inc create mode 100644 cmake/ports/shaderc/portfile.cmake create mode 100644 cmake/ports/spirv-cross/CONTROL create mode 100644 cmake/ports/spirv-cross/portfile.cmake create mode 100644 cmake/ports/spirv-tools/CONTROL create mode 100644 cmake/ports/spirv-tools/portfile.cmake create mode 100644 cmake/ports/tbb/CMakeLists.txt create mode 100644 cmake/ports/tbb/CONTROL create mode 100644 cmake/ports/tbb/portfile.cmake create mode 100644 cmake/ports/tbb/usage create mode 100644 cmake/ports/vulkanmemoryallocator/CONTROL create mode 100644 cmake/ports/vulkanmemoryallocator/portfile.cmake create mode 100644 cmake/ports/zlib/CONTROL create mode 100644 cmake/ports/zlib/LICENSE create mode 100644 cmake/ports/zlib/cmake_dont_build_more_than_needed.patch create mode 100644 cmake/ports/zlib/portfile.cmake create mode 100644 cmake/ports/zlib/usage create mode 100644 prebuild.py delete mode 100755 tools/scribe/CMakeLists.txt delete mode 100755 tools/scribe/src/TextTemplate.cpp delete mode 100755 tools/scribe/src/TextTemplate.h delete mode 100755 tools/scribe/src/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 6120e27b75..daed46678a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,22 +7,36 @@ else() cmake_minimum_required(VERSION 3.2) endif() -# squelch the Policy CMP0074 warning without requiring an update to cmake 3.12. -if ((${CMAKE_MAJOR_VERSION} EQUAL 3 AND ${CMAKE_MINOR_VERSION} GREATER 11) OR ${CMAKE_MAJOR_VERSION} GREATER 3) - cmake_policy(SET CMP0074 NEW) +include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/macros/TargetPython.cmake") +target_python() + +if (HIFI_ANDROID ) + execute_process( + COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_CURRENT_SOURCE_DIR}/prebuild.py --android --build-root ${CMAKE_BINARY_DIR} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) +else() + execute_process( + COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_CURRENT_SOURCE_DIR}/prebuild.py --build-root ${CMAKE_BINARY_DIR} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) + # squelch the Policy CMP0074 warning without requiring an update to cmake 3.12. + if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.12) + cmake_policy(SET CMP0074 NEW) + endif() endif() +if(NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg.cmake") + message(FATAL_ERROR "vcpkg configuration missing.") +endif() + +include("${CMAKE_BINARY_DIR}/vcpkg.cmake") project(hifi) - include("cmake/init.cmake") - include("cmake/compiler.cmake") -if (BUILD_SCRIBE_ONLY) - add_subdirectory(tools/scribe) - add_subdirectory(tools/shader_reflect) - return() -endif() +add_paths_to_fixup_libs(${VKPKG_INSTALL_ROOT}/bin) +add_paths_to_fixup_libs(${VKPKG_INSTALL_ROOT}/debug/bin) if (NOT DEFINED CLIENT_ONLY) set(CLIENT_ONLY 0) @@ -40,7 +54,8 @@ endif() set(BUILD_CLIENT_OPTION ON) set(BUILD_SERVER_OPTION ON) -set(BUILD_TESTS_OPTION ON) +set(BUILD_TESTS_OPTION OFF) +set(BUILD_MANUAL_TESTS_OPTION ${BUILD_TESTS_OPTION}) set(BUILD_TOOLS_OPTION ON) set(BUILD_INSTALLER_OPTION ON) set(GLES_OPTION OFF) @@ -77,6 +92,7 @@ endif() option(BUILD_CLIENT "Build client components" ${BUILD_CLIENT_OPTION}) option(BUILD_SERVER "Build server components" ${BUILD_SERVER_OPTION}) option(BUILD_TESTS "Build tests" ${BUILD_TESTS_OPTION}) +option(BUILD_MANUAL_TESTS "Build manual tests" ${BUILD_MANUAL_TESTS_OPTION}) option(BUILD_TOOLS "Build tools" ${BUILD_TOOLS_OPTION}) option(BUILD_INSTALLER "Build installer" ${BUILD_INSTALLER_OPTION}) option(USE_GLES "Use OpenGL ES" ${GLES_OPTION}) @@ -144,6 +160,8 @@ list(APPEND CMAKE_PREFIX_PATH "${QT_CMAKE_PREFIX_PATH}") find_package( Threads ) add_definitions(-DGLM_FORCE_RADIANS) +add_definitions(-DGLM_ENABLE_EXPERIMENTAL) +add_definitions(-DGLM_FORCE_CTOR_INIT) set(HIFI_LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libraries") set(EXTERNAL_PROJECT_PREFIX "project") @@ -191,7 +209,9 @@ if (BUILD_TESTS) include(CTest) enable_testing() add_subdirectory(tests) - add_subdirectory(tests-manual) + if (BUILD_MANUAL_TESTS) + add_subdirectory(tests-manual) + endif() endif() if (BUILD_INSTALLER) diff --git a/android/app/build.gradle b/android/app/build.gradle index 0136736dc3..c04bf37438 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -23,7 +23,6 @@ android { '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_shared', '-DQT_CMAKE_PREFIX_PATH=' + HIFI_ANDROID_PRECOMPILED + '/qt/lib/cmake', - '-DNATIVE_SCRIBE=' + HIFI_ANDROID_PRECOMPILED + '/scribe' + EXEC_SUFFIX, '-DHIFI_ANDROID_PRECOMPILED=' + HIFI_ANDROID_PRECOMPILED, '-DRELEASE_NUMBER=' + RELEASE_NUMBER, '-DRELEASE_TYPE=' + RELEASE_TYPE, diff --git a/android/build.gradle b/android/build.gradle index aafb96689e..e22c2d877f 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -106,11 +106,6 @@ def packages = [ versionId: 'r5Zran.JSCtvrrB6Q4KaqfIoALPw3lYY', checksum: 'a8ee8584cf1ccd34766c7ddd9d5e5449', ], - glm: [ - file: 'glm-0.9.8.5-patched.tgz', - versionId: 'cskfMoJrFlAeqI3WPxemyO_Cxt7rT9EJ', - checksum: '067b5fe16b220b5b1a1039ba51b062ae', - ], gvr: [ file: 'gvrsdk_v1.101.0.tgz', versionId: 'nqBV_j81Uc31rC7bKIrlya_Hah4v3y5r', @@ -161,21 +156,6 @@ def packages = [ ] ] -def scribeLocalFile='scribe' + EXEC_SUFFIX -def scribeFile='scribe_linux_x86_64' -def scribeChecksum='4635c28192724281d2367ce9e94380ab' -def scribeVersion='mPAY_N846oZH1tPY1bwChB_hzqkiYyoC' - -if (Os.isFamily(Os.FAMILY_MAC)) { - scribeFile = 'scribe_osx_x86_64' - scribeChecksum='1ead61c285d265eba9a5ef91ae3b7c26' - scribeVersion='4TAXWdo9fviw60N2wUA8HNyQ9TabjZa3' -} else if (Os.isFamily(Os.FAMILY_WINDOWS)) { - scribeFile = 'scribe_win32_x86_64.exe' - scribeChecksum='9c29a62595daf4844f95f6744d568c15' - scribeVersion='DUoxjufeX8ZAIVRBKRczWTuZwT13enTv' -} - def options = [ files: new TreeSet(), features: new HashSet(), @@ -434,28 +414,6 @@ task copyDependencies(dependsOn: [ extractDependencies ]) { } } -task downloadScribe(type: Download) { - src baseUrl + scribeFile + '?versionId=' + scribeVersion - dest new File(baseFolder, scribeLocalFile) - onlyIfNewer true -} - -task verifyScribe (type: Verify, dependsOn: downloadScribe) { - src new File(baseFolder, scribeLocalFile); - checksum scribeChecksum -} - -task fixScribePermissions(type: Exec, dependsOn: verifyScribe) { - commandLine 'chmod', 'a+x', HIFI_ANDROID_PRECOMPILED + '/' + scribeLocalFile -} - -task setupScribe(dependsOn: [verifyScribe]) { } - -// On Windows, we don't need to set the executable bit, but on OSX and Unix we do -if (!Os.isFamily(Os.FAMILY_WINDOWS)) { - setupScribe.dependsOn fixScribePermissions -} - task extractGvrBinaries(dependsOn: extractDependencies) { doLast { def gvrLibFolder = new File(HIFI_ANDROID_PRECOMPILED, 'gvr/gvr-android-sdk-1.101.0/libraries'); @@ -542,7 +500,7 @@ task qtBundle { } } -task setupDependencies(dependsOn: [setupScribe, copyDependencies, extractGvrBinaries, qtBundle]) { } +task setupDependencies(dependsOn: [copyDependencies, extractGvrBinaries, qtBundle]) { } task cleanDependencies(type: Delete) { delete HIFI_ANDROID_PRECOMPILED diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 7e1420ef60..a718cdc8f9 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -13,7 +13,7 @@ #include -#include +#include #include #include diff --git a/cmake/externals/boostconfig/CMakeLists.txt b/cmake/externals/boostconfig/CMakeLists.txt deleted file mode 100644 index e33167b0ba..0000000000 --- a/cmake/externals/boostconfig/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -set(EXTERNAL_NAME boostconfig) -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -include(ExternalProject) -ExternalProject_Add( - ${EXTERNAL_NAME} - #URL https://github.com/boostorg/config/archive/boost-1.58.0.zip - URL https://public.highfidelity.com/dependencies/config-boost-1.58.0.zip - URL_MD5 42fa673bae2b7645a22736445e80eb8d - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - LOG_DOWNLOAD 1 -) - -ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/include CACHE TYPE INTERNAL) - -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") diff --git a/cmake/externals/bullet/CMakeLists.txt b/cmake/externals/bullet/CMakeLists.txt deleted file mode 100644 index ffa1c67ce3..0000000000 --- a/cmake/externals/bullet/CMakeLists.txt +++ /dev/null @@ -1,85 +0,0 @@ -set(EXTERNAL_NAME bullet) - -if (WIN32) - set(PLATFORM_CMAKE_ARGS "-DUSE_MSVC_RUNTIME_LIBRARY_DLL=1") -else () - set(PLATFORM_CMAKE_ARGS "-DBUILD_SHARED_LIBS=1") - - if (ANDROID) - list(APPEND PLATFORM_CMAKE_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" "-DANDROID_NATIVE_API_LEVEL=19") - elseif (APPLE) - list(APPEND PLATFORM_CMAKE_ARGS "-DCMAKE_INSTALL_NAME_DIR=/lib") - endif() -endif () - -include(ExternalProject) - -if (WIN32) - ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/bullet-2.88.tgz - URL_MD5 0a6876607ebe83e227427215f15946fd - CMAKE_ARGS ${PLATFORM_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX:PATH= -DBUILD_EXTRAS=0 -DINSTALL_LIBS=1 -DBUILD_BULLET3=0 -DBUILD_OPENGL3_DEMOS=0 -DBUILD_BULLET2_DEMOS=0 -DBUILD_UNIT_TESTS=0 -DUSE_GLUT=0 -DUSE_DX11=0 - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build - ) -else () - ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/bullet-2.88.tgz - URL_MD5 0a6876607ebe83e227427215f15946fd - CMAKE_ARGS ${PLATFORM_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX:PATH= -DBUILD_EXTRAS=0 -DINSTALL_LIBS=1 -DBUILD_BULLET3=0 -DBUILD_OPENGL3_DEMOS=0 -DBUILD_BULLET2_DEMOS=0 -DBUILD_UNIT_TESTS=0 -DUSE_GLUT=0 - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build - ) -endif () - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) - -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -set(BULLET_LIB_DIR "${INSTALL_DIR}/lib") - -if (APPLE OR UNIX OR ANDROID) - if (APPLE) - set(BULLET_LIB_EXT "dylib") - else () - set(BULLET_LIB_EXT "so") - endif () - - set(LIB_PREFIX "lib") -elseif (WIN32) - set(BULLET_LIB_EXT "lib") -endif () - -if (DEFINED BULLET_LIB_EXT) - set(_BULLET_LIB_PAIRS "DYNAMICS_LIBRARY\;BulletDynamics" "COLLISION_LIBRARY\;BulletCollision" "MATH_LIBRARY\;LinearMath" "SOFTBODY_LIBRARY\;BulletSoftBody") - - foreach(_LIB_PAIR ${_BULLET_LIB_PAIRS}) - list(GET _LIB_PAIR 0 _LIB_VAR_NAME) - list(GET _LIB_PAIR 1 _LIB_NAME) - - - - if (WIN32) - # on windows, we might end up with a library that ends with RelWithDebInfo if Visual Studio is building for that configuration - set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_RELEASE "${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}$<$:_RelWithDebugInfo>$<$:_MinsizeRel>.${BULLET_LIB_EXT}" CACHE FILEPATH "${_LIB_NAME} release library location") - - set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_DEBUG ${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}_Debug.${BULLET_LIB_EXT} CACHE FILEPATH "${_LIB_NAME} debug library location") - else () - set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_RELEASE ${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}.${BULLET_LIB_EXT} CACHE FILEPATH "${_LIB_NAME} release library location") - set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_DEBUG "" CACHE FILEPATH "${_LIB_NAME} debug library location") - endif () - endforeach() -endif () - -if (DEFINED ${EXTERNAL_NAME_UPPER}_DYNAMICS_LIBRARY_RELEASE) - set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${INSTALL_DIR}/include/bullet CACHE PATH "Path to bullet include directory") -endif () diff --git a/cmake/externals/draco/CMakeLists.txt b/cmake/externals/draco/CMakeLists.txt deleted file mode 100644 index 28a2177cbb..0000000000 --- a/cmake/externals/draco/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -set(EXTERNAL_NAME draco) - -if (ANDROID) - set(ANDROID_CMAKE_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" "-DANDROID_NATIVE_API_LEVEL=19") -endif () - -if (APPLE) - set(EXTRA_CMAKE_FLAGS -DCMAKE_CXX_FLAGS=-stdlib=libc++ -DCMAKE_EXE_LINKER_FLAGS=-stdlib=libc++) -endif () - -include(ExternalProject) -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/draco-1.1.0.zip - URL_MD5 208f8b04c91d5f1c73d731a3ea37c5bb - CONFIGURE_COMMAND CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=-$ ${EXTRA_CMAKE_FLAGS} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) -set(SUFFIXED_INSTALL_DIR "${INSTALL_DIR}-$") - -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SUFFIXED_INSTALL_DIR}/include CACHE PATH "List of Draco include directories") - -if (UNIX) - set(LIB_PREFIX "lib") - set(LIB_EXT "a") -elseif (WIN32) - set(LIB_EXT "lib") -endif () - -set(${EXTERNAL_NAME_UPPER}_LIBRARY ${SUFFIXED_INSTALL_DIR}/lib/${LIB_PREFIX}draco.${LIB_EXT} CACHE FILEPATH "Path to Draco release library") -set(${EXTERNAL_NAME_UPPER}_ENCODER_LIBRARY ${SUFFIXED_INSTALL_DIR}/lib/${LIB_PREFIX}dracoenc.${LIB_EXT} CACHE FILEPATH "Path to Draco encoder release library") -set(${EXTERNAL_NAME_UPPER}_DECODER_LIBRARY ${SUFFIXED_INSTALL_DIR}/lib/${LIB_PREFIX}dracodec.${LIB_EXT} CACHE FILEPATH "Path to Draco decoder release library") diff --git a/cmake/externals/etc2comp/CMakeLists.txt b/cmake/externals/etc2comp/CMakeLists.txt deleted file mode 100644 index 88ed988873..0000000000 --- a/cmake/externals/etc2comp/CMakeLists.txt +++ /dev/null @@ -1,58 +0,0 @@ -set(EXTERNAL_NAME etc2comp) - -if (ANDROID) - set(ANDROID_CMAKE_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" "-DANDROID_NATIVE_API_LEVEL=19") -endif () - -if (APPLE) - set(EXTRA_CMAKE_FLAGS -DCMAKE_CXX_FLAGS=-stdlib=libc++ -DCMAKE_EXE_LINKER_FLAGS=-stdlib=libc++) -endif () - -include(ExternalProject) -# We use a patched version of etc2comp that properly generates all the necessary mips -# See https://github.com/google/etc2comp/pull/29 -# We also use part of https://github.com/google/etc2comp/pull/1, which fixes a bug -# that would override CMAKE_CXX_FLAGS -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/etc2comp-patched.zip - URL_MD5 4c96153eb179acbe619e3d99d3330595 - CMAKE_ARGS ${ANDROID_CMAKE_ARGS} ${EXTRA_CMAKE_FLAGS} - BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build - INSTALL_COMMAND "" - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) -ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) - -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -if (WIN32 OR APPLE) - if (WIN32) - set(_LIB_FILE "EtcLib.lib") - else () - set(_LIB_FILE "libEtcLib.a") - endif () - - set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${INSTALL_DIR}/build/EtcLib/Debug/${_LIB_FILE} CACHE FILEPATH "Path to Etc2Comp debug library") - - # use generator expression to ensure the correct library is found when building different configurations in VS - set(_LIB_FOLDER "$<$:build/EtcLib/RelWithDebInfo>") - set(_LIB_FOLDER "${_LIB_FOLDER}$<$:build/EtcLib/MinSizeRel>") - set(_LIB_FOLDER "${_LIB_FOLDER}$<$,$>:build/EtcLib/Release>") - set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/${_LIB_FOLDER}/${_LIB_FILE} CACHE FILEPATH "Path to Etc2Comp release library") -else () - set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG "" CACHE FILEPATH "Path to EtcLib debug library") - set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/build/EtcLib/libEtcLib.a CACHE FILEPATH "Path to EtcLib release library") - -endif () - -set(ETC_INCLUDE_DIR ${SOURCE_DIR}/EtcLib/Etc CACHE FILEPATH "Path to Etc2Comp/Etc include directory") -set(ETCCODEC_INCLUDE_DIR ${SOURCE_DIR}/EtcLib/EtcCodec CACHE FILEPATH "Path to Etc2Comp/EtcCodec include directory") -# ETC2COMP_INCLUDE_DIRS will be set later by FindEtc2Comp diff --git a/cmake/externals/gli/CMakeLists.txt b/cmake/externals/gli/CMakeLists.txt deleted file mode 100644 index bde31cbede..0000000000 --- a/cmake/externals/gli/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -set(EXTERNAL_NAME gli) - -include(ExternalProject) -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/gli-0.8.1.0.zip - URL_MD5 00c990f59c12bbf367956ef399d6f798 - BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - LOG_DOWNLOAD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR} CACHE PATH "List of gli include directories") \ No newline at end of file diff --git a/cmake/externals/glm/CMakeLists.txt b/cmake/externals/glm/CMakeLists.txt deleted file mode 100644 index a52ddde9f5..0000000000 --- a/cmake/externals/glm/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -set(EXTERNAL_NAME glm) - -include(ExternalProject) -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/glm-0.9.8.5-patched.zip - URL_MD5 7d39ecc1cea275427534c3cfd6dd63f0 - BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH= ${EXTERNAL_ARGS} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) - -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${INSTALL_DIR}/include CACHE PATH "List of glm include directories") diff --git a/cmake/externals/glslang/CMakeLists.txt b/cmake/externals/glslang/CMakeLists.txt deleted file mode 100644 index 4f8a6edf0d..0000000000 --- a/cmake/externals/glslang/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -set(EXTERNAL_NAME glslang) -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -include(ExternalProject) - -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://github.com/KhronosGroup/glslang/archive/7.8.2853.zip - URL_MD5 4f93e3818528176c622c137fba05cbf8 - CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=-$ - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -# includes -ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) -set(SUFFIXED_INSTALL_DIR "${INSTALL_DIR}-$") - -list(APPEND INCLUDE_DIRS ${SUFFIXED_INSTALL_DIR}/include) -#list(APPEND INCLUDE_DIRS ${INSTALL_DIR}/include) -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${INCLUDE_DIRS} CACHE PATH "List of glslang include directories") -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${${EXTERNAL_NAME_UPPER}_INCLUDE_DIR} CACHE PATH "List of glslang include directories") - - -set(LIB_DIR ${SUFFIXED_INSTALL_DIR}/lib) -list(APPEND LIB_NAMES glslang HLSL OGLCompiler OSDependent SPIRV SPVRemapper) -include(SelectLibraryConfigurations) - -foreach(BASE_LIB ${LIB_NAMES}) - string(TOUPPER ${BASE_LIB} BASE_LIB_UPPER) - list(APPEND ${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE "${LIB_DIR}/${BASE_LIB}.lib") - list(APPEND ${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG "${LIB_DIR}/${BASE_LIB}d.lib") -endforeach() - -select_library_configurations(${EXTERNAL_NAME_UPPER}) - -set(${EXTERNAL_NAME_UPPER}_LIBRARY ${${EXTERNAL_NAME_UPPER}_LIBRARY} CACHE FILEPATH "Location of glslang libraries") -set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${${EXTERNAL_NAME_UPPER}_LIBRARIES} CACHE FILEPATH "Location of glslang libraries") diff --git a/cmake/externals/json/CMakeLists.txt b/cmake/externals/json/CMakeLists.txt deleted file mode 100644 index 91bdb09fc8..0000000000 --- a/cmake/externals/json/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -set(EXTERNAL_NAME json) - -include(ExternalProject) -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://hifi-public.s3.amazonaws.com/dependencies/json_3.1.2.zip - URL_MD5 94dbf6ea25a7569ddc0ab6e20862cf16 - BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH= ${EXTERNAL_ARGS} - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - LOG_DOWNLOAD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR} CACHE PATH "List of json include directories") diff --git a/cmake/externals/nvtt/CMakeLists.txt b/cmake/externals/nvtt/CMakeLists.txt deleted file mode 100644 index 2db8335cd7..0000000000 --- a/cmake/externals/nvtt/CMakeLists.txt +++ /dev/null @@ -1,87 +0,0 @@ -include(ExternalProject) -include(SelectLibraryConfigurations) - -set(EXTERNAL_NAME nvtt) - -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -if (WIN32) - ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/nvtt-win-2.1.0.hifi.zip - URL_MD5 10da01cf601f88f6dc12a6bc13c89136 - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - LOG_DOWNLOAD 1 - ) - - ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - - set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/include CACHE PATH "Location of NVTT include directory") - set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${SOURCE_DIR}/Release/x64/nvtt.lib CACHE FILEPATH "Path to NVTT release library") - set(${EXTERNAL_NAME_UPPER}_DLL_PATH "${SOURCE_DIR}/Release>/x64" CACHE PATH "Location of NVTT release DLL") -else () - - if (ANDROID) - set(ANDROID_CMAKE_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" "-DANDROID_NATIVE_API_LEVEL=19") - endif () - - ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/nvidia-texture-tools-2.1.0.hifi-83462e4.zip - URL_MD5 602776e08515b54bfa1b8dc455003f0f - CONFIGURE_COMMAND CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DNVTT_SHARED=1 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_POSITION_INDEPENDENT_CODE=ON - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - ) - - ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) - - set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${INSTALL_DIR}/include CACHE PATH "Location of NVTT include directory") - - if (APPLE) - set(_LIB_EXT "dylib") - else () - set(_LIB_EXT "so") - endif () - - set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/libnvtt.${_LIB_EXT} CACHE FILEPATH "Path to NVTT library") - - if (APPLE) - # on OS X we have to use install_name_tool to fix the paths found in the NVTT shared libraries - # so that they can be found and linked during the linking phase - set(_NVTT_LIB_DIR "${INSTALL_DIR}/lib") - - # first fix the install names of all present libraries - ExternalProject_Add_Step( - ${EXTERNAL_NAME} - change-install-name - COMMENT "Calling install_name_tool on NVTT libraries to fix install name for dylib linking" - COMMAND ${CMAKE_COMMAND} -DINSTALL_NAME_LIBRARY_DIR=${_NVTT_LIB_DIR} -P ${EXTERNAL_PROJECT_DIR}/OSXInstallNameChange.cmake - DEPENDEES install - WORKING_DIRECTORY - LOG 1 - ) - - # then, for the main library (libnvtt) fix the paths to the dependency libraries (core, image, math) - ExternalProject_Add_Step( - ${EXTERNAL_NAME} - change-dependency-paths - COMMENT "Calling install_name_tool on NVTT libraries to fix paths for dependency libraries" - COMMAND install_name_tool -change libnvimage.dylib ${INSTALL_DIR}/lib/libnvimage.dylib libnvtt.dylib - COMMAND install_name_tool -change libnvcore.dylib ${INSTALL_DIR}/lib/libnvcore.dylib libnvtt.dylib - COMMAND install_name_tool -change libnvmath.dylib ${INSTALL_DIR}/lib/libnvmath.dylib libnvtt.dylib - COMMAND install_name_tool -change libnvcore.dylib ${INSTALL_DIR}/lib/libnvcore.dylib libnvimage.dylib - COMMAND install_name_tool -change libnvmath.dylib ${INSTALL_DIR}/lib/libnvmath.dylib libnvimage.dylib - COMMAND install_name_tool -change libnvcore.dylib ${INSTALL_DIR}/lib/libnvcore.dylib libnvmath.dylib - DEPENDEES install - WORKING_DIRECTORY /lib - LOG 1 - ) - endif () -endif () - -# Hide this external target (for IDE users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") diff --git a/cmake/externals/openvr/CMakeLists.txt b/cmake/externals/openvr/CMakeLists.txt deleted file mode 100644 index 05dfe70ed7..0000000000 --- a/cmake/externals/openvr/CMakeLists.txt +++ /dev/null @@ -1,49 +0,0 @@ -include(ExternalProject) -include(SelectLibraryConfigurations) - -set(EXTERNAL_NAME OpenVR) - -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/openvr-1.0.6.zip - URL_MD5 f6892cd3a3078f505d03b4297f5a1951 - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - LOG_DOWNLOAD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/headers CACHE TYPE INTERNAL) - -if (WIN32) - - # FIXME need to account for different architectures - if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") - set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/lib/win64/openvr_api.lib CACHE TYPE INTERNAL) - add_paths_to_fixup_libs(${SOURCE_DIR}/bin/win64) - else() - set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/lib/win32/openvr_api.lib CACHE TYPE INTERNAL) - add_paths_to_fixup_libs(${SOURCE_DIR}/bin/win32) - endif() - -elseif(APPLE) - - # FIXME need to account for different architectures - set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/lib/osx32/libopenvr_api.dylib CACHE TYPE INTERNAL) - add_paths_to_fixup_libs(${SOURCE_DIR}/bin/osx32) - -elseif(NOT ANDROID) - - # FIXME need to account for different architectures - set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/lib/linux64/libopenvr_api.so CACHE TYPE INTERNAL) - add_paths_to_fixup_libs(${SOURCE_DIR}/bin/linux64) - -endif() - diff --git a/cmake/externals/quazip/CMakeLists.txt b/cmake/externals/quazip/CMakeLists.txt index 7a13720f35..20e93d04b1 100644 --- a/cmake/externals/quazip/CMakeLists.txt +++ b/cmake/externals/quazip/CMakeLists.txt @@ -3,7 +3,14 @@ string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) include(ExternalProject) -set(QUAZIP_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_PREFIX_PATH=${QT_CMAKE_PREFIX_PATH} -DCMAKE_INSTALL_NAME_DIR:PATH=/lib -DZLIB_ROOT=${ZLIB_ROOT} -DCMAKE_POSITION_INDEPENDENT_CODE=ON) +set(QUAZIP_CMAKE_ARGS + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX:PATH= + -DCMAKE_PREFIX_PATH=${QT_CMAKE_PREFIX_PATH} + -DCMAKE_INSTALL_NAME_DIR:PATH=/lib + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DZLIB_ROOT=${VKPKG_INSTALL_ROOT} + -DCMAKE_POSITION_INDEPENDENT_CODE=ON) if (NOT APPLE) set(QUAZIP_CMAKE_ARGS ${QUAZIP_CMAKE_ARGS} -DCMAKE_CXX_STANDARD=11) @@ -20,10 +27,6 @@ ExternalProject_Add( LOG_BUILD 1 ) -if (WIN32) - add_dependencies(quazip zlib) -endif () - # Hide this external target (for ide users) set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals" diff --git a/cmake/externals/sdl2/CMakeLists.txt b/cmake/externals/sdl2/CMakeLists.txt deleted file mode 100644 index 1e8e690743..0000000000 --- a/cmake/externals/sdl2/CMakeLists.txt +++ /dev/null @@ -1,90 +0,0 @@ -set(EXTERNAL_NAME sdl2) - -include(ExternalProject) - -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -if (WIN32) - ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/SDL2-devel-2.0.3-VC.zip - URL_MD5 30a333bcbe94bc5016e8799c73e86233 - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - LOG_DOWNLOAD 1 - ) -elseif (APPLE) - - ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/SDL2-2.0.3.zip - URL_MD5 55f1eae5142d20db11c844d8d4d6deed - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH= -DVIDEO_OPENGL=OFF - BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - ) - - ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) - set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${INSTALL_DIR}/include/SDL2 CACHE PATH "Location of SDL2 include directory") - set(${EXTERNAL_NAME_UPPER}_LIBRARY "${INSTALL_DIR}/lib/libSDL2-2.0.dylib" CACHE STRING "Path to SDL2 library") - - set(_SDL2_LIB_DIR "${INSTALL_DIR}/lib") - - ExternalProject_Add_Step( - ${EXTERNAL_NAME} - change-install-name - COMMENT "Calling install_name_tool on SDL2 libraries to fix install name for dylib linking" - COMMAND ${CMAKE_COMMAND} -DINSTALL_NAME_LIBRARY_DIR=${_SDL2_LIB_DIR} -P ${EXTERNAL_PROJECT_DIR}/OSXInstallNameChange.cmake - DEPENDEES install - WORKING_DIRECTORY - LOG 1 - ) - -else () - if (ANDROID) - set(ANDROID_CMAKE_ARGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" "-DANDROID_NATIVE_API_LEVEL=19") - endif () - - ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/SDL2-2.0.3.tar.gz - URL_MD5 fe6c61d2e9df9ef570e7e80c6e822537 - CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX:PATH= - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 - ) -endif () - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -if (APPLE) - -# NOOP - -elseif (WIN32) - - ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${SOURCE_DIR}/include CACHE PATH "Location of SDL2 include directory") - - if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") - set(${EXTERNAL_NAME_UPPER}_LIBRARY_TEMP ${SOURCE_DIR}/lib/x64/SDL2.lib CACHE FILEPATH "Path to SDL2 library") - set(${EXTERNAL_NAME_UPPER}_DLL_PATH ${SOURCE_DIR}/lib/x64 CACHE PATH "Location of SDL2 DLL") - else() - set(${EXTERNAL_NAME_UPPER}_LIBRARY_TEMP ${SOURCE_DIR}/lib/x86/SDL2.lib CACHE FILEPATH "Path to SDL2 library") - set(${EXTERNAL_NAME_UPPER}_DLL_PATH ${SOURCE_DIR}/lib/x86 CACHE PATH "Location of SDL2 DLL") - endif() - - add_paths_to_fixup_libs(${${EXTERNAL_NAME_UPPER}_DLL_PATH}) - -else () - - ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) - set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${INSTALL_DIR}/include/SDL2 CACHE PATH "Location of SDL2 include directory") - set(${EXTERNAL_NAME_UPPER}_LIBRARY_TEMP ${INSTALL_DIR}/lib/libSDL2.so CACHE FILEPATH "Path to SDL2 library") - -endif () diff --git a/cmake/externals/spirv_binaries/CMakeLists.txt b/cmake/externals/spirv_binaries/CMakeLists.txt deleted file mode 100644 index d422eb9f16..0000000000 --- a/cmake/externals/spirv_binaries/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -set(EXTERNAL_NAME spirv_binaries) -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -include(ExternalProject) -if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") - set(DOWNLOAD_URL https://public.highfidelity.com/dependencies/vulkan/vulkansdk-win32-1.1.82.1.tar.gz) - set(DOWNLOAD_MD5 3a83ef490bce248b1a4d6726a3e5893e) - set(BIN_DIR "Bin") -elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") - set(DOWNLOAD_URL https://public.highfidelity.com/dependencies/vulkan/vulkansdk-macos-1.1.82.1.tar.gz) - set(DOWNLOAD_MD5 a57d37275b2c5db023ba8e84a63461ff) - set(BIN_DIR "macOS/bin") -else () - set(DOWNLOAD_URL https://public.highfidelity.com/dependencies/vulkan/vulkansdk-linux-x86_64-1.1.82.1.tar.gz) - set(DOWNLOAD_MD5 5a7c9eeda8cee6b36724da7f7cbe5ec6) - set(BIN_DIR "x86_64/bin") -endif () - -ExternalProject_Add( - ${EXTERNAL_NAME} - URL ${DOWNLOAD_URL} - URL_MD5 ${DOWNLOAD_MD5} - BUILD_COMMAND "" - CONFIGURE_COMMAND "" - INSTALL_COMMAND "" - LOG_DOWNLOAD ON -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") -ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - -set(${EXTERNAL_NAME_UPPER}_DIR "${SOURCE_DIR}/${BIN_DIR}" CACHE FILEPATH "SPIRV binary tools location") - diff --git a/cmake/externals/spirv_cross/CMakeLists.txt b/cmake/externals/spirv_cross/CMakeLists.txt deleted file mode 100644 index eaa7e4ffa1..0000000000 --- a/cmake/externals/spirv_cross/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -set(EXTERNAL_NAME spirv_cross) - -include(ExternalProject) -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://github.com/KhronosGroup/SPIRV-Cross/archive/2018-08-07.zip - URL_MD5 11198e4dc6a815ffbdb7a0a56d2d9261 - CONFIGURE_COMMAND CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=-$ ${EXTRA_CMAKE_FLAGS} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) -set(SUFFIXED_INSTALL_DIR "${INSTALL_DIR}-$") - -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SUFFIXED_INSTALL_DIR}/include CACHE PATH "List of Draco include directories") - -if (UNIX) - set(LIB_PREFIX "lib") - set(LIB_EXT "a") -elseif (WIN32) - set(LIB_EXT "lib") -endif () - -foreach(lib glsl msl cpp hlsl reflect util core) - list(APPEND ${EXTERNAL_NAME_UPPER}_LIBRARIES ${SUFFIXED_INSTALL_DIR}/lib/spirv-cross-${lib}.${LIB_EXT}) -endforeach() - -set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${${EXTERNAL_NAME_UPPER}_LIBRARIES} CACHE FILEPATH "Path to SPIRV-Cross libraries") diff --git a/cmake/externals/spirv_headers/CMakeLists.txt b/cmake/externals/spirv_headers/CMakeLists.txt deleted file mode 100644 index 9613f97991..0000000000 --- a/cmake/externals/spirv_headers/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -set(EXTERNAL_NAME spirv_headers) -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -include(ExternalProject) -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://github.com/KhronosGroup/SPIRV-Headers/archive/2c512180ca03b5d4f56283efc85745775b45fdc4.zip - URL_MD5 83e652221b5f21d5fdb61c45f5b4d9f9 - CONFIGURE_COMMAND CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH= ${EXTRA_CMAKE_FLAGS} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") -ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) -set(${EXTERNAL_NAME_UPPER}_ROOT ${INSTALL_DIR} CACHE PATH "List of include directories") diff --git a/cmake/externals/spirv_tools/CMakeLists.txt b/cmake/externals/spirv_tools/CMakeLists.txt deleted file mode 100644 index a58d72502e..0000000000 --- a/cmake/externals/spirv_tools/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -set(EXTERNAL_NAME spirv_tools) -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -include(ExternalProject) -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://github.com/KhronosGroup/SPIRV-Tools/archive/v2018.4.zip - URL_MD5 7a7c69cf6ff0318910b4bfbdf30bcfc9 - CONFIGURE_COMMAND CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DSPIRV-Headers_SOURCE_DIR=${SPIRV_HEADERS_ROOT} -DCMAKE_INSTALL_PREFIX:PATH=-$ ${EXTRA_CMAKE_FLAGS} - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) -set(SUFFIXED_INSTALL_DIR "${INSTALL_DIR}-$") - -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SUFFIXED_INSTALL_DIR}/include CACHE PATH "List of SPIRV-Tools include directories") - -if (UNIX) - set(LIB_PREFIX "lib") - set(LIB_EXT "a") -elseif (WIN32) - set(LIB_EXT "lib") -endif () - -list(APPEND ${EXTERNAL_NAME_UPPER}_LIBRARIES ${SUFFIXED_INSTALL_DIR}/lib/SPIRV-Tools-opt.${LIB_EXT}) -list(APPEND ${EXTERNAL_NAME_UPPER}_LIBRARIES ${SUFFIXED_INSTALL_DIR}/lib/SPIRV-Tools-link.${LIB_EXT}) -list(APPEND ${EXTERNAL_NAME_UPPER}_LIBRARIES ${SUFFIXED_INSTALL_DIR}/lib/SPIRV-Tools.${LIB_EXT}) -set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${${EXTERNAL_NAME_UPPER}_LIBRARIES} CACHE FILEPATH "Path to SPIRV-Tool libraries") diff --git a/cmake/externals/zlib/CMakeLists.txt b/cmake/externals/zlib/CMakeLists.txt deleted file mode 100644 index 85506ba0e1..0000000000 --- a/cmake/externals/zlib/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -set(EXTERNAL_NAME zlib) -string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) - -include(ExternalProject) - -ExternalProject_Add( - ${EXTERNAL_NAME} - URL https://public.highfidelity.com/dependencies/zlib128.zip - URL_MD5 126f8676442ffbd97884eb4d6f32afb4 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH= - BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build - LOG_DOWNLOAD 1 - LOG_CONFIGURE 1 - LOG_BUILD 1 -) - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) -set(${EXTERNAL_NAME_UPPER}_ROOT ${INSTALL_DIR} CACHE PATH "Path for Zlib install root") -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIR ${INSTALL_DIR}/include CACHE PATH "List of zlib include directories") -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${${EXTERNAL_NAME_UPPER}_INCLUDE_DIR} CACHE PATH "List of zlib include directories") -set(${EXTERNAL_NAME_UPPER}_DLL_PATH ${INSTALL_DIR}/bin CACHE FILEPATH "Location of ZLib DLL") -set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/zlib.lib CACHE FILEPATH "Location of zlib release library") -set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${INSTALL_DIR}/lib/zlibd.lib CACHE FILEPATH "Location of zlib debug library") - -include(SelectLibraryConfigurations) -select_library_configurations(${EXTERNAL_NAME_UPPER}) - -# Force selected libraries into the cache -set(${EXTERNAL_NAME_UPPER}_LIBRARY ${${EXTERNAL_NAME_UPPER}_LIBRARY} CACHE FILEPATH "Location of zlib libraries") -set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${${EXTERNAL_NAME_UPPER}_LIBRARIES} CACHE FILEPATH "Location of zlib libraries") diff --git a/cmake/macros/AutoScribeShader.cmake b/cmake/macros/AutoScribeShader.cmake index 06c29e06e3..64fbcc4ea6 100755 --- a/cmake/macros/AutoScribeShader.cmake +++ b/cmake/macros/AutoScribeShader.cmake @@ -14,13 +14,6 @@ macro(AUTOSCRIBE_APPEND_QRC) string(CONCAT SHADER_QRC "${SHADER_QRC}" "${ARGV1}\n") endmacro() -set(VULKAN_DIR $ENV{VULKAN_SDK}) -set(GLSLANG_EXEC "${VULKAN_DIR}/Bin/glslangValidator.exe") -set(SPIRV_CROSS_EXEC "${VULKAN_DIR}/Bin/spirv-cross.exe") -set(SPIRV_OPT_EXEC "${VULKAN_DIR}/Bin/spirv-opt.exe") -set(GLSLC_EXEC "${VULKAN_DIR}/Bin/glslc.exe") -set(SCRIBE_EXEC "D:/scribe.exe") - macro(AUTOSCRIBE_PLATFORM_SHADER) set(AUTOSCRIBE_PLATFORM_PATH "${ARGV0}") string(REGEX MATCH "([0-9]+(es)?)(/stereo)?" PLATFORM_PATH_REGEX ${AUTOSCRIBE_PLATFORM_PATH}) @@ -75,36 +68,6 @@ macro(AUTOSCRIBE_PLATFORM_SHADER) list(APPEND SHADER_GEN_LINE ${TEMP_PATH}) list(APPEND SHADER_GEN_LINE ${AUTOSCRIBE_SHADER_SEEN_LIBS}) string(CONCAT AUTOSCRIBE_SHADERGEN_COMMANDS "${AUTOSCRIBE_SHADERGEN_COMMANDS}" "${SHADER_GEN_LINE}\n") - - # # FIXME need better mechanism for determining the include files - # add_custom_command( - # OUTPUT ${AUTOSCRIBE_OUTPUT_FILE} - # COMMAND ${SCRIBE_COMMAND} ${SHADER_FILE} ${SCRIBE_ARGS} -o ${AUTOSCRIBE_OUTPUT_FILE} -h ${AUTOSCRIBE_DIALECT_HEADER} -h ${AUTOSCRIBE_VARIANT_HEADER} - # DEPENDS ${SCRIBE_COMMAND} ${SHADER_FILE} ${AUTOSCRIBE_DIALECT_HEADER} ${AUTOSCRIBE_VARIANT_HEADER}) - - # # Generate the spirv file - # add_custom_command( - # OUTPUT ${AUTOSCRIBE_SPIRV_FILE} - # COMMAND ${GLSLANG_EXEC} -V110 -o ${AUTOSCRIBE_SPIRV_FILE} ${AUTOSCRIBE_OUTPUT_FILE} - # DEPENDS ${AUTOSCRIBE_OUTPUT_FILE} ${GLSLANG_EXEC}) - - # # Generate the optimized spirv file - # add_custom_command( - # OUTPUT ${AUTOSCRIBE_SPIRV_OPT_FILE} - # COMMAND ${SPIRV_OPT_EXEC} -O ${AUTOSCRIBE_SPIRV_FILE} -o ${AUTOSCRIBE_SPIRV_OPT_FILE} - # DEPENDS ${AUTOSCRIBE_SPIRV_FILE} ${SPIRV_OPT_EXEC}) - - # # Generate the optimized GLSL file - # add_custom_command( - # OUTPUT ${AUTOSCRIBE_SPIRV_GLSL_FILE} - # COMMAND ${SPIRV_CROSS_EXEC} ${SPIRV_CROSS_ARGS} ${AUTOSCRIBE_SPIRV_OPT_FILE} --output ${AUTOSCRIBE_SPIRV_GLSL_FILE} - # DEPENDS ${AUTOSCRIBE_SPIRV_OPT_FILE} ${SPIRV_CROSS_EXEC}) - - # # Generate the optimized spirv file - # add_custom_command( - # OUTPUT ${AUTOSCRIBE_SPIRV_JSON_FILE} - # COMMAND ${SPIRV_CROSS_EXEC} --reflect json ${AUTOSCRIBE_SPIRV_OPT_FILE} --output ${AUTOSCRIBE_SPIRV_JSON_FILE} - # DEPENDS ${AUTOSCRIBE_SPIRV_OPT_FILE} ${SPIRV_CROSS_EXEC}) endmacro() macro(AUTOSCRIBE_SHADER) @@ -307,38 +270,16 @@ macro(AUTOSCRIBE_SHADER_LIBS) set(AUTOSCRIBE_SHADERGEN_COMMANDS_FILE ${CMAKE_CURRENT_BINARY_DIR}/shadergen.txt) file(WRITE ${AUTOSCRIBE_SHADERGEN_COMMANDS_FILE} "${AUTOSCRIBE_SHADERGEN_COMMANDS}") - # grab the SPIRV binaries we require - # note we don't use the normal ADD_DEPENDENCY_EXTERNAL_PROJECTS macro because only a custom command - # depends on these, not any of our build artifacts, so there's no valid target for the add_dependencies - # call in ADD_DEPENDENCY_EXTERNAL_PROJECTS to use - add_subdirectory(${EXTERNAL_PROJECT_DIR}/spirv_binaries ${EXTERNALS_BINARY_DIR}/spirv_binaries) - - target_python() - - # A custom python script which will generate - if (ANDROID) - add_custom_command( - OUTPUT ${SCRIBED_SHADERS} ${SPIRV_SHADERS} ${REFLECTED_SHADERS} - COMMENT "Generating/updating shaders" - COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_SOURCE_DIR}/tools/shadergen.py - --commands ${AUTOSCRIBE_SHADERGEN_COMMANDS_FILE} - --spirv-binaries ${SPIRV_BINARIES_DIR} - --scribe ${NATIVE_SCRIBE} - --build-dir ${CMAKE_CURRENT_BINARY_DIR} - --source-dir ${CMAKE_SOURCE_DIR} - DEPENDS ${AUTOSCRIBE_SHADER_HEADERS} spirv_binaries ${CMAKE_SOURCE_DIR}/tools/shadergen.py ${ALL_SCRIBE_SHADERS}) - else() - add_custom_command( - OUTPUT ${SCRIBED_SHADERS} ${SPIRV_SHADERS} ${REFLECTED_SHADERS} - COMMENT "Generating/updating shaders" - COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_SOURCE_DIR}/tools/shadergen.py - --commands ${AUTOSCRIBE_SHADERGEN_COMMANDS_FILE} - --spirv-binaries ${SPIRV_BINARIES_DIR} - --scribe $ - --build-dir ${CMAKE_CURRENT_BINARY_DIR} - --source-dir ${CMAKE_SOURCE_DIR} - DEPENDS ${AUTOSCRIBE_SHADER_HEADERS} scribe spirv_binaries ${CMAKE_SOURCE_DIR}/tools/shadergen.py ${ALL_SCRIBE_SHADERS}) - endif() + # A custom python script which will generate all our shader artifacts + add_custom_command( + OUTPUT ${SCRIBED_SHADERS} ${SPIRV_SHADERS} ${REFLECTED_SHADERS} + COMMENT "Generating/updating shaders" + COMMAND ${HIFI_PYTHON_EXEC} ${CMAKE_SOURCE_DIR}/tools/shadergen.py + --commands ${AUTOSCRIBE_SHADERGEN_COMMANDS_FILE} + --tools-dir ${VCPKG_TOOLS_DIR} + --build-dir ${CMAKE_CURRENT_BINARY_DIR} + --source-dir ${CMAKE_SOURCE_DIR} + DEPENDS ${AUTOSCRIBE_SHADER_HEADERS} ${CMAKE_SOURCE_DIR}/tools/shadergen.py ${ALL_SCRIBE_SHADERS}) add_custom_target(shadergen DEPENDS ${SCRIBED_SHADERS} ${SPIRV_SHADERS} ${REFLECTED_SHADERS}) set_target_properties(shadergen PROPERTIES FOLDER "Shaders") diff --git a/cmake/macros/ManuallyInstallOpenSSLForQt.cmake b/cmake/macros/ManuallyInstallOpenSSLForQt.cmake index ea91bbb83b..61f00acace 100644 --- a/cmake/macros/ManuallyInstallOpenSSLForQt.cmake +++ b/cmake/macros/ManuallyInstallOpenSSLForQt.cmake @@ -19,13 +19,13 @@ macro(manually_install_openssl_for_qt) find_package(OpenSSL REQUIRED) install( - FILES "${OPENSSL_DLL_PATH}/ssleay32.dll" + FILES "${VKPKG_INSTALL_ROOT}/bin/ssleay32.dll" DESTINATION ${TARGET_INSTALL_DIR} COMPONENT ${TARGET_INSTALL_COMPONENT} ) install( - FILES "${OPENSSL_DLL_PATH}/libeay32.dll" + FILES "${VKPKG_INSTALL_ROOT}/bin/libeay32.dll" DESTINATION ${TARGET_INSTALL_DIR} COMPONENT ${TARGET_INSTALL_COMPONENT} ) diff --git a/cmake/macros/TargetBullet.cmake b/cmake/macros/TargetBullet.cmake index 48fe0e0c05..1f4050dd42 100644 --- a/cmake/macros/TargetBullet.cmake +++ b/cmake/macros/TargetBullet.cmake @@ -16,7 +16,6 @@ macro(TARGET_BULLET) list(APPEND BULLET_LIBRARIES ${LIB_DIR}/libLinearMath.a) list(APPEND BULLET_LIBRARIES ${LIB_DIR}/libBulletSoftBody.a) else() - add_dependency_external_projects(bullet) find_package(Bullet REQUIRED) endif() # perform the system include hack for OS X to ignore warnings diff --git a/cmake/macros/TargetDraco.cmake b/cmake/macros/TargetDraco.cmake index c198ac35b0..19674648b1 100755 --- a/cmake/macros/TargetDraco.cmake +++ b/cmake/macros/TargetDraco.cmake @@ -1,18 +1,24 @@ 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 TYPE INTERNAL) - set(LIB_DIR ${INSTALL_DIR}/lib) list(APPEND DRACO_LIBRARIES ${LIB_DIR}/libdraco.a) list(APPEND DRACO_LIBRARIES ${LIB_DIR}/libdracodec.a) list(APPEND DRACO_LIBRARIES ${LIB_DIR}/libdracoenc.a) + target_link_libraries(${TARGET_NAME} ${DRACO_LIBRARIES}) else() - add_dependency_external_projects(draco) - find_package(Draco REQUIRED) - list(APPEND DRACO_LIBRARIES ${DRACO_LIBRARY}) - list(APPEND DRACO_LIBRARIES ${DRACO_ENCODER_LIBRARY}) + set(LIB_SEARCH_PATH_RELEASE ${VKPKG_INSTALL_ROOT}/lib/) + set(LIB_SEARCH_PATH_DEBUG ${VKPKG_INSTALL_ROOT}/debug/lib/) + foreach(LIB ${LIBS}) + find_library(${LIB}_LIBPATH ${LIB} PATHS ${LIB_SEARCH_PATH_RELEASE} NO_DEFAULT_PATH) + list(APPEND DRACO_LIBRARY_RELEASE ${${LIB}_LIBPATH}) + find_library(${LIB}D_LIBPATH ${LIB} PATHS ${LIB_SEARCH_PATH_DEBUG} NO_DEFAULT_PATH) + list(APPEND DRACO_LIBRARY_DEBUG ${${LIB}D_LIBPATH}) + endforeach() + select_library_configurations(DRACO) + target_link_libraries(${TARGET_NAME} ${DRACO_LIBRARY}) endif() - target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${DRACO_INCLUDE_DIRS}) - target_link_libraries(${TARGET_NAME} ${DRACO_LIBRARIES}) -endmacro() +endmacro() \ No newline at end of file diff --git a/cmake/macros/TargetEtc2Comp.cmake b/cmake/macros/TargetEtc2Comp.cmake index 44152a58d2..42a57241f7 100644 --- a/cmake/macros/TargetEtc2Comp.cmake +++ b/cmake/macros/TargetEtc2Comp.cmake @@ -8,15 +8,16 @@ macro(TARGET_ETC2COMP) if (ANDROID) set(INSTALL_DIR ${HIFI_ANDROID_PRECOMPILED}/etc2comp) - set(ETC2COMP_INCLUDE_DIRS "${INSTALL_DIR}/include/Etc" "${INSTALL_DIR}/include/EtcCodec") + set(ETC2COMP_INCLUDE_DIRS "${INSTALL_DIR}/include" "${INSTALL_DIR}/include/Etc" "${INSTALL_DIR}/include/EtcCodec") set(ETC2COMP_LIBRARY_DEBUG ${INSTALL_DIR}/lib/libEtcLib.a) set(ETC2COMP_LIBRARY_RELEASE ${INSTALL_DIR}/lib/libEtcLib.a) - select_library_configurations(ETC2COMP) + target_include_directories(${TARGET_NAME} PRIVATE ${ETC2COMP_INCLUDE_DIRS}) else() - add_dependency_external_projects(etc2comp) - find_package(Etc2Comp REQUIRED) + find_library(ETC2COMP_LIBRARY_DEBUG EtcLib PATHS ${VKPKG_INSTALL_ROOT}/debug/lib/ NO_DEFAULT_PATH) + find_library(ETC2COMP_LIBRARY_RELEASE EtcLib PATHS ${VKPKG_INSTALL_ROOT}/lib/ NO_DEFAULT_PATH) endif() - target_include_directories(${TARGET_NAME} PRIVATE ${ETC2COMP_INCLUDE_DIRS}) + select_library_configurations(ETC2COMP) target_link_libraries(${TARGET_NAME} ${ETC2COMP_LIBRARIES}) endmacro() + diff --git a/cmake/macros/TargetGli.cmake b/cmake/macros/TargetGli.cmake index 664fcc00c5..2ed1020b4b 100644 --- a/cmake/macros/TargetGli.cmake +++ b/cmake/macros/TargetGli.cmake @@ -6,7 +6,6 @@ # See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html # macro(TARGET_GLI) - add_dependency_external_projects(gli) - find_package(GLI REQUIRED) - target_include_directories(${TARGET_NAME} PUBLIC ${GLI_INCLUDE_DIRS}) + # We use vcpkg for both gli and glm, so we just re-use the target_glm macro here + target_glm() endmacro() \ No newline at end of file diff --git a/cmake/macros/TargetGlm.cmake b/cmake/macros/TargetGlm.cmake index b58e6ba177..302dcd5ea8 100644 --- a/cmake/macros/TargetGlm.cmake +++ b/cmake/macros/TargetGlm.cmake @@ -7,10 +7,12 @@ # macro(TARGET_GLM) if (ANDROID) - set(GLM_INCLUDE_DIRS "${HIFI_ANDROID_PRECOMPILED}/glm/include") + target_include_directories(${TARGET_NAME} PUBLIC "${VKPKG_INSTALL_ROOT}/include") else() - add_dependency_external_projects(glm) - find_package(GLM REQUIRED) + find_package(glm CONFIG REQUIRED) + target_link_libraries(${TARGET_NAME} glm) endif() - target_include_directories(${TARGET_NAME} PUBLIC ${GLM_INCLUDE_DIRS}) + target_compile_definitions(${TARGET_NAME} PUBLIC GLM_FORCE_RADIANS) + target_compile_definitions(${TARGET_NAME} PUBLIC GLM_ENABLE_EXPERIMENTAL) + target_compile_definitions(${TARGET_NAME} PUBLIC GLM_FORCE_CTOR_INIT) endmacro() \ No newline at end of file diff --git a/cmake/macros/TargetJson.cmake b/cmake/macros/TargetJson.cmake index 9262c2ce48..b96ed90da5 100644 --- a/cmake/macros/TargetJson.cmake +++ b/cmake/macros/TargetJson.cmake @@ -6,7 +6,6 @@ # See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html # macro(TARGET_JSON) - add_dependency_external_projects(json) - find_package(JSON REQUIRED) - target_include_directories(${TARGET_NAME} PUBLIC ${JSON_INCLUDE_DIRS}) + # We use vcpkg for both json and glm, so we just re-use the target_glm macro here + target_glm() endmacro() \ No newline at end of file diff --git a/cmake/macros/TargetNvtt.cmake b/cmake/macros/TargetNvtt.cmake index b8198c0cf0..89d989951f 100644 --- a/cmake/macros/TargetNvtt.cmake +++ b/cmake/macros/TargetNvtt.cmake @@ -15,12 +15,17 @@ macro(TARGET_NVTT) list(APPEND NVTT_LIBS "${NVTT_LIB_DIR}/libnvimage.so") list(APPEND NVTT_LIBS "${NVTT_LIB_DIR}/libnvtt.so") set(NVTT_LIBRARIES ${NVTT_LIBS} CACHE TYPE INTERNAL) + target_include_directories(${TARGET_NAME} PRIVATE ${NVTT_INCLUDE_DIRS}) else() - add_dependency_external_projects(nvtt) - find_package(NVTT REQUIRED) - add_paths_to_fixup_libs(${NVTT_DLL_PATH}) + find_library(NVTT_LIBRARY_RELEASE nvtt PATHS ${VKPKG_INSTALL_ROOT}/lib NO_DEFAULT_PATH) + find_library(NVTT_LIBRARY_DEBUG nvtt PATHS ${VKPKG_INSTALL_ROOT}/debug/lib NO_DEFAULT_PATH) + select_library_configurations(NVTT) endif() - target_include_directories(${TARGET_NAME} PRIVATE ${NVTT_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${NVTT_LIBRARIES}) + if ((NOT WIN32) AND (NOT ANDROID) AND (NOT APPLE)) + find_package(OpenMP) + target_link_libraries(${TARGET_NAME} OpenMP::OpenMP_C OpenMP::OpenMP_CXX) + endif() + endmacro() diff --git a/cmake/macros/TargetOpenSSL.cmake b/cmake/macros/TargetOpenSSL.cmake index 82601bf6aa..3faaab5801 100644 --- a/cmake/macros/TargetOpenSSL.cmake +++ b/cmake/macros/TargetOpenSSL.cmake @@ -11,15 +11,8 @@ macro(TARGET_OPENSSL) set(OPENSSL_INCLUDE_DIR "${OPENSSL_INSTALL_DIR}/include" CACHE TYPE INTERNAL) set(OPENSSL_LIBRARIES "${OPENSSL_INSTALL_DIR}/lib/libcrypto.a;${OPENSSL_INSTALL_DIR}/lib/libssl.a" CACHE TYPE INTERNAL) else() - + # using VCPKG for OpenSSL find_package(OpenSSL REQUIRED) - - if (APPLE AND ${OPENSSL_INCLUDE_DIR} STREQUAL "/usr/include") - # this is a user on OS X using system OpenSSL, which is going to throw warnings since they're deprecating for their common crypto - message(WARNING "The found version of OpenSSL is the OS X system version. This will produce deprecation warnings." - "\nWe recommend you install a newer version (at least 1.0.1h) in a different directory and set OPENSSL_ROOT_DIR in your env so Cmake can find it.") - endif() - endif() include_directories(SYSTEM "${OPENSSL_INCLUDE_DIR}") diff --git a/cmake/macros/TargetOpenVR.cmake b/cmake/macros/TargetOpenVR.cmake new file mode 100644 index 0000000000..8602c9e290 --- /dev/null +++ b/cmake/macros/TargetOpenVR.cmake @@ -0,0 +1,13 @@ +# +# Created by Bradley Austin Davis on 2018/10/24 +# Copyright 2013-2018 High Fidelity, Inc. +# +# Distributed under the Apache License, Version 2.0. +# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +# +macro(TARGET_OPENVR) + find_library(OPENVR_LIBRARY_RELEASE NAMES openvr_api PATHS ${VKPKG_INSTALL_ROOT}/lib) + find_library(OPENVR_LIBRARY_DEBUG NAMES openvr_api PATHS ${VKPKG_INSTALL_ROOT}/debug/lib) + select_library_configurations(OPENVR) + target_link_libraries(${TARGET_NAME} ${OPENVR_LIBRARY}) +endmacro() diff --git a/cmake/macros/TargetSDL2.cmake b/cmake/macros/TargetSDL2.cmake index ee2328dfff..8163a5ebd9 100644 --- a/cmake/macros/TargetSDL2.cmake +++ b/cmake/macros/TargetSDL2.cmake @@ -6,9 +6,12 @@ # See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html # macro(TARGET_SDL2) - add_dependency_external_projects(sdl2) - find_package(SDL2 REQUIRED) - target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${SDL2_INCLUDE_DIR}) - target_link_libraries(${TARGET_NAME} ${SDL2_LIBRARY}) + # using VCPKG for SDL2 + find_package(SDL2 CONFIG REQUIRED) + if (WIN32) + target_link_libraries(${TARGET_NAME} SDL2::SDL2) + else() + target_link_libraries(${TARGET_NAME} SDL2::SDL2-static) + endif() add_definitions(-DHAVE_SDL2) -endmacro() \ No newline at end of file +endmacro() diff --git a/cmake/macros/TargetTBB.cmake b/cmake/macros/TargetTBB.cmake index 1e2e69eeaa..b2aeeb99aa 100644 --- a/cmake/macros/TargetTBB.cmake +++ b/cmake/macros/TargetTBB.cmake @@ -13,12 +13,17 @@ if (ANDROID) set(TBB_LIBRARY ${TBB_INSTALL_DIR}/lib/release/libtbb.so CACHE FILEPATH "TBB library location") set(TBB_MALLOC_LIBRARY ${TBB_INSTALL_DIR}/lib/release/libtbbmalloc.so CACHE FILEPATH "TBB malloc library location") set(TBB_LIBRARIES ${TBB_LIBRARY} ${TBB_MALLOC_LIBRARY}) -else() + target_include_directories(${TARGET_NAME} SYSTEM PUBLIC ${TBB_INCLUDE_DIRS}) + target_link_libraries(${TARGET_NAME} ${TBB_LIBRARIES}) +elseif(APPLE) add_dependency_external_projects(tbb) find_package(TBB REQUIRED) + target_link_libraries(${TARGET_NAME} ${TBB_LIBRARIES}) + target_include_directories(${TARGET_NAME} SYSTEM PUBLIC ${TBB_INCLUDE_DIRS}) +else() + # using VCPKG for TBB + find_package(TBB CONFIG REQUIRED) + target_link_libraries(${TARGET_NAME} TBB::tbb) endif() -target_link_libraries(${TARGET_NAME} ${TBB_LIBRARIES}) -target_include_directories(${TARGET_NAME} SYSTEM PUBLIC ${TBB_INCLUDE_DIRS}) - endmacro() diff --git a/cmake/macros/TargetVulkan.cmake b/cmake/macros/TargetVulkan.cmake index 4702583ff5..e220487eb5 100644 --- a/cmake/macros/TargetVulkan.cmake +++ b/cmake/macros/TargetVulkan.cmake @@ -5,15 +5,7 @@ # See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html # macro(TARGET_VULKAN) - find_package(Vulkan) - - if (Vulkan_FOUND) - add_definitions(-DHAVE_VULKAN) - target_include_directories(${TARGET_NAME} PRIVATE ${Vulkan_INCLUDE_DIRS}) - target_link_libraries(${TARGET_NAME} ${Vulkan_LIBRARIES}) - - add_dependency_external_projects(glslang) - target_include_directories(${TARGET_NAME} PRIVATE ${GLSLANG_INCLUDE_DIRS}) - target_link_libraries(${TARGET_NAME} ${GLSLANG_LIBRARIES}) - endif() + find_package(Vulkan REQUIRED) + target_include_directories(${TARGET_NAME} PRIVATE ${VULKAN_INCLUDE_DIR}) + target_link_libraries(${TARGET_NAME} ${VULKAN_LIBRARY}) endmacro() \ No newline at end of file diff --git a/cmake/macros/TargetZlib.cmake b/cmake/macros/TargetZlib.cmake index ef746031e8..79dce01a3d 100644 --- a/cmake/macros/TargetZlib.cmake +++ b/cmake/macros/TargetZlib.cmake @@ -6,17 +6,8 @@ # See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html # macro(TARGET_ZLIB) - - if (WIN32) - add_dependency_external_projects(zlib) - endif() - + # using VCPKG for zlib find_package(ZLIB REQUIRED) - - if (WIN32) - add_paths_to_fixup_libs(${ZLIB_DLL_PATH}) - endif() - target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${ZLIB_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${ZLIB_LIBRARIES}) endmacro() diff --git a/cmake/modules/FindDraco.cmake b/cmake/modules/FindDraco.cmake deleted file mode 100644 index 342797b62e..0000000000 --- a/cmake/modules/FindDraco.cmake +++ /dev/null @@ -1,30 +0,0 @@ -# -# FindDraco.cmake -# -# Try to find Draco libraries and include path. -# Once done this will define -# -# DRACO_FOUND -# DRACO_INCLUDE_DIRS -# DRACO_LIBRARY -# DRACO_ENCODER_LIBRARY -# DRACO_DECODER_LIBRARY -# -# Created on 8/8/2017 by Stephen Birarda -# Copyright 2017 High Fidelity, Inc. -# -# Distributed under the Apache License, Version 2.0. -# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -# - -include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") -hifi_library_search_hints("draco") - -find_path(DRACO_INCLUDE_DIRS draco/core/draco_types.h PATH_SUFFIXES include/draco/src include HINTS ${DRACO_SEARCH_DIRS}) - -find_library(DRACO_LIBRARY draco PATH_SUFFIXES "lib" HINTS ${DRACO_SEARCH_DIRS}) -find_library(DRACO_ENCODER_LIBRARY draco PATH_SUFFIXES "lib" HINTS ${DRACO_SEARCH_DIRS}) -find_library(DRACO_DECODER_LIBRARY draco PATH_SUFFIXES "lib" HINTS ${DRACO_SEARCH_DIRS}) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(DRACO DEFAULT_MSG DRACO_INCLUDE_DIRS DRACO_LIBRARY DRACO_ENCODER_LIBRARY DRACO_DECODER_LIBRARY) diff --git a/cmake/modules/FindEtc2Comp.cmake b/cmake/modules/FindEtc2Comp.cmake deleted file mode 100644 index 1b990368fd..0000000000 --- a/cmake/modules/FindEtc2Comp.cmake +++ /dev/null @@ -1,37 +0,0 @@ -# -# FindEtc2Comp.cmake -# -# Try to find the Etc2Comp compression library. -# -# Once done this will define -# -# ETC2COMP_FOUND - system found Etc2Comp -# ETC2COMP_INCLUDE_DIRS - the Etc2Comp include directory -# ETC2COMP_LIBRARIES - link to this to use Etc2Comp -# -# Created on 5/2/2018 by Sam Gondelman -# Copyright 2018 High Fidelity, Inc. -# -# Distributed under the Apache License, Version 2.0. -# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -# - -include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") -hifi_library_search_hints("etc2comp") - -find_path(ETC_INCLUDE_DIR NAMES Etc.h HINTS ${ETC2COMP_SEARCH_DIRS}) -find_path(ETCCODEC_INCLUDE_DIR NAMES EtcBlock4x4.h HINTS ${ETC2COMP_SEARCH_DIRS}) -set(ETC2COMP_INCLUDE_DIRS "${ETC_INCLUDE_DIR}" "${ETCCODEC_INCLUDE_DIR}") - -find_library(ETC2COMP_LIBRARY_DEBUG NAMES ETC2COMP ETC2COMP_LIB PATH_SUFFIXES EtcLib/Debug HINTS ${ETC2COMP_SEARCH_DIRS}) -find_library(ETC2COMP_LIBRARY_RELEASE NAMES ETC2COMP ETC2COMP_LIB PATH_SUFFIXES EtcLib/Release EtcLib HINTS ${ETC2COMP_SEARCH_DIRS}) - -include(SelectLibraryConfigurations) -select_library_configurations(ETC2COMP) - -set(ETC2COMP_LIBRARIES ${ETC2COMP_LIBRARY}) - -find_package_handle_standard_args(ETC2COMP "Could NOT find ETC2COMP, try to set the path to ETC2COMP root folder in the system variable ETC2COMP_ROOT_DIR or create a directory etc2comp in HIFI_LIB_DIR and paste the necessary files there" - ETC2COMP_INCLUDE_DIRS ETC2COMP_LIBRARIES) - -mark_as_advanced(ETC2COMP_INCLUDE_DIRS ETC2COMP_LIBRARIES ETC2COMP_SEARCH_DIRS) diff --git a/cmake/modules/FindGLEW.cmake b/cmake/modules/FindGLEW.cmake deleted file mode 100644 index f4eca0eddf..0000000000 --- a/cmake/modules/FindGLEW.cmake +++ /dev/null @@ -1,33 +0,0 @@ -# -# FindGLEW.cmake -# -# Try to find GLEW library and include path. Note that this only handles static GLEW. -# Once done this will define -# -# GLEW_FOUND -# GLEW_INCLUDE_DIRS -# GLEW_LIBRARIES -# -# Created on 2/6/2014 by Stephen Birarda -# Copyright 2014 High Fidelity, Inc. -# -# Adapted from FindGLEW.cmake available in the nvidia-texture-tools repository -# (https://code.google.com/p/nvidia-texture-tools/source/browse/trunk/cmake/FindGLEW.cmake?r=96) -# -# Distributed under the Apache License, Version 2.0. -# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -# - -include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") -hifi_library_search_hints("glew") - -find_path(GLEW_INCLUDE_DIRS GL/glew.h PATH_SUFFIXES include HINTS ${GLEW_SEARCH_DIRS}) - -find_library(GLEW_LIBRARY_RELEASE glew32 PATH_SUFFIXES "lib/Release/Win32" "lib" HINTS ${GLEW_SEARCH_DIRS}) -find_library(GLEW_LIBRARY_DEBUG glew32d PATH_SUFFIXES "lib/Debug/Win32" "lib" HINTS ${GLEW_SEARCH_DIRS}) - -include(SelectLibraryConfigurations) -select_library_configurations(GLEW) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(GLEW DEFAULT_MSG GLEW_INCLUDE_DIRS GLEW_LIBRARIES) \ No newline at end of file diff --git a/cmake/modules/FindJSON.cmake b/cmake/modules/FindJSON.cmake deleted file mode 100644 index d5011bd5dd..0000000000 --- a/cmake/modules/FindJSON.cmake +++ /dev/null @@ -1,19 +0,0 @@ -# -# Created by Bradley Austin Davis on 2018/07/22 -# Copyright 2013-2018 High Fidelity, Inc. -# -# Distributed under the Apache License, Version 2.0. -# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -# - -# setup hints for JSON search -include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") -hifi_library_search_hints("json") - -# locate header -find_path(JSON_INCLUDE_DIRS "json/json.hpp" HINTS ${JSON_SEARCH_DIRS}) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(JSON DEFAULT_MSG JSON_INCLUDE_DIRS) - -mark_as_advanced(JSON_INCLUDE_DIRS JSON_SEARCH_DIRS) \ No newline at end of file diff --git a/cmake/modules/FindOpenSSL.cmake b/cmake/modules/FindOpenSSL.cmake deleted file mode 100644 index 0619c4d587..0000000000 --- a/cmake/modules/FindOpenSSL.cmake +++ /dev/null @@ -1,174 +0,0 @@ -# - Try to find the OpenSSL encryption library -# Once done this will define -# -# OPENSSL_ROOT_DIR - Set this variable to the root installation of OpenSSL -# -# Read-Only variables: -# OPENSSL_FOUND - system has the OpenSSL library -# OPENSSL_INCLUDE_DIR - the OpenSSL include directory -# OPENSSL_LIBRARIES - The libraries needed to use OpenSSL -# OPENSSL_VERSION - This is set to $major.$minor.$revision$path (eg. 0.9.8s) -# -# Modified on 7/16/2014 by Stephen Birarda -# This is an adapted version of the FindOpenSSL.cmake module distributed with Cmake 2.8.12.2 -# The original license for that file is displayed below. -# -#============================================================================= -# Copyright 2006-2009 Kitware, Inc. -# Copyright 2006 Alexander Neundorf -# Copyright 2009-2011 Mathieu Malaterre -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -if (UNIX) - find_package(PkgConfig QUIET) - pkg_check_modules(_OPENSSL QUIET openssl) -endif () - -if (WIN32) - if (("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")) - set(_OPENSSL_ROOT_HINTS_AND_PATHS $ENV{VCPKG_ROOT}/installed/x64-windows) - else() - set(_OPENSSL_ROOT_HINTS_AND_PATHS $ENV{VCPKG_ROOT}/installed/x86-windows) - endif() -else () - include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") - hifi_library_search_hints("openssl") - - set(_OPENSSL_ROOT_HINTS_AND_PATHS ${OPENSSL_SEARCH_DIRS}) -endif () - -find_path(OPENSSL_INCLUDE_DIR NAMES openssl/ssl.h HINTS ${_OPENSSL_ROOT_HINTS_AND_PATHS} ${_OPENSSL_INCLUDEDIR} - PATH_SUFFIXES include -) - -if (WIN32 AND NOT CYGWIN) - if (MSVC) - # Using vcpkg builds of openssl - find_library(LIB_EAY_LIBRARY_RELEASE NAMES libeay32 HINTS ${_OPENSSL_ROOT_HINTS_AND_PATHS} PATH_SUFFIXES "lib") - find_library(SSL_EAY_LIBRARY_RELEASE NAMES ssleay32 HINTS ${_OPENSSL_ROOT_HINTS_AND_PATHS} PATH_SUFFIXES "lib") - - include(SelectLibraryConfigurations) - select_library_configurations(LIB_EAY) - select_library_configurations(SSL_EAY) - set(OPENSSL_LIBRARIES ${SSL_EAY_LIBRARY} ${LIB_EAY_LIBRARY}) - find_path(OPENSSL_DLL_PATH NAMES ssleay32.dll PATH_SUFFIXES "bin" HINTS ${_OPENSSL_ROOT_HINTS_AND_PATHS} NO_DEFAULT_PATH) - endif() -else() - - find_library(OPENSSL_SSL_LIBRARY NAMES ssl ssleay32 ssleay32MD HINTS ${_OPENSSL_ROOT_HINTS_AND_PATHS} ${_OPENSSL_LIBDIR} - PATH_SUFFIXES lib - ) - - find_library(OPENSSL_CRYPTO_LIBRARY NAMES crypto HINTS ${_OPENSSL_ROOT_HINTS_AND_PATHS} ${_OPENSSL_LIBDIR} - PATH_SUFFIXES lib - ) - - mark_as_advanced(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY) - - # compat defines - set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY}) - set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY}) - - set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) - -endif () - -function(from_hex HEX DEC) - string(TOUPPER "${HEX}" HEX) - set(_res 0) - string(LENGTH "${HEX}" _strlen) - - while (_strlen GREATER 0) - math(EXPR _res "${_res} * 16") - string(SUBSTRING "${HEX}" 0 1 NIBBLE) - string(SUBSTRING "${HEX}" 1 -1 HEX) - if (NIBBLE STREQUAL "A") - math(EXPR _res "${_res} + 10") - elseif (NIBBLE STREQUAL "B") - math(EXPR _res "${_res} + 11") - elseif (NIBBLE STREQUAL "C") - math(EXPR _res "${_res} + 12") - elseif (NIBBLE STREQUAL "D") - math(EXPR _res "${_res} + 13") - elseif (NIBBLE STREQUAL "E") - math(EXPR _res "${_res} + 14") - elseif (NIBBLE STREQUAL "F") - math(EXPR _res "${_res} + 15") - else() - math(EXPR _res "${_res} + ${NIBBLE}") - endif() - - string(LENGTH "${HEX}" _strlen) - endwhile() - - set(${DEC} ${_res} PARENT_SCOPE) -endfunction() - -if (OPENSSL_INCLUDE_DIR) - if(OPENSSL_INCLUDE_DIR AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h") - file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str - REGEX "^#[ ]?define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*") - - # The version number is encoded as 0xMNNFFPPS: major minor fix patch status - # The status gives if this is a developer or prerelease and is ignored here. - # Major, minor, and fix directly translate into the version numbers shown in - # the string. The patch field translates to the single character suffix that - # indicates the bug fix state, which 00 -> nothing, 01 -> a, 02 -> b and so - # on. - - string(REGEX REPLACE "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]).*$" - "\\1;\\2;\\3;\\4;\\5" OPENSSL_VERSION_LIST "${openssl_version_str}") - list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR) - list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR) - from_hex("${OPENSSL_VERSION_MINOR}" OPENSSL_VERSION_MINOR) - list(GET OPENSSL_VERSION_LIST 2 OPENSSL_VERSION_FIX) - from_hex("${OPENSSL_VERSION_FIX}" OPENSSL_VERSION_FIX) - list(GET OPENSSL_VERSION_LIST 3 OPENSSL_VERSION_PATCH) - - if (NOT OPENSSL_VERSION_PATCH STREQUAL "00") - from_hex("${OPENSSL_VERSION_PATCH}" _tmp) - # 96 is the ASCII code of 'a' minus 1 - math(EXPR OPENSSL_VERSION_PATCH_ASCII "${_tmp} + 96") - unset(_tmp) - # Once anyone knows how OpenSSL would call the patch versions beyond 'z' - # this should be updated to handle that, too. This has not happened yet - # so it is simply ignored here for now. - string(ASCII "${OPENSSL_VERSION_PATCH_ASCII}" OPENSSL_VERSION_PATCH_STRING) - endif () - - set(OPENSSL_VERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_FIX}${OPENSSL_VERSION_PATCH_STRING}") - endif () -endif () - -include(FindPackageHandleStandardArgs) - -set(OPENSSL_REQUIREMENTS OPENSSL_LIBRARIES OPENSSL_INCLUDE_DIR) -if (WIN32) - list(APPEND OPENSSL_REQUIREMENTS OPENSSL_DLL_PATH) -endif () - -if (OPENSSL_VERSION) - find_package_handle_standard_args(OpenSSL - REQUIRED_VARS - ${OPENSSL_REQUIREMENTS} - VERSION_VAR - OPENSSL_VERSION - FAIL_MESSAGE - "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR" - ) -else () - find_package_handle_standard_args(OpenSSL "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR" - ${OPENSSL_REQUIREMENTS} - ) -endif () - -mark_as_advanced(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES OPENSSL_SEARCH_DIRS) diff --git a/cmake/modules/FindOpenVR.cmake b/cmake/modules/FindOpenVR.cmake deleted file mode 100644 index 9cbe790a7f..0000000000 --- a/cmake/modules/FindOpenVR.cmake +++ /dev/null @@ -1,21 +0,0 @@ -# -# FindLibOVR.cmake -# -# Try to find the LibOVR library to use the Oculus - -# Once done this will define -# -# OPENVR_FOUND - system found LibOVR -# OPENVR_INCLUDE_DIRS - the LibOVR include directory -# OPENVR_LIBRARIES - Link this to use LibOVR -# -# Distributed under the Apache License, Version 2.0. -# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -# - -if (NOT ANDROID) - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(OPENVR DEFAULT_MSG OPENVR_INCLUDE_DIRS OPENVR_LIBRARIES) -endif() - -mark_as_advanced(OPENVR_INCLUDE_DIRS OPENVR_LIBRARIES OPENVR_SEARCH_DIRS) diff --git a/cmake/modules/FindSDL2.cmake b/cmake/modules/FindSDL2.cmake deleted file mode 100644 index 1a089bcb60..0000000000 --- a/cmake/modules/FindSDL2.cmake +++ /dev/null @@ -1,224 +0,0 @@ -# Locate SDL2 library -# This module defines -# SDL2_LIBRARY, the name of the library to link against -# SDL2_FOUND, if false, do not try to link to SDL2 -# SDL2_INCLUDE_DIR, where to find SDL.h -# -# This module responds to the the flag: -# SDL2_BUILDING_LIBRARY -# If this is defined, then no SDL2_main will be linked in because -# only applications need main(). -# Otherwise, it is assumed you are building an application and this -# module will attempt to locate and set the the proper link flags -# as part of the returned SDL2_LIBRARY variable. -# -# Don't forget to include SDL2main.h and SDL2main.m your project for the -# OS X framework based version. (Other versions link to -lSDL2main which -# this module will try to find on your behalf.) Also for OS X, this -# module will automatically add the -framework Cocoa on your behalf. -# -# -# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration -# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library -# (SDL2.dll, libsdl2.so, SDL2.framework, etc). -# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again. -# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value -# as appropriate. These values are used to generate the final SDL2_LIBRARY -# variable, but when these values are unset, SDL2_LIBRARY does not get created. -# -# -# $SDL2 is an environment variable that would -# correspond to the ./configure --prefix=$SDL2 -# used in building SDL2. -# l.e.galup 9-20-02 -# -# Modified by Eric Wing. -# Added code to assist with automated building by using environmental variables -# and providing a more controlled/consistent search behavior. -# Added new modifications to recognize OS X frameworks and -# additional Unix paths (FreeBSD, etc). -# Also corrected the header search path to follow "proper" SDL2 guidelines. -# Added a search for SDL2main which is needed by some platforms. -# Added a search for threads which is needed by some platforms. -# Added needed compile switches for MinGW. -# -# On OSX, this will prefer the Framework version (if found) over others. -# People will have to manually change the cache values of -# SDL2_LIBRARY to override this selection or set the CMake environment -# CMAKE_INCLUDE_PATH to modify the search paths. -# -# Note that the header path has changed from SDL2/SDL.h to just SDL.h -# This needed to change because "proper" SDL2 convention -# is #include "SDL.h", not . This is done for portability -# reasons because not all systems place things in SDL2/ (see FreeBSD). -# -# Ported by Johnny Patterson. This is a literal port for SDL2 of the FindSDL.cmake -# module with the minor edit of changing "SDL" to "SDL2" where necessary. This -# was not created for redistribution, and exists temporarily pending official -# SDL2 CMake modules. -# -# Note that on windows this will only search for the 32bit libraries, to search -# for 64bit change x86/i686-w64 to x64/x86_64-w64 - -#============================================================================= -# Copyright 2003-2009 Kitware, Inc. -# -# CMake - Cross Platform Makefile Generator -# Copyright 2000-2014 Kitware, Inc. -# Copyright 2000-2011 Insight Software Consortium -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# * Neither the names of Kitware, Inc., the Insight Software Consortium, -# nor the names of their contributors may be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) -include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") -hifi_library_search_hints("sdl2") - -FIND_PATH(SDL2_INCLUDE_DIR SDL.h - HINTS - ${SDL2_SEARCH_DIRS} - $ENV{SDL2} - PATH_SUFFIXES include/SDL2 include SDL2 - i686-w64-mingw32/include/SDL2 - x86_64-w64-mingw32/include/SDL2 - PATHS - ~/Library/Frameworks - /Library/Frameworks - /usr/local/include/SDL2 - /usr/include/SDL2 - /sw # Fink - /opt/local # DarwinPorts - /opt/csw # Blastwave - /opt -) - -# Lookup the 64 bit libs on x64 -IF(CMAKE_SIZEOF_VOID_P EQUAL 8) - FIND_LIBRARY(SDL2_LIBRARY_TEMP SDL2 - HINTS - ${SDL2_SEARCH_DIRS} - $ENV{SDL2} - PATH_SUFFIXES lib64 lib - lib/x64 - x86_64-w64-mingw32/lib - PATHS - /sw - /opt/local - /opt/csw - /opt - ) - - if (WIN32) - find_path(SDL2_DLL_PATH SDL2.dll PATH_SUFFIXES lib/x64 HINTS ${SDL2_SEARCH_DIRS}) - endif () -# On 32bit build find the 32bit libs -ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8) - FIND_LIBRARY(SDL2_LIBRARY_TEMP SDL2 - HINTS - ${SDL2_SEARCH_DIRS} - $ENV{SDL2} - PATH_SUFFIXES lib - lib/x86 - i686-w64-mingw32/lib - PATHS - /sw - /opt/local - /opt/csw - /opt - ) - - if (WIN32) - find_path(SDL2_DLL_PATH SDL2.dll PATH_SUFFIXES lib/x86 HINTS ${SDL2_SEARCH_DIRS}) - endif () -ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8) - -# SDL2 may require threads on your system. -# The Apple build may not need an explicit flag because one of the -# frameworks may already provide it. -# But for non-OSX systems, I will use the CMake Threads package. -IF(NOT APPLE) - FIND_PACKAGE(Threads) -ENDIF(NOT APPLE) - -# MinGW needs an additional library, mwindows -# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows -# (Actually on second look, I think it only needs one of the m* libraries.) -IF(MINGW) - SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") -ENDIF(MINGW) - -SET(SDL2_FOUND "NO") - IF(SDL2_LIBRARY_TEMP) - # For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa. - # CMake doesn't display the -framework Cocoa string in the UI even - # though it actually is there if I modify a pre-used variable. - # I think it has something to do with the CACHE STRING. - # So I use a temporary variable until the end so I can set the - # "real" variable in one-shot. - IF(APPLE) - SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa") - ENDIF(APPLE) - - # For threads, as mentioned Apple doesn't need this. - # In fact, there seems to be a problem if I used the Threads package - # and try using this line, so I'm just skipping it entirely for OS X. - IF(NOT APPLE) - SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) - ENDIF(NOT APPLE) - - # For MinGW library - IF(MINGW) - SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP}) - ENDIF(MINGW) - - # Set the final string here so the GUI reflects the final state. - SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found") - # Set the temp variable to INTERNAL so it is not seen in the CMake GUI - SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "") - - SET(SDL2_FOUND "YES") -ENDIF(SDL2_LIBRARY_TEMP) - -INCLUDE(FindPackageHandleStandardArgs) - -set(SDL2_REQUIREMENTS SDL2_LIBRARY SDL2_INCLUDE_DIR) -if (WIN32) - list(APPEND SDL2_REQUIREMENTS SDL2_DLL_PATH) -endif () - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS ${SDL2_REQUIREMENTS}) - -if (WIN32) - add_paths_to_fixup_libs(${SDL2_DLL_PATH}) -endif () diff --git a/cmake/ports/bullet3/CONTROL b/cmake/ports/bullet3/CONTROL new file mode 100644 index 0000000000..4941ec3e7e --- /dev/null +++ b/cmake/ports/bullet3/CONTROL @@ -0,0 +1,3 @@ +Source: bullet3 +Version: ab8f16961e19a86ee20c6a1d61f662392524cc77 +Description: Bullet Physics is a professional collision detection, rigid body, and soft body dynamics library diff --git a/cmake/ports/bullet3/portfile.cmake b/cmake/ports/bullet3/portfile.cmake new file mode 100644 index 0000000000..d4e7aaf787 --- /dev/null +++ b/cmake/ports/bullet3/portfile.cmake @@ -0,0 +1,57 @@ +# Common Ambient Variables: +# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT} +# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET} +# CURRENT_PORT_DIR = ${VCPKG_ROOT_DIR}\ports\${PORT} +# PORT = current port name (zlib, etc) +# TARGET_TRIPLET = current triplet (x86-windows, x64-windows-static, etc) +# VCPKG_CRT_LINKAGE = C runtime linkage type (static, dynamic) +# VCPKG_LIBRARY_LINKAGE = target library linkage type (static, dynamic) +# VCPKG_ROOT_DIR = +# VCPKG_TARGET_ARCHITECTURE = target architecture (x64, x86, arm) +# +include(vcpkg_common_functions) + +if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) + message(WARNING "Dynamic not supported, building static") + set(VCPKG_LIBRARY_LINKAGE static) + set(VCPKG_CRT_LINKAGE dynamic) +endif() + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO bulletphysics/bullet3 + REF ab8f16961e19a86ee20c6a1d61f662392524cc77 + SHA512 927742db29867517283d45e475f0c534a9a57e165cae221f26e08e88057253a1682ac9919b2dc547b9cf388ba0b931b175623461d44f28c9184796ba90b1ed55 + HEAD_REF master +) + + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + OPTIONS + -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON + -DUSE_MSVC_RUNTIME_LIBRARY_DLL=ON + -DUSE_GLUT=0 + -DUSE_DX11=0 + -DBUILD_DEMOS=OFF + -DBUILD_OPENGL3_DEMOS=OFF + -DBUILD_BULLET3=OFF + -DBUILD_BULLET2_DEMOS=OFF + -DBUILD_CPU_DEMOS=OFF + -DBUILD_EXTRAS=OFF + -DBUILD_UNIT_TESTS=OFF + -DBUILD_SHARED_LIBS=ON + -DINSTALL_LIBS=ON +) + +vcpkg_install_cmake() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/lib/cmake) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/lib/cmake) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/bullet/BulletInverseDynamics/details) + +vcpkg_copy_pdbs() + +# Handle copyright +file(INSTALL ${SOURCE_PATH}/LICENSE.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/bullet3 RENAME copyright) \ No newline at end of file diff --git a/cmake/ports/draco/CONTROL b/cmake/ports/draco/CONTROL new file mode 100644 index 0000000000..faa63303ae --- /dev/null +++ b/cmake/ports/draco/CONTROL @@ -0,0 +1,4 @@ +Source: draco +Version: 1.3.3 +Description: A library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics. +Build-Depends: diff --git a/cmake/ports/draco/portfile.cmake b/cmake/ports/draco/portfile.cmake new file mode 100644 index 0000000000..853d45e862 --- /dev/null +++ b/cmake/ports/draco/portfile.cmake @@ -0,0 +1,56 @@ +# Common Ambient Variables: +# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT} +# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET} +# CURRENT_PORT DIR = ${VCPKG_ROOT_DIR}\ports\${PORT} +# PORT = current port name (zlib, etc) +# TARGET_TRIPLET = current triplet (x86-windows, x64-windows-static, etc) +# VCPKG_CRT_LINKAGE = C runtime linkage type (static, dynamic) +# VCPKG_LIBRARY_LINKAGE = target library linkage type (static, dynamic) +# VCPKG_ROOT_DIR = +# VCPKG_TARGET_ARCHITECTURE = target architecture (x64, x86, arm) +# + +if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) + message(STATUS "Warning: Dynamic building not supported yet. Building static.") + set(VCPKG_LIBRARY_LINKAGE static) +endif() + +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO google/draco + REF 1.3.3 + SHA512 80ed5a623046822f5bb26b2454c8ee8cc93ffe9eb3012e8461cefdfc577b26d69a92ea0f0c5e14f5f48c1ef99f9a7263b01710df376792e74358ae14e49c3897 + HEAD_REF master +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA +) + +vcpkg_install_cmake() + +vcpkg_fixup_cmake_targets(CONFIG_PATH lib/draco/cmake) + +# Install tools and plugins +file(GLOB TOOLS "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.exe") +if(TOOLS) + file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/draco) + file(COPY ${TOOLS} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/draco) +endif() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/lib/draco) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/bin) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/lib/draco) + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) + +vcpkg_copy_pdbs() + +# Handle copyright +file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/draco) +file(RENAME ${CURRENT_PACKAGES_DIR}/share/draco/LICENSE ${CURRENT_PACKAGES_DIR}/share/draco/copyright) diff --git a/cmake/ports/etc2comp/CONTROL b/cmake/ports/etc2comp/CONTROL new file mode 100644 index 0000000000..e9034dea19 --- /dev/null +++ b/cmake/ports/etc2comp/CONTROL @@ -0,0 +1,3 @@ +Source: etc2comp +Version: 7f1843bf07825c21cab711360c1ddbad04641036 +Description: ETC2 image compression library diff --git a/cmake/ports/etc2comp/portfile.cmake b/cmake/ports/etc2comp/portfile.cmake new file mode 100644 index 0000000000..d25f24cd39 --- /dev/null +++ b/cmake/ports/etc2comp/portfile.cmake @@ -0,0 +1,39 @@ +# Common Ambient Variables: +# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT} +# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET} +# CURRENT_PORT_DIR = ${VCPKG_ROOT_DIR}\ports\${PORT} +# PORT = current port name (zlib, etc) +# TARGET_TRIPLET = current triplet (x86-windows, x64-windows-static, etc) +# VCPKG_CRT_LINKAGE = C runtime linkage type (static, dynamic) +# VCPKG_LIBRARY_LINKAGE = target library linkage type (static, dynamic) +# VCPKG_ROOT_DIR = +# VCPKG_TARGET_ARCHITECTURE = target architecture (x64, x86, arm) +# +if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) + message(STATUS "Warning: Dynamic building not supported yet. Building static.") + set(VCPKG_LIBRARY_LINKAGE static) + set(VCPKG_CRT_LINKAGE dynamic) +endif() + +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO highfidelity/etc2comp + REF 7f1843bf07825c21cab711360c1ddbad04641036 + SHA512 d747076acda8537d39585858c793a35c3dcc9ef283d723619a47f8c81ec1454c95b3340ad35f0655a939eae5b8271c801c48a9a7568311a01903a344c44af25b + HEAD_REF master +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} +) + +vcpkg_install_cmake() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/etc2comp) +file(RENAME ${CURRENT_PACKAGES_DIR}/share/etc2comp/LICENSE ${CURRENT_PACKAGES_DIR}/share/etc2comp/copyright) + +vcpkg_copy_pdbs() + diff --git a/cmake/ports/gli/CONTROL b/cmake/ports/gli/CONTROL new file mode 100644 index 0000000000..b8edac798c --- /dev/null +++ b/cmake/ports/gli/CONTROL @@ -0,0 +1,4 @@ +Source: gli +Version: 0.8.2-1 +Build-Depends: glm +Description: OpenGL Image (GLI) https://gli.g-truc.net diff --git a/cmake/ports/gli/portfile.cmake b/cmake/ports/gli/portfile.cmake new file mode 100644 index 0000000000..3052336198 --- /dev/null +++ b/cmake/ports/gli/portfile.cmake @@ -0,0 +1,19 @@ +#header-only library +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO g-truc/gli + REF 0.8.2.0 + SHA512 c254a4e1497d0add985e4a882c552db99c512cc0e9cc72145d51a6e7deada817d624d9818099a47136a8a3ef1223a26a34e355e3c713166f0bb062e506059834 + HEAD_REF master +) + +# Put the license file where vcpkg expects it +# manual.md contains the "licenses" section for the project +file(COPY ${SOURCE_PATH}/manual.md DESTINATION ${CURRENT_PACKAGES_DIR}/share/gli/) +file(RENAME ${CURRENT_PACKAGES_DIR}/share/gli/manual.md ${CURRENT_PACKAGES_DIR}/share/gli/copyright) + +# Copy the glm header files +file(GLOB HEADER_FILES "${SOURCE_PATH}/gli/*.hpp" "${SOURCE_PATH}/gli/core") +file(COPY ${HEADER_FILES} DESTINATION ${CURRENT_PACKAGES_DIR}/include/gli) diff --git a/cmake/ports/glm/CONTROL b/cmake/ports/glm/CONTROL new file mode 100644 index 0000000000..3da56cf543 --- /dev/null +++ b/cmake/ports/glm/CONTROL @@ -0,0 +1,3 @@ +Source: glm +Version: 0.9.9.3 +Description: OpenGL Mathematics (GLM) https://glm.g-truc.net diff --git a/cmake/ports/glm/disable_warnings_as_error.patch b/cmake/ports/glm/disable_warnings_as_error.patch new file mode 100644 index 0000000000..f87616b1ec --- /dev/null +++ b/cmake/ports/glm/disable_warnings_as_error.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 756673a3..5fbc8906 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -216,7 +216,7 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + message("GLM: Visual C++ - ${CMAKE_CXX_COMPILER_ID} compiler") + endif() + +- add_compile_options(/W4 /WX) ++ add_compile_options(/W4) + add_compile_options(/wd4309 /wd4324 /wd4389 /wd4127 /wd4267 /wd4146 /wd4201 /wd4464 /wd4514 /wd4701 /wd4820 /wd4365) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) + endif() diff --git a/cmake/ports/glm/portfile.cmake b/cmake/ports/glm/portfile.cmake new file mode 100644 index 0000000000..69ddd267cf --- /dev/null +++ b/cmake/ports/glm/portfile.cmake @@ -0,0 +1,32 @@ +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO g-truc/glm + REF 0.9.9.3 + SHA512 44152ea6438763feda3b78813287fd59d3574a9630a41647a157825bf5ce4a18fbbecae5a5ccd94acc118ed3d42cbce53d3a67f25632d0c00ab77e7de2bb4650 + HEAD_REF master +) + +vcpkg_apply_patches( + SOURCE_PATH ${SOURCE_PATH} + PATCHES "${CMAKE_CURRENT_LIST_DIR}/disable_warnings_as_error.patch" +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + OPTIONS -DGLM_TEST_ENABLE=OFF +) + +vcpkg_install_cmake() + +vcpkg_fixup_cmake_targets(CONFIG_PATH "lib/cmake/glm") + +vcpkg_copy_pdbs() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) + +# Put the license file where vcpkg expects it +file(COPY ${SOURCE_PATH}/manual.md DESTINATION ${CURRENT_PACKAGES_DIR}/share/glm/) +file(RENAME ${CURRENT_PACKAGES_DIR}/share/glm/manual.md ${CURRENT_PACKAGES_DIR}/share/glm/copyright) diff --git a/cmake/ports/glslang/CONTROL b/cmake/ports/glslang/CONTROL new file mode 100644 index 0000000000..74a2530e4c --- /dev/null +++ b/cmake/ports/glslang/CONTROL @@ -0,0 +1,3 @@ +Source: glslang +Version: untagged-048c4dbc7f021224a933-1 +Description: Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator diff --git a/cmake/ports/glslang/copyright b/cmake/ports/glslang/copyright new file mode 100644 index 0000000000..dfffea6a8c --- /dev/null +++ b/cmake/ports/glslang/copyright @@ -0,0 +1,35 @@ +// +//Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +//Copyright (C) 2012-2013 LunarG, Inc. +// +//All rights reserved. +// +//Redistribution and use in source and binary forms, with or without +//modification, are permitted provided that the following conditions +//are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +//POSSIBILITY OF SUCH DAMAGE. +// diff --git a/cmake/ports/glslang/portfile.cmake b/cmake/ports/glslang/portfile.cmake new file mode 100644 index 0000000000..72d62d26f3 --- /dev/null +++ b/cmake/ports/glslang/portfile.cmake @@ -0,0 +1,26 @@ +include(vcpkg_common_functions) + +vcpkg_check_linkage(ONLY_STATIC_LIBRARY) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO KhronosGroup/glslang + REF untagged-048c4dbc7f021224a933 + SHA512 e3097dd2db88320982d7da1ddce138839daf3251935909c3998a114aeadd408760b26b2d7c7ee547fb0519895ac1853a45c23df2eecf61135849b080252e9dec + HEAD_REF master +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS -DCMAKE_DEBUG_POSTFIX=d +) + +vcpkg_install_cmake() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(RENAME "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/tools") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin") + +# Handle copyright +file(COPY ${CMAKE_CURRENT_LIST_DIR}/copyright DESTINATION ${CURRENT_PACKAGES_DIR}/share/glslang) diff --git a/cmake/ports/hifi-client-deps/CONTROL b/cmake/ports/hifi-client-deps/CONTROL new file mode 100644 index 0000000000..7d4727b364 --- /dev/null +++ b/cmake/ports/hifi-client-deps/CONTROL @@ -0,0 +1,4 @@ +Source: hifi-client-deps +Version: 0 +Description: Collected dependencies for High Fidelity applications +Build-Depends: hifi-deps, glslang, nlohmann-json, openvr (windows), sdl2 (!android), spirv-cross (!android), spirv-tools (!android), vulkanmemoryallocator diff --git a/cmake/ports/hifi-client-deps/portfile.cmake b/cmake/ports/hifi-client-deps/portfile.cmake new file mode 100644 index 0000000000..065116c276 --- /dev/null +++ b/cmake/ports/hifi-client-deps/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/cmake/ports/hifi-deps/CONTROL b/cmake/ports/hifi-deps/CONTROL new file mode 100644 index 0000000000..e202d0c8f8 --- /dev/null +++ b/cmake/ports/hifi-deps/CONTROL @@ -0,0 +1,4 @@ +Source: hifi-deps +Version: 0 +Description: Collected dependencies for High Fidelity applications +Build-Depends: bullet3, draco, etc2comp, glm, nvtt, openssl (windows), tbb (!android&!osx), zlib diff --git a/cmake/ports/hifi-deps/portfile.cmake b/cmake/ports/hifi-deps/portfile.cmake new file mode 100644 index 0000000000..065116c276 --- /dev/null +++ b/cmake/ports/hifi-deps/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/cmake/ports/hifi-host-tools/CONTROL b/cmake/ports/hifi-host-tools/CONTROL new file mode 100644 index 0000000000..ec8eda965e --- /dev/null +++ b/cmake/ports/hifi-host-tools/CONTROL @@ -0,0 +1,4 @@ +Source: hifi-host-tools +Version: 0 +Description: Host build system compatible tools for building High Fidelity applications +Build-Depends: hifi-scribe, glslang, spirv-cross, spirv-tools diff --git a/cmake/ports/hifi-host-tools/portfile.cmake b/cmake/ports/hifi-host-tools/portfile.cmake new file mode 100644 index 0000000000..065116c276 --- /dev/null +++ b/cmake/ports/hifi-host-tools/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/cmake/ports/hifi-scribe/CONTROL b/cmake/ports/hifi-scribe/CONTROL new file mode 100644 index 0000000000..630bba8593 --- /dev/null +++ b/cmake/ports/hifi-scribe/CONTROL @@ -0,0 +1,3 @@ +Source: hifi-scribe +Version: 1bd638a36ca771e5a68d01985b6389b71835cbd2 +Description: Scribe is a language for generating glsl files from templates diff --git a/cmake/ports/hifi-scribe/portfile.cmake b/cmake/ports/hifi-scribe/portfile.cmake new file mode 100644 index 0000000000..2b69f7b887 --- /dev/null +++ b/cmake/ports/hifi-scribe/portfile.cmake @@ -0,0 +1,19 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO highfidelity/scribe + REF 1bd638a36ca771e5a68d01985b6389b71835cbd2 + SHA512 dbe241d86df3912e544f6b9839873f9875df54efc93822b145e7b13243eaf2e3d690bc8a28b1e52d05bdcd7e68fca6b0b2f5c43ffd0f56a9b7a50d54dcf9e31e + HEAD_REF master +) + +vcpkg_configure_cmake(SOURCE_PATH ${SOURCE_PATH}) +vcpkg_install_cmake() +vcpkg_copy_pdbs() + +# cleanup +configure_file(${SOURCE_PATH}/LICENSE ${CURRENT_PACKAGES_DIR}/share/hifi-scribe/copyright COPYONLY) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/tools) + diff --git a/cmake/ports/nlohmann-json/CONTROL b/cmake/ports/nlohmann-json/CONTROL new file mode 100644 index 0000000000..8ee107a92c --- /dev/null +++ b/cmake/ports/nlohmann-json/CONTROL @@ -0,0 +1,3 @@ +Source: nlohmann-json +Version: 3.3.0 +Description: JSON for Modern C++ diff --git a/cmake/ports/nlohmann-json/portfile.cmake b/cmake/ports/nlohmann-json/portfile.cmake new file mode 100644 index 0000000000..5cee9565e8 --- /dev/null +++ b/cmake/ports/nlohmann-json/portfile.cmake @@ -0,0 +1,18 @@ +include(vcpkg_common_functions) + +set(SOURCE_VERSION 3.3.0) + +vcpkg_download_distfile(HEADER + URLS "https://github.com/nlohmann/json/releases/download/v${SOURCE_VERSION}/json.hpp" + FILENAME "nlohmann-json-${SOURCE_VERSION}.hpp" + SHA512 c4e4bb84d1488f87a02c4e12409491225e345cc508e6dbbee1a3542fbd4953052c256d0fe78c4d3ce02d44c3a2155fe66f0c8a93a3851ddf94fec4f9f3fd6918 +) + +vcpkg_download_distfile(LICENSE + URLS "https://github.com/nlohmann/json/raw/v${SOURCE_VERSION}/LICENSE.MIT" + FILENAME "nlohmann-json-LICENSE-${SOURCE_VERSION}.txt" + SHA512 0fdb404547467f4523579acde53066badf458504d33edbb6e39df0ae145ed27d48a720189a60c225c0aab05f2aa4ce4050dcb241b56dc693f7ee9f54c8728a75 +) + +file(INSTALL ${HEADER} DESTINATION ${CURRENT_PACKAGES_DIR}/include/nlohmann RENAME json.hpp) +file(INSTALL ${LICENSE} DESTINATION ${CURRENT_PACKAGES_DIR}/share/nlohmann-json RENAME copyright) diff --git a/cmake/ports/nvtt/CONTROL b/cmake/ports/nvtt/CONTROL new file mode 100644 index 0000000000..59ba36d830 --- /dev/null +++ b/cmake/ports/nvtt/CONTROL @@ -0,0 +1,3 @@ +Source: nvtt +Version: 8c7e6b40ee5095f227b75880fabd89c99d6f34c0 +Description: Texture processing tools with support for Direct3D 10 and 11 formats. \ No newline at end of file diff --git a/cmake/ports/nvtt/portfile.cmake b/cmake/ports/nvtt/portfile.cmake new file mode 100644 index 0000000000..13b1253322 --- /dev/null +++ b/cmake/ports/nvtt/portfile.cmake @@ -0,0 +1,39 @@ +# Common Ambient Variables: +# VCPKG_ROOT_DIR = +# TARGET_TRIPLET is the current triplet (x86-windows, etc) +# PORT is the current port name (zlib, etc) +# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT} +# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET} +# +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO highfidelity/nvidia-texture-tools + REF 8c7e6b40ee5095f227b75880fabd89c99d6f34c0 + SHA512 f107d19dbbd6651ef2126b1422a5db8db291bf70311ac4fb1dbacb5ceaa8752fee38becbd32964f57596f0b84e1223bb2c3ff9d9c4fdc65c3e77a47836657cef + HEAD_REF master +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + OPTIONS + -DBUILD_TESTS=OFF + -DBUILD_TOOLS=OFF +) + +vcpkg_install_cmake() + +if(VCPKG_LIBRARY_LINKAGE STREQUAL static) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/debug/bin) +endif() + +vcpkg_copy_pdbs() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) + +# Handle copyright +file(REMOVE ${CURRENT_PACKAGES_DIR}/share/doc/nvtt/LICENSE) +file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/nvtt) +file(RENAME ${CURRENT_PACKAGES_DIR}/share/nvtt/LICENSE ${CURRENT_PACKAGES_DIR}/share/nvtt/copyright) diff --git a/cmake/ports/openssl-android/CONTROL b/cmake/ports/openssl-android/CONTROL new file mode 100644 index 0000000000..66a7b67ba6 --- /dev/null +++ b/cmake/ports/openssl-android/CONTROL @@ -0,0 +1,3 @@ +Source: openssl-android +Version: 1.0.2p +Description: OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library. diff --git a/cmake/ports/openssl-android/LICENSE.txt b/cmake/ports/openssl-android/LICENSE.txt new file mode 100644 index 0000000000..e953f590cb --- /dev/null +++ b/cmake/ports/openssl-android/LICENSE.txt @@ -0,0 +1,125 @@ + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2018 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + diff --git a/cmake/ports/openssl-android/portfile.cmake b/cmake/ports/openssl-android/portfile.cmake new file mode 100644 index 0000000000..54936d254d --- /dev/null +++ b/cmake/ports/openssl-android/portfile.cmake @@ -0,0 +1,24 @@ +include(vcpkg_common_functions) +set(OPENSSL_VERSION 1.1.0g) +set(MASTER_COPY_SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src) + +message("MASTER_COPY_SOURCE_PATH ${MASTER_COPY_SOURCE_PATH}") +vcpkg_download_distfile( + OPENSSL_SOURCE_ARCHIVE + URLS https://hifi-public.s3.amazonaws.com/dependencies/android/openssl-1.1.0g_armv8.tgz?versionId=AiiPjmgUZTgNj7YV1EEx2lL47aDvvvAW + SHA512 5d7bb6e5d3db2340449e2789bcd72da821f0e57483bac46cf06f735dffb5d73c1ca7cc53dd48f3b3979d0fe22b3ae61997c516fc0c4611af4b4b7f480e42b992 + FILENAME openssl-1.1.0g_armv8.tgz +) + +vcpkg_extract_source_archive(${OPENSSL_SOURCE_ARCHIVE}) + +file(COPY ${MASTER_COPY_SOURCE_PATH}/include DESTINATION ${CURRENT_PACKAGES_DIR}) +file(GLOB LIBS ${MASTER_COPY_SOURCE_PATH}/lib/*.a) +file(COPY ${LIBS} DESTINATION ${CURRENT_PACKAGES_DIR}/libs) +file(COPY ${LIBS} DESTINATION ${CURRENT_PACKAGES_DIR}/debug/libs) +file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/LICENSE.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl-android RENAME copyright) + + + + + diff --git a/cmake/ports/openssl-unix/CMakeLists.txt b/cmake/ports/openssl-unix/CMakeLists.txt new file mode 100644 index 0000000000..7757a4fe78 --- /dev/null +++ b/cmake/ports/openssl-unix/CMakeLists.txt @@ -0,0 +1,136 @@ +cmake_minimum_required(VERSION 3.9) +project(openssl C) + +if(NOT SOURCE_PATH) + message(FATAL_ERROR "Requires SOURCE_PATH") +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Android") + set(PLATFORM android) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64") + set(PLATFORM linux-generic64) + else() + set(PLATFORM linux-generic32) + endif() +elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(PLATFORM darwin64-x86_64-cc) +elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(PLATFORM BSD-generic64) +else() + message(FATAL_ERROR "Unknown platform") +endif() + +get_filename_component(COMPILER_ROOT "${CMAKE_C_COMPILER}" DIRECTORY) + +message("CMAKE_C_COMPILER=${CMAKE_C_COMPILER}") +message("COMPILER_ROOT=${COMPILER_ROOT}") +message("CMAKE_SYSROOT=${CMAKE_SYSROOT}") +message("CMAKE_C_FLAGS=${CMAKE_C_FLAGS}") +message("CMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}") +message("CMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}") +message("CMAKE_INCLUDE_SYSTEM_FLAG_C=${CMAKE_INCLUDE_SYSTEM_FLAG_C}") + +set(CFLAGS "${CMAKE_C_FLAGS}") +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(CFLAGS "-Wno-error=unused-command-line-argument ${CMAKE_C_FLAGS}") +endif() +if(CMAKE_C_COMPILER_TARGET) + set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_TARGET}${CMAKE_C_COMPILER_TARGET}") +endif() +if(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN) + set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN}") +endif() +if(CMAKE_SYSROOT AND CMAKE_C_COMPILE_OPTIONS_SYSROOT) + set(CFLAGS "${CFLAGS} ${CMAKE_C_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}") +endif() + +string(REGEX REPLACE "^ " "" CFLAGS "${CFLAGS}") + +if(CMAKE_HOST_WIN32) + file(TO_NATIVE_PATH ENV_PATH "${COMPILER_ROOT};$ENV{PATH}") +else() + file(TO_NATIVE_PATH ENV_PATH "${COMPILER_ROOT}:$ENV{PATH}") +endif() +set(ENV{ANDROID_DEV} "${CMAKE_SYSROOT}/usr") +set(ENV{CC} "${CMAKE_C_COMPILER}") + +message("ENV{ANDROID_DEV}=$ENV{ANDROID_DEV}") + +get_filename_component(SOURCE_PATH_NAME "${SOURCE_PATH}" NAME) +set(BUILDDIR "${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_PATH_NAME}") + +if(NOT EXISTS "${BUILDDIR}") + file(COPY ${SOURCE_PATH} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +endif() + +get_filename_component(MSYS_BIN_DIR "${MAKE}" DIRECTORY) + + +file(READ "${BUILDDIR}/Configure" _contents) +string(REPLACE "-mandroid" "" _contents "${_contents}") +file(WRITE "${BUILDDIR}/Configure" "${_contents}") + +if(BUILD_SHARED_LIBS) + set(SHARED shared) +else() + set(SHARED no-shared) +endif() + +if(CMAKE_HOST_WIN32) + set(ENV_COMMAND set) + set(PATH_VAR ";%PATH%") +else() + set(ENV_COMMAND export) + set(PATH_VAR ":$ENV{PATH}") +endif() + +add_custom_command( + OUTPUT "${BUILDDIR}/Makefile" + COMMAND ${ENV_COMMAND} CC=${CMAKE_C_COMPILER} + COMMAND ${ENV_COMMAND} AR=${CMAKE_AR} + COMMAND ${ENV_COMMAND} LD=${CMAKE_LINKER} + COMMAND ${ENV_COMMAND} RANLIB=${CMAKE_RANLIB} + COMMAND ${ENV_COMMAND} MAKE=${MAKE} + COMMAND ${ENV_COMMAND} MAKEDEPPROG=${CMAKE_C_COMPILER} + COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}" + COMMAND "${PERL}" Configure + ${SHARED} + enable-static-engine + no-ssl2 + no-krb5 + no-idea + no-bf + no-cast + no-seed + no-md2 + ${PLATFORM} + "--prefix=${CMAKE_INSTALL_PREFIX}" + "--openssldir=/etc/ssl" + ${CFLAGS} + COMMAND "${CMAKE_COMMAND}" "-DDIR=${BUILDDIR}" -P "${CMAKE_CURRENT_LIST_DIR}/remove-deps.cmake" + VERBATIM + WORKING_DIRECTORY "${BUILDDIR}" +) + +add_custom_target(depend + COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}" + COMMAND "${MAKE}" links # depend MAKEDEPPROG=${CMAKE_C_COMPILER} + VERBATIM + WORKING_DIRECTORY "${BUILDDIR}" + DEPENDS "${BUILDDIR}/Makefile" +) +add_custom_target(build_libs ALL + COMMAND ${ENV_COMMAND} "PATH=${MSYS_BIN_DIR}${PATH_VAR}" + COMMAND "${CMAKE_COMMAND}" -E touch "${BUILDDIR}/krb5.h" + COMMAND "${MAKE}" build_libs + VERBATIM + WORKING_DIRECTORY "${BUILDDIR}" + DEPENDS depend + BYPRODUCTS "${BUILDDIR}/libssl.a" "${BUILDDIR}/libcrypto.a" +) + +install( + FILES "${BUILDDIR}/libssl.a" "${BUILDDIR}/libcrypto.a" + DESTINATION lib +) diff --git a/cmake/ports/openssl-unix/CONTROL b/cmake/ports/openssl-unix/CONTROL new file mode 100644 index 0000000000..6413eb3712 --- /dev/null +++ b/cmake/ports/openssl-unix/CONTROL @@ -0,0 +1,3 @@ +Source: openssl-unix +Version: 1.0.2p +Description: OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library. diff --git a/cmake/ports/openssl-unix/ConfigureIncludeQuotesFix.patch b/cmake/ports/openssl-unix/ConfigureIncludeQuotesFix.patch new file mode 100644 index 0000000000..09494f5650 --- /dev/null +++ b/cmake/ports/openssl-unix/ConfigureIncludeQuotesFix.patch @@ -0,0 +1,13 @@ +diff --git a/Configure b/Configure +index c98107a..77ad9d3 100644 +--- a/Configure ++++ b/Configure +@@ -972,7 +972,7 @@ PROCESS_ARGS: + } + elsif (/^--with-zlib-include=(.*)$/) + { +- $withargs{"zlib-include"}="-I$1"; ++ $withargs{"zlib-include"}="-I\"$1\""; + } + elsif (/^--with-fipsdir=(.*)$/) + { diff --git a/cmake/ports/openssl-unix/EmbedSymbolsInStaticLibsZ7.patch b/cmake/ports/openssl-unix/EmbedSymbolsInStaticLibsZ7.patch new file mode 100644 index 0000000000..1a8de2c4bd --- /dev/null +++ b/cmake/ports/openssl-unix/EmbedSymbolsInStaticLibsZ7.patch @@ -0,0 +1,25 @@ +diff --git a/util/pl/VC-32.pl b/util/pl/VC-32.pl +index dba96cb..5722f6e 100644 +--- a/util/pl/VC-32.pl ++++ b/util/pl/VC-32.pl +@@ -154,9 +154,17 @@ else + $cflags=$opt_cflags.$base_cflags; + } + +-# generate symbols.pdb unconditionally +-$app_cflag.=" /Zi /Fd\$(TMP_D)/app"; +-$lib_cflag.=" /Zi /Fd\$(TMP_D)/lib"; ++# generate symbols.pdb when building dlls and embed symbols when building static libs ++if ($shlib) ++ { ++ $app_cflag.=" /Zi /Fd\$(TMP_D)/app.pdb"; ++ $lib_cflag.=" /Zi /Fd\$(TMP_D)/lib.pdb"; ++ } ++else ++ { ++ $app_cflag.=" /Z7"; ++ $lib_cflag.=" /Z7"; ++ } + $lflags.=" /debug"; + + $obj='.obj'; diff --git a/cmake/ports/openssl-unix/STRINGIFYPatch.patch b/cmake/ports/openssl-unix/STRINGIFYPatch.patch new file mode 100644 index 0000000000..dd8f9c2972 --- /dev/null +++ b/cmake/ports/openssl-unix/STRINGIFYPatch.patch @@ -0,0 +1,23 @@ +diff --git a/crypto/cversion.c b/crypto/cversion.c +index bfff699..17b7912 100644 +--- a/crypto/cversion.c ++++ b/crypto/cversion.c +@@ -56,6 +56,9 @@ + * [including the GNU Public Licence.] + */ + ++#define STRINGIFY2(x) #x ++#define STRINGIFY(x) STRINGIFY2(x) ++ + #include "cryptlib.h" + + #ifndef NO_WINDOWS_BRAINDEATH +@@ -79,7 +82,7 @@ const char *SSLeay_version(int t) + } + if (t == SSLEAY_CFLAGS) { + #ifdef CFLAGS +- return (CFLAGS); ++ return STRINGIFY(CFLAGS); + #else + return ("compiler: information not available"); + #endif diff --git a/cmake/ports/openssl-unix/portfile.cmake b/cmake/ports/openssl-unix/portfile.cmake new file mode 100644 index 0000000000..1484fc66c6 --- /dev/null +++ b/cmake/ports/openssl-unix/portfile.cmake @@ -0,0 +1,63 @@ +if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" OR NOT VCPKG_CMAKE_SYSTEM_NAME) + message(FATAL_ERROR "This port is only for openssl on Unix-like systems") +endif() + +include(vcpkg_common_functions) +set(OPENSSL_VERSION 1.0.2p) +set(MASTER_COPY_SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/openssl-${OPENSSL_VERSION}) + +vcpkg_find_acquire_program(PERL) + +vcpkg_download_distfile(OPENSSL_SOURCE_ARCHIVE + URLS "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz" "https://www.openssl.org/source/old/1.0.2/openssl-${OPENSSL_VERSION}.tar.gz" + FILENAME "openssl-${OPENSSL_VERSION}.tar.gz" + SHA512 958c5a7c3324bbdc8f07dfb13e11329d9a1b4452c07cf41fbd2d42b5fe29c95679332a3476d24c2dc2b88be16e4a24744aba675a05a388c0905756c77a8a2f16 +) + +vcpkg_extract_source_archive(${OPENSSL_SOURCE_ARCHIVE}) +vcpkg_apply_patches( + SOURCE_PATH ${MASTER_COPY_SOURCE_PATH} + PATCHES ${CMAKE_CURRENT_LIST_DIR}/ConfigureIncludeQuotesFix.patch + ${CMAKE_CURRENT_LIST_DIR}/STRINGIFYPatch.patch + ${CMAKE_CURRENT_LIST_DIR}/EmbedSymbolsInStaticLibsZ7.patch +) + +if(CMAKE_HOST_WIN32) + vcpkg_acquire_msys(MSYS_ROOT PACKAGES make) + set(BASH ${MSYS_ROOT}/usr/bin/bash.exe) + set(MAKE ${MSYS_ROOT}/usr/bin/make.exe) +else() + find_program(MAKE make) + if(NOT MAKE) + message(FATAL_ERROR "Could not find make. Please install it through your package manager.") + endif() +endif() + +vcpkg_configure_cmake( + SOURCE_PATH ${CMAKE_CURRENT_LIST_DIR} + PREFER_NINJA + OPTIONS + -DSOURCE_PATH=${MASTER_COPY_SOURCE_PATH} + -DPERL=${PERL} + -DMAKE=${MAKE} + OPTIONS_RELEASE + -DINSTALL_HEADERS=ON +) + +vcpkg_install_cmake() + +file(GLOB HEADERS ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*/include/openssl/*.h) +set(RESOLVED_HEADERS) +foreach(HEADER ${HEADERS}) + get_filename_component(X "${HEADER}" REALPATH) + list(APPEND RESOLVED_HEADERS "${X}") +endforeach() + +file(INSTALL ${RESOLVED_HEADERS} DESTINATION ${CURRENT_PACKAGES_DIR}/include/openssl) +file(INSTALL ${MASTER_COPY_SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl-unix RENAME copyright) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + file(COPY ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl) +endif() + +vcpkg_test_cmake(PACKAGE_NAME OpenSSL MODULE) diff --git a/cmake/ports/openssl-unix/remove-deps.cmake b/cmake/ports/openssl-unix/remove-deps.cmake new file mode 100644 index 0000000000..53ad6ef290 --- /dev/null +++ b/cmake/ports/openssl-unix/remove-deps.cmake @@ -0,0 +1,7 @@ +file(GLOB_RECURSE MAKEFILES ${DIR}/*/Makefile) +foreach(MAKEFILE ${MAKEFILES}) + message("removing deps from ${MAKEFILE}") + file(READ "${MAKEFILE}" _contents) + string(REGEX REPLACE "\n# DO NOT DELETE THIS LINE.*" "" _contents "${_contents}") + file(WRITE "${MAKEFILE}" "${_contents}") +endforeach() diff --git a/cmake/ports/openssl-unix/usage b/cmake/ports/openssl-unix/usage new file mode 100644 index 0000000000..cf83f33916 --- /dev/null +++ b/cmake/ports/openssl-unix/usage @@ -0,0 +1,4 @@ +The package openssl is compatible with built-in CMake targets: + + find_package(OpenSSL REQUIRED) + target_link_libraries(main PRIVATE OpenSSL::SSL OpenSSL::Crypto) diff --git a/cmake/ports/openssl-unix/vcpkg-cmake-wrapper.cmake b/cmake/ports/openssl-unix/vcpkg-cmake-wrapper.cmake new file mode 100644 index 0000000000..3d7255c5dd --- /dev/null +++ b/cmake/ports/openssl-unix/vcpkg-cmake-wrapper.cmake @@ -0,0 +1,10 @@ +_find_package(${ARGS}) +if(OPENSSL_FOUND) + find_library(OPENSSL_DL_LIBRARY NAMES dl) + if(OPENSSL_DL_LIBRARY) + list(APPEND OPENSSL_LIBRARIES "dl") + if(TARGET OpenSSL::Crypto) + set_property(TARGET OpenSSL::Crypto APPEND PROPERTY INTERFACE_LINK_LIBRARIES "dl") + endif() + endif() +endif() diff --git a/cmake/ports/openssl-windows/CONTROL b/cmake/ports/openssl-windows/CONTROL new file mode 100644 index 0000000000..881c311d00 --- /dev/null +++ b/cmake/ports/openssl-windows/CONTROL @@ -0,0 +1,3 @@ +Source: openssl-windows +Version: 1.0.2p-1 +Description: OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library. diff --git a/cmake/ports/openssl-windows/ConfigureIncludeQuotesFix.patch b/cmake/ports/openssl-windows/ConfigureIncludeQuotesFix.patch new file mode 100644 index 0000000000..09494f5650 --- /dev/null +++ b/cmake/ports/openssl-windows/ConfigureIncludeQuotesFix.patch @@ -0,0 +1,13 @@ +diff --git a/Configure b/Configure +index c98107a..77ad9d3 100644 +--- a/Configure ++++ b/Configure +@@ -972,7 +972,7 @@ PROCESS_ARGS: + } + elsif (/^--with-zlib-include=(.*)$/) + { +- $withargs{"zlib-include"}="-I$1"; ++ $withargs{"zlib-include"}="-I\"$1\""; + } + elsif (/^--with-fipsdir=(.*)$/) + { diff --git a/cmake/ports/openssl-windows/EmbedSymbolsInStaticLibsZ7.patch b/cmake/ports/openssl-windows/EmbedSymbolsInStaticLibsZ7.patch new file mode 100644 index 0000000000..1a8de2c4bd --- /dev/null +++ b/cmake/ports/openssl-windows/EmbedSymbolsInStaticLibsZ7.patch @@ -0,0 +1,25 @@ +diff --git a/util/pl/VC-32.pl b/util/pl/VC-32.pl +index dba96cb..5722f6e 100644 +--- a/util/pl/VC-32.pl ++++ b/util/pl/VC-32.pl +@@ -154,9 +154,17 @@ else + $cflags=$opt_cflags.$base_cflags; + } + +-# generate symbols.pdb unconditionally +-$app_cflag.=" /Zi /Fd\$(TMP_D)/app"; +-$lib_cflag.=" /Zi /Fd\$(TMP_D)/lib"; ++# generate symbols.pdb when building dlls and embed symbols when building static libs ++if ($shlib) ++ { ++ $app_cflag.=" /Zi /Fd\$(TMP_D)/app.pdb"; ++ $lib_cflag.=" /Zi /Fd\$(TMP_D)/lib.pdb"; ++ } ++else ++ { ++ $app_cflag.=" /Z7"; ++ $lib_cflag.=" /Z7"; ++ } + $lflags.=" /debug"; + + $obj='.obj'; diff --git a/cmake/ports/openssl-windows/STRINGIFYPatch.patch b/cmake/ports/openssl-windows/STRINGIFYPatch.patch new file mode 100644 index 0000000000..dd8f9c2972 --- /dev/null +++ b/cmake/ports/openssl-windows/STRINGIFYPatch.patch @@ -0,0 +1,23 @@ +diff --git a/crypto/cversion.c b/crypto/cversion.c +index bfff699..17b7912 100644 +--- a/crypto/cversion.c ++++ b/crypto/cversion.c +@@ -56,6 +56,9 @@ + * [including the GNU Public Licence.] + */ + ++#define STRINGIFY2(x) #x ++#define STRINGIFY(x) STRINGIFY2(x) ++ + #include "cryptlib.h" + + #ifndef NO_WINDOWS_BRAINDEATH +@@ -79,7 +82,7 @@ const char *SSLeay_version(int t) + } + if (t == SSLEAY_CFLAGS) { + #ifdef CFLAGS +- return (CFLAGS); ++ return STRINGIFY(CFLAGS); + #else + return ("compiler: information not available"); + #endif diff --git a/cmake/ports/openssl-windows/portfile.cmake b/cmake/ports/openssl-windows/portfile.cmake new file mode 100644 index 0000000000..d58d51431e --- /dev/null +++ b/cmake/ports/openssl-windows/portfile.cmake @@ -0,0 +1,163 @@ +if(VCPKG_CMAKE_SYSTEM_NAME) + message(FATAL_ERROR "This port is only for building openssl on Windows Desktop") +endif() + +include(vcpkg_common_functions) +set(OPENSSL_VERSION 1.0.2p) +set(MASTER_COPY_SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/openssl-${OPENSSL_VERSION}) + +vcpkg_find_acquire_program(PERL) + +get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY) +set(ENV{PATH} "$ENV{PATH};${PERL_EXE_PATH}") + +vcpkg_download_distfile(OPENSSL_SOURCE_ARCHIVE + URLS "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz" "https://www.openssl.org/source/old/1.0.2/openssl-${OPENSSL_VERSION}.tar.gz" + FILENAME "openssl-${OPENSSL_VERSION}.tar.gz" + SHA512 958c5a7c3324bbdc8f07dfb13e11329d9a1b4452c07cf41fbd2d42b5fe29c95679332a3476d24c2dc2b88be16e4a24744aba675a05a388c0905756c77a8a2f16 +) + +vcpkg_extract_source_archive(${OPENSSL_SOURCE_ARCHIVE}) +vcpkg_apply_patches( + SOURCE_PATH ${MASTER_COPY_SOURCE_PATH} + PATCHES ${CMAKE_CURRENT_LIST_DIR}/ConfigureIncludeQuotesFix.patch + ${CMAKE_CURRENT_LIST_DIR}/STRINGIFYPatch.patch + ${CMAKE_CURRENT_LIST_DIR}/EmbedSymbolsInStaticLibsZ7.patch +) + +vcpkg_find_acquire_program(NASM) +get_filename_component(NASM_EXE_PATH ${NASM} DIRECTORY) +set(ENV{PATH} "${NASM_EXE_PATH};$ENV{PATH}") + +vcpkg_find_acquire_program(JOM) + +set(CONFIGURE_COMMAND ${PERL} Configure + enable-static-engine + enable-capieng + no-ssl2 + -utf-8 +) + +if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") + set(OPENSSL_ARCH VC-WIN32) + set(OPENSSL_DO "ms\\do_nasm.bat") +elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(OPENSSL_ARCH VC-WIN64A) + set(OPENSSL_DO "ms\\do_win64a.bat") +else() + message(FATAL_ERROR "Unsupported target architecture: ${VCPKG_TARGET_ARCHITECTURE}") +endif() + +if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) + set(OPENSSL_MAKEFILE "ms\\ntdll.mak") +else() + set(OPENSSL_MAKEFILE "ms\\nt.mak") +endif() + +file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg) + + +if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + file(COPY ${MASTER_COPY_SOURCE_PATH} DESTINATION ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel) + set(SOURCE_PATH_RELEASE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/openssl-${OPENSSL_VERSION}) + set(OPENSSLDIR_RELEASE ${CURRENT_PACKAGES_DIR}) + + message(STATUS "Configure ${TARGET_TRIPLET}-rel") + vcpkg_execute_required_process( + COMMAND ${CONFIGURE_COMMAND} ${OPENSSL_ARCH} "--prefix=${OPENSSLDIR_RELEASE}" "--openssldir=${OPENSSLDIR_RELEASE}" -FS + WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} + LOGNAME configure-perl-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-rel + ) + vcpkg_execute_required_process( + COMMAND ${OPENSSL_DO} + WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} + LOGNAME configure-do-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-rel + ) + message(STATUS "Configure ${TARGET_TRIPLET}-rel done") + + message(STATUS "Build ${TARGET_TRIPLET}-rel") + # Openssl's buildsystem has a race condition which will cause JOM to fail at some point. + # This is ok; we just do as much work as we can in parallel first, then follow up with a single-threaded build. + make_directory(${SOURCE_PATH_RELEASE}/inc32/openssl) + execute_process( + COMMAND ${JOM} -k -j $ENV{NUMBER_OF_PROCESSORS} -f ${OPENSSL_MAKEFILE} + WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} + OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-0-out.log + ERROR_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-0-err.log + ) + vcpkg_execute_required_process( + COMMAND nmake -f ${OPENSSL_MAKEFILE} install + WORKING_DIRECTORY ${SOURCE_PATH_RELEASE} + LOGNAME build-${TARGET_TRIPLET}-rel-1) + + message(STATUS "Build ${TARGET_TRIPLET}-rel done") +endif() + + +if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + message(STATUS "Configure ${TARGET_TRIPLET}-dbg") + file(COPY ${MASTER_COPY_SOURCE_PATH} DESTINATION ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg) + set(SOURCE_PATH_DEBUG ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/openssl-${OPENSSL_VERSION}) + set(OPENSSLDIR_DEBUG ${CURRENT_PACKAGES_DIR}/debug) + + vcpkg_execute_required_process( + COMMAND ${CONFIGURE_COMMAND} debug-${OPENSSL_ARCH} "--prefix=${OPENSSLDIR_DEBUG}" "--openssldir=${OPENSSLDIR_DEBUG}" -FS + WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} + LOGNAME configure-perl-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-dbg + ) + vcpkg_execute_required_process( + COMMAND ${OPENSSL_DO} + WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} + LOGNAME configure-do-${TARGET_TRIPLET}-${CMAKE_BUILD_TYPE}-dbg + ) + message(STATUS "Configure ${TARGET_TRIPLET}-dbg done") + + message(STATUS "Build ${TARGET_TRIPLET}-dbg") + make_directory(${SOURCE_PATH_DEBUG}/inc32/openssl) + execute_process( + COMMAND ${JOM} -k -j $ENV{NUMBER_OF_PROCESSORS} -f ${OPENSSL_MAKEFILE} + WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} + OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-dbg-0-out.log + ERROR_FILE ${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-dbg-0-err.log + ) + vcpkg_execute_required_process( + COMMAND nmake -f ${OPENSSL_MAKEFILE} install + WORKING_DIRECTORY ${SOURCE_PATH_DEBUG} + LOGNAME build-${TARGET_TRIPLET}-dbg-1) + + message(STATUS "Build ${TARGET_TRIPLET}-dbg done") +endif() + + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(REMOVE + ${CURRENT_PACKAGES_DIR}/debug/bin/openssl.exe + ${CURRENT_PACKAGES_DIR}/debug/openssl.cnf + ${CURRENT_PACKAGES_DIR}/openssl.cnf +) + +file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/openssl/) +file(RENAME ${CURRENT_PACKAGES_DIR}/bin/openssl.exe ${CURRENT_PACKAGES_DIR}/tools/openssl/openssl.exe) + +vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/openssl) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL static) + # They should be empty, only the exes deleted above were in these directories + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/bin/) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin/) +endif() + +file(READ "${CURRENT_PACKAGES_DIR}/include/openssl/dtls1.h" _contents) +string(REPLACE "" "" _contents "${_contents}") +file(WRITE "${CURRENT_PACKAGES_DIR}/include/openssl/dtls1.h" "${_contents}") + +file(READ "${CURRENT_PACKAGES_DIR}/include/openssl/rand.h" _contents) +string(REPLACE "# include " "#ifndef _WINSOCKAPI_\n#define _WINSOCKAPI_\n#endif\n# include " _contents "${_contents}") +file(WRITE "${CURRENT_PACKAGES_DIR}/include/openssl/rand.h" "${_contents}") + +vcpkg_copy_pdbs() + +file(COPY ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT}) +file(INSTALL ${MASTER_COPY_SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) + +vcpkg_test_cmake(PACKAGE_NAME OpenSSL MODULE) diff --git a/cmake/ports/openssl-windows/usage b/cmake/ports/openssl-windows/usage new file mode 100644 index 0000000000..cf83f33916 --- /dev/null +++ b/cmake/ports/openssl-windows/usage @@ -0,0 +1,4 @@ +The package openssl is compatible with built-in CMake targets: + + find_package(OpenSSL REQUIRED) + target_link_libraries(main PRIVATE OpenSSL::SSL OpenSSL::Crypto) diff --git a/cmake/ports/openssl/CONTROL b/cmake/ports/openssl/CONTROL new file mode 100644 index 0000000000..16a1932485 --- /dev/null +++ b/cmake/ports/openssl/CONTROL @@ -0,0 +1,4 @@ +Source: openssl +Version: 0 +Description: OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library. +Build-Depends: openssl-windows (windows), openssl-android (android), openssl-unix (!android&!windows) diff --git a/cmake/ports/openssl/portfile.cmake b/cmake/ports/openssl/portfile.cmake new file mode 100644 index 0000000000..3d55c367f5 --- /dev/null +++ b/cmake/ports/openssl/portfile.cmake @@ -0,0 +1,2 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/openssl/) diff --git a/cmake/ports/openssl/usage b/cmake/ports/openssl/usage new file mode 100644 index 0000000000..cf83f33916 --- /dev/null +++ b/cmake/ports/openssl/usage @@ -0,0 +1,4 @@ +The package openssl is compatible with built-in CMake targets: + + find_package(OpenSSL REQUIRED) + target_link_libraries(main PRIVATE OpenSSL::SSL OpenSSL::Crypto) diff --git a/cmake/ports/openvr/CONTROL b/cmake/ports/openvr/CONTROL new file mode 100644 index 0000000000..b0f337d0a9 --- /dev/null +++ b/cmake/ports/openvr/CONTROL @@ -0,0 +1,3 @@ +Source: openvr +Version: 1.0.16 +Description: an API and runtime that allows access to VR hardware from multiple vendors without requiring that applications have specific knowledge of the hardware they are targeting. diff --git a/cmake/ports/openvr/portfile.cmake b/cmake/ports/openvr/portfile.cmake new file mode 100644 index 0000000000..5e4211907d --- /dev/null +++ b/cmake/ports/openvr/portfile.cmake @@ -0,0 +1,47 @@ +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO ValveSoftware/openvr + REF v1.0.16 + SHA512 967356563ba4232da5361510c7519d3058e09eced4571aadc00d8a75ab1f299a0aebda2b0b10b0ffb6c6a443fd718634d0c0103964e289961449c93e8d7b9d02 + HEAD_REF master +) + +set(VCPKG_LIBRARY_LINKAGE dynamic) + +if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(ARCH_PATH "win64") +elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") + set(ARCH_PATH "win32") +else() + message(FATAL_ERROR "Package only supports x64 and x86 windows.") +endif() + +if(VCPKG_CMAKE_SYSTEM_NAME) + message(FATAL_ERROR "Package only supports windows desktop.") +endif() + +file(MAKE_DIRECTORY + ${CURRENT_PACKAGES_DIR}/lib + ${CURRENT_PACKAGES_DIR}/bin + ${CURRENT_PACKAGES_DIR}/debug/lib + ${CURRENT_PACKAGES_DIR}/debug/bin +) +file(COPY ${SOURCE_PATH}/lib/${ARCH_PATH}/openvr_api.lib DESTINATION ${CURRENT_PACKAGES_DIR}/lib) +file(COPY ${SOURCE_PATH}/lib/${ARCH_PATH}/openvr_api.lib DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib) +file(COPY + ${SOURCE_PATH}/bin/${ARCH_PATH}/openvr_api.dll + ${SOURCE_PATH}/bin/${ARCH_PATH}/openvr_api.pdb + DESTINATION ${CURRENT_PACKAGES_DIR}/bin +) +file(COPY + ${SOURCE_PATH}/bin/${ARCH_PATH}/openvr_api.dll + ${SOURCE_PATH}/bin/${ARCH_PATH}/openvr_api.pdb + DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin +) +file(COPY ${SOURCE_PATH}/headers DESTINATION ${CURRENT_PACKAGES_DIR}) +file(RENAME ${CURRENT_PACKAGES_DIR}/headers ${CURRENT_PACKAGES_DIR}/include) + +file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/openvr) +file(RENAME ${CURRENT_PACKAGES_DIR}/share/openvr/LICENSE ${CURRENT_PACKAGES_DIR}/share/openvr/copyright) diff --git a/cmake/ports/sdl2/CONTROL b/cmake/ports/sdl2/CONTROL new file mode 100644 index 0000000000..6f39484dd6 --- /dev/null +++ b/cmake/ports/sdl2/CONTROL @@ -0,0 +1,3 @@ +Source: sdl2 +Version: 2.0.8-1 +Description: Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D. diff --git a/cmake/ports/sdl2/enable-winrt-cmake.patch b/cmake/ports/sdl2/enable-winrt-cmake.patch new file mode 100644 index 0000000000..dcd2afa67c --- /dev/null +++ b/cmake/ports/sdl2/enable-winrt-cmake.patch @@ -0,0 +1,206 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 73d9407..082fbc5 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -3,7 +3,11 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + endif() + + cmake_minimum_required(VERSION 2.8.11) +-project(SDL2 C) ++if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") ++ project(SDL2 C CXX) ++else() ++ project(SDL2 C) ++endif() + + # !!! FIXME: this should probably do "MACOSX_RPATH ON" as a target property + # !!! FIXME: for the SDL2 shared library (so you get an +@@ -358,7 +362,6 @@ file(GLOB SOURCE_FILES + ${SDL2_SOURCE_DIR}/src/timer/*.c + ${SDL2_SOURCE_DIR}/src/video/*.c) + +- + if(ASSERTIONS STREQUAL "auto") + # Do nada - use optimization settings to determine the assertion level + elseif(ASSERTIONS STREQUAL "disabled") +@@ -1132,6 +1135,22 @@ elseif(WINDOWS) + file(GLOB CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES}) + ++ if(WINDOWS_STORE) ++ cmake_minimum_required(VERSION 3.0) ++ add_definitions(-DSDL_BUILDING_WINRT=1 -ZW) ++ link_libraries( ++ -nodefaultlib:vccorlib$<$:d> ++ -nodefaultlib:msvcrt$<$:d> ++ vccorlib$<$:d>.lib ++ msvcrt$<$:d>.lib ++ ) ++ endif() ++ ++ if(WINDOWS_STORE) ++ file(GLOB WINRT_SOURCE_FILES ${SDL2_SOURCE_DIR}/src/core/winrt/*.c ${SDL2_SOURCE_DIR}/src/core/winrt/*.cpp) ++ set(SOURCE_FILES ${SOURCE_FILES} ${WINRT_SOURCE_FILES}) ++ endif() ++ + if(MSVC) + # Prevent codegen that would use the VC runtime libraries. + set_property(DIRECTORY . APPEND PROPERTY COMPILE_OPTIONS "/GS-") +@@ -1176,7 +1195,11 @@ elseif(WINDOWS) + check_include_file(d3d11_1.h HAVE_D3D11_H) + check_include_file(ddraw.h HAVE_DDRAW_H) + check_include_file(dsound.h HAVE_DSOUND_H) +- check_include_file(dinput.h HAVE_DINPUT_H) ++ if(WINDOWS_STORE) ++ set(HAVE_DINPUT_H 0) ++ else() ++ check_include_file(dinput.h HAVE_DINPUT_H) ++ endif() + check_include_file(xaudio2.h HAVE_XAUDIO2_H) + check_include_file(mmdeviceapi.h HAVE_MMDEVICEAPI_H) + check_include_file(audioclient.h HAVE_AUDIOCLIENT_H) +@@ -1193,12 +1216,14 @@ elseif(WINDOWS) + endif() + + if(SDL_AUDIO) +- set(SDL_AUDIO_DRIVER_WINMM 1) +- file(GLOB WINMM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/winmm/*.c) +- set(SOURCE_FILES ${SOURCE_FILES} ${WINMM_AUDIO_SOURCES}) +- set(HAVE_SDL_AUDIO TRUE) ++ if(NOT WINDOWS_STORE) ++ set(SDL_AUDIO_DRIVER_WINMM 1) ++ file(GLOB WINMM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/winmm/*.c) ++ set(SOURCE_FILES ${SOURCE_FILES} ${WINMM_AUDIO_SOURCES}) ++ set(HAVE_SDL_AUDIO TRUE) ++ endif() + +- if(HAVE_DSOUND_H) ++ if(HAVE_DSOUND_H AND NOT WINDOWS_STORE) + set(SDL_AUDIO_DRIVER_DSOUND 1) + file(GLOB DSOUND_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/directsound/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${DSOUND_AUDIO_SOURCES}) +@@ -1208,9 +1233,10 @@ elseif(WINDOWS) + set(SDL_AUDIO_DRIVER_XAUDIO2 1) + file(GLOB XAUDIO2_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/xaudio2/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${XAUDIO2_AUDIO_SOURCES}) ++ set(HAVE_SDL_AUDIO TRUE) + endif() + +- if(HAVE_AUDIOCLIENT_H AND HAVE_MMDEVICEAPI_H) ++ if(HAVE_AUDIOCLIENT_H AND HAVE_MMDEVICEAPI_H AND NOT WINDOWS_STORE) + set(SDL_AUDIO_DRIVER_WASAPI 1) + file(GLOB WASAPI_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/wasapi/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${WASAPI_AUDIO_SOURCES}) +@@ -1222,11 +1248,20 @@ elseif(WINDOWS) + if(NOT SDL_LOADSO) + message_error("SDL_VIDEO requires SDL_LOADSO, which is not enabled") + endif() +- set(SDL_VIDEO_DRIVER_WINDOWS 1) +- file(GLOB WIN_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/windows/*.c) ++ if(WINDOWS_STORE) ++ set(SDL_VIDEO_DRIVER_WINRT 1) ++ file(GLOB WIN_VIDEO_SOURCES ++ ${SDL2_SOURCE_DIR}/src/video/winrt/*.c ++ ${SDL2_SOURCE_DIR}/src/video/winrt/*.cpp ++ ${SDL2_SOURCE_DIR}/src/render/direct3d11/*.cpp ++ ) ++ else() ++ set(SDL_VIDEO_DRIVER_WINDOWS 1) ++ file(GLOB WIN_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/windows/*.c) ++ endif() + set(SOURCE_FILES ${SOURCE_FILES} ${WIN_VIDEO_SOURCES}) + +- if(RENDER_D3D AND HAVE_D3D_H) ++ if(RENDER_D3D AND HAVE_D3D_H AND NOT WINDOWS_STORE) + set(SDL_VIDEO_RENDER_D3D 1) + set(HAVE_RENDER_D3D TRUE) + endif() +@@ -1249,20 +1284,31 @@ elseif(WINDOWS) + endif() + + if(SDL_POWER) +- set(SDL_POWER_WINDOWS 1) +- set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/power/windows/SDL_syspower.c) ++ if(WINDOWS_STORE) ++ set(SDL_POWER_WINRT 1) ++ set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/power/winrt/SDL_syspower.cpp) ++ else() ++ set(SDL_POWER_WINDOWS 1) ++ set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/power/windows/SDL_syspower.c) ++ endif() + set(HAVE_SDL_POWER TRUE) + endif() + + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_WINDOWS 1) +- file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/windows/*.c) ++ if(WINDOWS_STORE) ++ file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/winrt/*.cpp) ++ else() ++ file(GLOB FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/windows/*.c) ++ endif() + set(SOURCE_FILES ${SOURCE_FILES} ${FILESYSTEM_SOURCES}) + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + + # Libraries for Win32 native and MinGW +- list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid) ++ if(NOT WINDOWS_STORE) ++ list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid) ++ endif() + + # TODO: in configure.in the check for timers is set on + # cygwin | mingw32* - does this include mingw32CE? +@@ -1284,7 +1330,7 @@ elseif(WINDOWS) + set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES}) + + if(SDL_VIDEO) +- if(VIDEO_OPENGL) ++ if(VIDEO_OPENGL AND NOT WINDOWS_STORE) + set(SDL_VIDEO_OPENGL 1) + set(SDL_VIDEO_OPENGL_WGL 1) + set(SDL_VIDEO_RENDER_OGL 1) +@@ -1688,9 +1734,11 @@ endif() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") + + # Always build SDLmain +-add_library(SDL2main STATIC ${SDLMAIN_SOURCES}) +-target_include_directories(SDL2main PUBLIC $) +-set(_INSTALL_LIBS "SDL2main") ++if(NOT WINDOWS_STORE) ++ add_library(SDL2main STATIC ${SDLMAIN_SOURCES}) ++ target_include_directories(SDL2main PUBLIC $) ++ set(_INSTALL_LIBS "SDL2main") ++endif() + + if(SDL_SHARED) + add_library(SDL2 SHARED ${SOURCE_FILES} ${VERSION_SOURCES}) +diff --git a/include/SDL_config.h.cmake b/include/SDL_config.h.cmake +index 9b20398..7ae6e35 100644 +--- a/include/SDL_config.h.cmake ++++ b/include/SDL_config.h.cmake +@@ -298,6 +298,7 @@ + #cmakedefine SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC @SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC@ + #cmakedefine SDL_VIDEO_DRIVER_DUMMY @SDL_VIDEO_DRIVER_DUMMY@ + #cmakedefine SDL_VIDEO_DRIVER_WINDOWS @SDL_VIDEO_DRIVER_WINDOWS@ ++#cmakedefine SDL_VIDEO_DRIVER_WINRT @SDL_VIDEO_DRIVER_WINRT@ + #cmakedefine SDL_VIDEO_DRIVER_WAYLAND @SDL_VIDEO_DRIVER_WAYLAND@ + #cmakedefine SDL_VIDEO_DRIVER_RPI @SDL_VIDEO_DRIVER_RPI@ + #cmakedefine SDL_VIDEO_DRIVER_VIVANTE @SDL_VIDEO_DRIVER_VIVANTE@ +@@ -365,6 +366,7 @@ + #cmakedefine SDL_POWER_ANDROID @SDL_POWER_ANDROID@ + #cmakedefine SDL_POWER_LINUX @SDL_POWER_LINUX@ + #cmakedefine SDL_POWER_WINDOWS @SDL_POWER_WINDOWS@ ++#cmakedefine SDL_POWER_WINRT @SDL_POWER_WINRT@ + #cmakedefine SDL_POWER_MACOSX @SDL_POWER_MACOSX@ + #cmakedefine SDL_POWER_HAIKU @SDL_POWER_HAIKU@ + #cmakedefine SDL_POWER_EMSCRIPTEN @SDL_POWER_EMSCRIPTEN@ +@@ -387,7 +389,7 @@ + #cmakedefine SDL_LIBSAMPLERATE_DYNAMIC @SDL_LIBSAMPLERATE_DYNAMIC@ + + /* Platform specific definitions */ +-#if !defined(__WIN32__) ++#if !defined(__WIN32__) && !defined(__WINRT__) + # if !defined(_STDINT_H_) && !defined(_STDINT_H) && !defined(HAVE_STDINT_H) && !defined(_HAVE_STDINT_H) + typedef unsigned int size_t; + typedef signed char int8_t; diff --git a/cmake/ports/sdl2/export-symbols-only-in-shared-build.patch b/cmake/ports/sdl2/export-symbols-only-in-shared-build.patch new file mode 100644 index 0000000000..7e6d503e23 --- /dev/null +++ b/cmake/ports/sdl2/export-symbols-only-in-shared-build.patch @@ -0,0 +1,24 @@ +# HG changeset patch +# User Mikhail Paulyshka +# Date 1506252750 -10800 +# Sun Sep 24 14:32:30 2017 +0300 +# Branch SDL2-WIN-SYMBOLS_LEACKAGE +# Node ID 46ec9baae30cd4e0c584de125cae4a3cce2864ad +# Parent 8df7a59b55283aa09889522369a2b32674c048de +win32: fix symbols leakage for static libraries + +diff -r 8df7a59b5528 -r 46ec9baae30c include/begin_code.h +--- a/include/begin_code.h Fri Sep 22 11:25:52 2017 -0700 ++++ b/include/begin_code.h Sun Sep 24 14:32:30 2017 +0300 +@@ -58,8 +58,10 @@ + # else + # define DECLSPEC __declspec(dllimport) + # endif ++# elif defined(_DLL) ++# define DECLSPEC __declspec(dllexport) + # else +-# define DECLSPEC __declspec(dllexport) ++# define DECLSPEC + # endif + # elif defined(__OS2__) + # ifdef BUILD_SDL diff --git a/cmake/ports/sdl2/portfile.cmake b/cmake/ports/sdl2/portfile.cmake new file mode 100644 index 0000000000..5d7ac5314d --- /dev/null +++ b/cmake/ports/sdl2/portfile.cmake @@ -0,0 +1,79 @@ +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO SDL-Mirror/SDL + REF release-2.0.8 + SHA512 5922dbeb14bb22991160251664b417d3f846867c18b5ecc1bd19c328ffd69b16252b7d45b9a317bafd1207fdb66d93a022dfb239e02447db9babd941956b6b37 + HEAD_REF master +) + +vcpkg_apply_patches( + SOURCE_PATH ${SOURCE_PATH} + PATCHES + ${CMAKE_CURRENT_LIST_DIR}/export-symbols-only-in-shared-build.patch + ${CMAKE_CURRENT_LIST_DIR}/enable-winrt-cmake.patch +) + +string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" SDL_STATIC) +string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" SDL_SHARED) +string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" FORCE_STATIC_VCRT) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -DSDL_STATIC=${SDL_STATIC} + -DSDL_SHARED=${SDL_SHARED} + -DVIDEO_VULKAN=OFF + -DFORCE_STATIC_VCRT=${FORCE_STATIC_VCRT} + -DLIBC=ON +) + +vcpkg_install_cmake() + +if(EXISTS "${CURRENT_PACKAGES_DIR}/cmake") + vcpkg_fixup_cmake_targets(CONFIG_PATH "cmake") +elseif(EXISTS "${CURRENT_PACKAGES_DIR}/lib/cmake/SDL2") + vcpkg_fixup_cmake_targets(CONFIG_PATH "lib/cmake/SDL2") +elseif(EXISTS "${CURRENT_PACKAGES_DIR}/SDL2.framework/Resources") + vcpkg_fixup_cmake_targets(CONFIG_PATH "SDL2.framework/Resources") +endif() + +file(REMOVE_RECURSE + ${CURRENT_PACKAGES_DIR}/debug/include + ${CURRENT_PACKAGES_DIR}/debug/share + ${CURRENT_PACKAGES_DIR}/bin/sdl2-config + ${CURRENT_PACKAGES_DIR}/debug/bin/sdl2-config + ${CURRENT_PACKAGES_DIR}/SDL2.framework + ${CURRENT_PACKAGES_DIR}/debug/SDL2.framework +) + +file(GLOB BINS ${CURRENT_PACKAGES_DIR}/debug/bin/* ${CURRENT_PACKAGES_DIR}/bin/*) +if(NOT BINS) + file(REMOVE_RECURSE + ${CURRENT_PACKAGES_DIR}/bin + ${CURRENT_PACKAGES_DIR}/debug/bin + ) +endif() + +if(NOT VCPKG_CMAKE_SYSTEM_NAME) + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/lib/manual-link) + file(RENAME ${CURRENT_PACKAGES_DIR}/lib/SDL2main.lib ${CURRENT_PACKAGES_DIR}/lib/manual-link/SDL2main.lib) + endif() + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/lib/manual-link) + file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/SDL2maind.lib ${CURRENT_PACKAGES_DIR}/debug/lib/manual-link/SDL2maind.lib) + endif() + + file(GLOB SHARE_FILES ${CURRENT_PACKAGES_DIR}/share/sdl2/*.cmake) + foreach(SHARE_FILE ${SHARE_FILES}) + file(READ "${SHARE_FILE}" _contents) + string(REPLACE "lib/SDL2main" "lib/manual-link/SDL2main" _contents "${_contents}") + file(WRITE "${SHARE_FILE}" "${_contents}") + endforeach() +endif() + +file(INSTALL ${SOURCE_PATH}/COPYING.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/sdl2 RENAME copyright) +vcpkg_copy_pdbs() diff --git a/cmake/ports/shaderc/0001-Do-not-generate-build-version.inc.patch b/cmake/ports/shaderc/0001-Do-not-generate-build-version.inc.patch new file mode 100644 index 0000000000..41cc812201 --- /dev/null +++ b/cmake/ports/shaderc/0001-Do-not-generate-build-version.inc.patch @@ -0,0 +1,30 @@ +From e8e12e856cbc41f9bdcc83bc87eb5013df199ee1 Mon Sep 17 00:00:00 2001 +From: vlj +Date: Fri, 2 Dec 2016 16:36:25 +0100 +Subject: [PATCH] Do not generate build-version.inc + +--- + CMakeLists.txt | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index a4c2fac..5544a2d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -53,8 +53,8 @@ add_subdirectory(libshaderc) + add_subdirectory(glslc) + add_subdirectory(examples) + +-add_custom_target(build-version +- ${PYTHON_EXE} +- ${CMAKE_CURRENT_SOURCE_DIR}/utils/update_build_version.py +- ${shaderc_SOURCE_DIR} ${spirv-tools_SOURCE_DIR} ${glslang_SOURCE_DIR} +- COMMENT "Update build-version.inc in the Shaderc build directory (if necessary).") ++#add_custom_target(build-version ++# ${PYTHON_EXE} ++# ${CMAKE_CURRENT_SOURCE_DIR}/utils/update_build_version.py ++# ${shaderc_SOURCE_DIR} ${spirv-tools_SOURCE_DIR} ${glslang_SOURCE_DIR} ++# COMMENT "Update build-version.inc in the Shaderc build directory (if necessary).") +-- +2.10.2.windows.1 + diff --git a/cmake/ports/shaderc/CMakeLists.txt b/cmake/ports/shaderc/CMakeLists.txt new file mode 100644 index 0000000000..c4f15a8846 --- /dev/null +++ b/cmake/ports/shaderc/CMakeLists.txt @@ -0,0 +1,31 @@ +option(SUFFIX_D "Add d Suffix to lib" ${SUFFIX_D}) +if(NOT SUFFIX_D) + find_library(GLSLANG glslang) + find_library(OSDEPENDENT OSDependent) + find_library(OGLCOMPILER OGLCompiler) + find_library(HLSLLIB HLSL) + find_library(SPIRVLIB SPIRV) +ELSE() + find_library(GLSLANG glslangd) + find_library(OSDEPENDENT OSDependentd) + find_library(OGLCOMPILER OGLCompilerd) + find_library(HLSLLIB HLSLd) + find_library(SPIRVLIB SPIRVd) +ENDIF() + +add_library(glslang STATIC IMPORTED GLOBAL) +set_property(TARGET glslang PROPERTY IMPORTED_LOCATION "${GLSLANG}") +find_path(glslang_SOURCE_DIR glslang/Include/Common) +set_property(TARGET glslang APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${glslang_SOURCE_DIR}") + +add_library(OSDependent STATIC IMPORTED GLOBAL) +set_property(TARGET OSDependent PROPERTY IMPORTED_LOCATION "${OSDEPENDENT}") + +add_library(OGLCompiler STATIC IMPORTED GLOBAL) +set_property(TARGET OGLCompiler PROPERTY IMPORTED_LOCATION "${OGLCOMPILER}") + +add_library(HLSL STATIC IMPORTED GLOBAL) +set_property(TARGET HLSL PROPERTY IMPORTED_LOCATION "${HLSLLIB}") + +add_library(SPIRV STATIC IMPORTED GLOBAL) +set_property(TARGET SPIRV PROPERTY IMPORTED_LOCATION "${SPIRVLIB}") diff --git a/cmake/ports/shaderc/CMakeLists_spirv.txt b/cmake/ports/shaderc/CMakeLists_spirv.txt new file mode 100644 index 0000000000..d9e0136012 --- /dev/null +++ b/cmake/ports/shaderc/CMakeLists_spirv.txt @@ -0,0 +1,8 @@ +find_library(SPIRVTOOLSOPT SPIRV-Tools-opt) +find_library(SPIRVTOOLS SPIRV-Tools) + +add_library(SPIRV-Tools-opt STATIC IMPORTED GLOBAL) +set_property(TARGET SPIRV-Tools-opt PROPERTY IMPORTED_LOCATION "${SPIRVTOOLSOPT}") + +add_library(SPIRV-Tools STATIC IMPORTED GLOBAL) +set_property(TARGET SPIRV-Tools PROPERTY IMPORTED_LOCATION "${SPIRVTOOLS}") diff --git a/cmake/ports/shaderc/CONTROL b/cmake/ports/shaderc/CONTROL new file mode 100644 index 0000000000..0cd3de96d8 --- /dev/null +++ b/cmake/ports/shaderc/CONTROL @@ -0,0 +1,4 @@ +Source: shaderc +Version: 2018.0-1 +Description: A collection of tools, libraries and tests for shader compilation. +Build-Depends: glslang, spirv-tools diff --git a/cmake/ports/shaderc/build-version.inc b/cmake/ports/shaderc/build-version.inc new file mode 100644 index 0000000000..853e89916e --- /dev/null +++ b/cmake/ports/shaderc/build-version.inc @@ -0,0 +1,3 @@ +"shaderc v2016.2-dev unknown hash, 2016-12-02\n" +"spirv-tools v2016.6-dev unknown hash, 2016-12-02\n" +"glslang unknown hash, 2016-12-02\n" diff --git a/cmake/ports/shaderc/portfile.cmake b/cmake/ports/shaderc/portfile.cmake new file mode 100644 index 0000000000..c43e591ec1 --- /dev/null +++ b/cmake/ports/shaderc/portfile.cmake @@ -0,0 +1,49 @@ +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO google/shaderc + REF v2018.0 + SHA512 7a420fde73c9f2aae3f13558d538a1f4ae43bba19e2b4d2da8fbbd017e9e4f328ece5f330f1bbcb9fe84c91b7eb84b9158dc2e3d144c82939090a0fa6f5b4ef0 + HEAD_REF master + PATCHES + 0001-Do-not-generate-build-version.inc.patch +) + +file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH}/third_party/glslang) +file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists_spirv.txt DESTINATION ${SOURCE_PATH}/third_party/spirv-tools) +file(RENAME ${SOURCE_PATH}/third_party/spirv-tools/CMakeLists_spirv.txt ${SOURCE_PATH}/third_party/spirv-tools/CMakeLists.txt) +file(COPY ${CMAKE_CURRENT_LIST_DIR}/build-version.inc DESTINATION ${SOURCE_PATH}/glslc/src) + +#Note: glslang and spir tools doesn't export symbol and need to be build as static lib for cmake to work +set(VCPKG_LIBRARY_LINKAGE "static") +set(OPTIONS) +if(VCPKG_CRT_LINKAGE STREQUAL "dynamic") + list(APPEND OPTIONS -DSHADERC_ENABLE_SHARED_CRT=ON) +endif() + +# shaderc uses python to manipulate copyright information +vcpkg_find_acquire_program(PYTHON3) +get_filename_component(PYTHON3_EXE_PATH ${PYTHON3} DIRECTORY) +vcpkg_add_to_path(PREPEND "${PYTHON3_EXE_PATH}") + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + OPTIONS -DSHADERC_SKIP_TESTS=true ${OPTIONS} -Dglslang_SOURCE_DIR=${CURRENT_INSTALLED_DIR}/include + OPTIONS_DEBUG -DSUFFIX_D=true + OPTIONS_RELEASE -DSUFFIX_D=false +) + +vcpkg_install_cmake() + +file(GLOB EXES "${CURRENT_PACKAGES_DIR}/bin/*.exe") +file(COPY ${EXES} DESTINATION ${CURRENT_PACKAGES_DIR}/tools) + +#Safe to remove as libs are static +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/bin) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) + +# Handle copyright +file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/shaderc) +file(RENAME ${CURRENT_PACKAGES_DIR}/share/shaderc/LICENSE ${CURRENT_PACKAGES_DIR}/share/shaderc/copyright) diff --git a/cmake/ports/spirv-cross/CONTROL b/cmake/ports/spirv-cross/CONTROL new file mode 100644 index 0000000000..9068608da6 --- /dev/null +++ b/cmake/ports/spirv-cross/CONTROL @@ -0,0 +1,3 @@ +Source: spirv-cross +Version: 2018-08-07-1 +Description: SPIRV-Cross is a practical tool and library for performing reflection on SPIR-V and disassembling SPIR-V back to high level languages. diff --git a/cmake/ports/spirv-cross/portfile.cmake b/cmake/ports/spirv-cross/portfile.cmake new file mode 100644 index 0000000000..6495e82bc3 --- /dev/null +++ b/cmake/ports/spirv-cross/portfile.cmake @@ -0,0 +1,33 @@ +include(vcpkg_common_functions) + +vcpkg_check_linkage(ONLY_STATIC_LIBRARY) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO KhronosGroup/SPIRV-Cross + REF 2018-08-07 + SHA512 1ac6ee6b2864d950199d4e856ae1576f9435827501baa5d53821a973cd68aaa03ec428094bf74c570784997baac5b2e3802ddc7f02844e2ee546741fa726bf91 + HEAD_REF master +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS -DSPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS=OFF +) + +vcpkg_install_cmake() +vcpkg_copy_pdbs() + +foreach(COMPONENT core cpp glsl hlsl msl reflect util) + vcpkg_fixup_cmake_targets(CONFIG_PATH share/spirv_cross_${COMPONENT}/cmake TARGET_PATH share/spirv_cross_${COMPONENT}) +endforeach() + +file(GLOB EXES "${CURRENT_PACKAGES_DIR}/bin/*") +file(COPY ${EXES} DESTINATION ${CURRENT_PACKAGES_DIR}/tools) + +# cleanup +configure_file(${SOURCE_PATH}/LICENSE ${CURRENT_PACKAGES_DIR}/share/spirv-cross/copyright COPYONLY) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/debug/bin) diff --git a/cmake/ports/spirv-tools/CONTROL b/cmake/ports/spirv-tools/CONTROL new file mode 100644 index 0000000000..057fe5db0a --- /dev/null +++ b/cmake/ports/spirv-tools/CONTROL @@ -0,0 +1,3 @@ +Source: spirv-tools +Version: 2018.5-1 +Description: API and commands for processing SPIR-V modules diff --git a/cmake/ports/spirv-tools/portfile.cmake b/cmake/ports/spirv-tools/portfile.cmake new file mode 100644 index 0000000000..b52a3b96c2 --- /dev/null +++ b/cmake/ports/spirv-tools/portfile.cmake @@ -0,0 +1,43 @@ +include(vcpkg_common_functions) + +vcpkg_check_linkage(ONLY_STATIC_LIBRARY) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO KhronosGroup/SPIRV-Tools + REF v2018.5 + SHA512 068a39e15111f24ad2a6b27e7ada786b3124b239aa8b13e187a4d512044db57a8e6a0fccadd0451155e1f57c96c8dec91a2338996c59fc883007cf7be07f2cad + HEAD_REF master +) + +vcpkg_from_github( + OUT_SOURCE_PATH SPIRV_HEADERS_PATH + REPO KhronosGroup/SPIRV-Headers + REF 801cca8104245c07e8cc53292da87ee1b76946fe + SHA512 2bfc37beec1f6afb565fa7dad08eb838c8fe4bacda7f80a3a6c75d80c7eb1caea7e7716dc1da11b337b723a0870700d524c6617c5b7cab8b28048fa8c0785ba9 + HEAD_REF master +) + +vcpkg_find_acquire_program(PYTHON3) +get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY) +vcpkg_add_to_path("${PYTHON3_DIR}") + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -DSPIRV-Headers_SOURCE_DIR=${SPIRV_HEADERS_PATH} + -DSPIRV_WERROR=OFF +) + +vcpkg_install_cmake() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(GLOB EXES "${CURRENT_PACKAGES_DIR}/bin/*") +file(COPY ${EXES} DESTINATION ${CURRENT_PACKAGES_DIR}/tools) +file(REMOVE ${EXES}) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/debug/bin) + +# Handle copyright +file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/spirv-tools) +file(RENAME ${CURRENT_PACKAGES_DIR}/share/spirv-tools/LICENSE ${CURRENT_PACKAGES_DIR}/share/spirv-tools/copyright) diff --git a/cmake/ports/tbb/CMakeLists.txt b/cmake/ports/tbb/CMakeLists.txt new file mode 100644 index 0000000000..edfaf63200 --- /dev/null +++ b/cmake/ports/tbb/CMakeLists.txt @@ -0,0 +1,18 @@ +project(tbb CXX) + +file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*) +file(COPY ${SOURCES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/src) + +include(${CMAKE_CURRENT_BINARY_DIR}/src/cmake/TBBBuild.cmake REQUIRED) +tbb_build(TBB_ROOT ${CMAKE_CURRENT_BINARY_DIR}/src MAKE_ARGS extra_inc=big_iron.inc) + +set(SUBDIR ${CMAKE_CURRENT_BINARY_DIR}/tbb_cmake_build/tbb_cmake_build_subdir) +if(CMAKE_BUILD_TYPE STREQUAL "Release") + set(SUBDIR "${SUBDIR}_release") +else() + set(SUBDIR "${SUBDIR}_debug") +endif() + +file(GLOB OUTPUTS ${SUBDIR}/*.so.* ${SUBDIR}/*.so ${SUBDIR}/*.a ${SUBDIR}/*.dylib ${SUBDIR}/*.dylib.*) + +install(FILES ${OUTPUTS} DESTINATION lib) diff --git a/cmake/ports/tbb/CONTROL b/cmake/ports/tbb/CONTROL new file mode 100644 index 0000000000..e87106dc3c --- /dev/null +++ b/cmake/ports/tbb/CONTROL @@ -0,0 +1,3 @@ +Source: tbb +Version: 2018_U5-4 +Description: Intel's Threading Building Blocks. diff --git a/cmake/ports/tbb/portfile.cmake b/cmake/ports/tbb/portfile.cmake new file mode 100644 index 0000000000..ac47360f8c --- /dev/null +++ b/cmake/ports/tbb/portfile.cmake @@ -0,0 +1,86 @@ +include(vcpkg_common_functions) + +if(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) +endif() + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO 01org/tbb + REF 2018_U5 + SHA512 3e8d20276ccb1b50099f96b6cf968e3d0ada53caea1fa836ecb8652f1dca236fbbbf2c783e64ea2f761f7f21725064d19b72d176e35e4dc29706b8a30965153b + HEAD_REF tbb_2018 +) + +file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH}) + +if(VCPKG_CMAKE_SYSTEM_NAME AND NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + ) + + vcpkg_install_cmake() + + # Settings for TBBConfigForSource.cmake.in + set(TBB_LIB_EXT a) + set(TBB_LIB_PREFIX lib) +else() + if (VCPKG_CRT_LINKAGE STREQUAL static) + set(RELEASE_CONFIGURATION Release-MT) + set(DEBUG_CONFIGURATION Debug-MT) + else() + set(RELEASE_CONFIGURATION Release) + set(DEBUG_CONFIGURATION Debug) + endif() + + vcpkg_install_msbuild( + SOURCE_PATH ${SOURCE_PATH} + PROJECT_SUBPATH build/vs2013/makefile.sln + RELEASE_CONFIGURATION ${RELEASE_CONFIGURATION} + DEBUG_CONFIGURATION ${DEBUG_CONFIGURATION} + ) + # Settings for TBBConfigForSource.cmake.in + set(TBB_LIB_EXT lib) + set(TBB_LIB_PREFIX) +endif() + +file(COPY + ${SOURCE_PATH}/include/tbb + ${SOURCE_PATH}/include/serial + DESTINATION ${CURRENT_PACKAGES_DIR}/include) + +# Settings for TBBConfigForSource.cmake.in +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + set(TBB_DEFAULT_COMPONENTS tbb tbbmalloc) +else() + set(TBB_DEFAULT_COMPONENTS tbb tbbmalloc tbbmalloc_proxy) +endif() +file(READ "${SOURCE_PATH}/include/tbb/tbb_stddef.h" _tbb_stddef) +string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" _tbb_ver_major "${_tbb_stddef}") +string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" _tbb_ver_minor "${_tbb_stddef}") +string(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" TBB_INTERFACE_VERSION "${_tbb_stddef}") +set(TBB_VERSION "${_tbb_ver_major}.${_tbb_ver_minor}") +set(TBB_RELEASE_DIR "\${_tbb_root}/lib") +set(TBB_DEBUG_DIR "\${_tbb_root}/debug/lib") + +configure_file( + ${SOURCE_PATH}/cmake/templates/TBBConfigForSource.cmake.in + ${CURRENT_PACKAGES_DIR}/share/tbb/TBBConfig.cmake + @ONLY +) +file(READ ${CURRENT_PACKAGES_DIR}/share/tbb/TBBConfig.cmake _contents) +string(REPLACE + "get_filename_component(_tbb_root \"\${_tbb_root}\" PATH)" + "get_filename_component(_tbb_root \"\${_tbb_root}\" PATH)\nget_filename_component(_tbb_root \"\${_tbb_root}\" PATH)" + _contents + "${_contents}" +) +string(REPLACE "SHARED IMPORTED)" "UNKNOWN IMPORTED)" _contents "${_contents}") +file(WRITE ${CURRENT_PACKAGES_DIR}/share/tbb/TBBConfig.cmake "${_contents}") + +# Handle copyright +file(COPY ${SOURCE_PATH}/LICENSE ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/tbb) +file(RENAME ${CURRENT_PACKAGES_DIR}/share/tbb/LICENSE ${CURRENT_PACKAGES_DIR}/share/tbb/copyright) + +vcpkg_test_cmake(PACKAGE_NAME TBB) diff --git a/cmake/ports/tbb/usage b/cmake/ports/tbb/usage new file mode 100644 index 0000000000..2972bafbd6 --- /dev/null +++ b/cmake/ports/tbb/usage @@ -0,0 +1,4 @@ +The package tbb provides CMake targets: + + find_package(TBB CONFIG REQUIRED) + target_link_libraries(main PRIVATE TBB::tbb) diff --git a/cmake/ports/vulkanmemoryallocator/CONTROL b/cmake/ports/vulkanmemoryallocator/CONTROL new file mode 100644 index 0000000000..cd97502527 --- /dev/null +++ b/cmake/ports/vulkanmemoryallocator/CONTROL @@ -0,0 +1,3 @@ +Source: vulkanmemoryallocator +Version: 3a7249f313b047417fbb1d36a3fbe6c3bf1505b5 +Description: Vulkan Memory Allocator diff --git a/cmake/ports/vulkanmemoryallocator/portfile.cmake b/cmake/ports/vulkanmemoryallocator/portfile.cmake new file mode 100644 index 0000000000..2b02bc1175 --- /dev/null +++ b/cmake/ports/vulkanmemoryallocator/portfile.cmake @@ -0,0 +1,14 @@ +include(vcpkg_common_functions) + +set(SOURCE_VERSION 3.3.0) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator + REF 3a7249f313b047417fbb1d36a3fbe6c3bf1505b5 + SHA512 ddeac01a25bfe47d4e749d150aeaea43760c9732db78bf6d15231b9de1b7fb5218f1ced07710cb1929175ddcb05848239edaf0f6cc47be48896211293ffd236c + HEAD_REF master +) + +file(INSTALL ${SOURCE_PATH}/src/vk_mem_alloc.h DESTINATION ${CURRENT_PACKAGES_DIR}/include/vma) +file(INSTALL ${SOURCE_PATH}/LICENSE.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/vulkanmemoryallocator RENAME copyright) diff --git a/cmake/ports/zlib/CONTROL b/cmake/ports/zlib/CONTROL new file mode 100644 index 0000000000..c559637834 --- /dev/null +++ b/cmake/ports/zlib/CONTROL @@ -0,0 +1,3 @@ +Source: zlib +Version: 1.2.11-3 +Description: A compression library diff --git a/cmake/ports/zlib/LICENSE b/cmake/ports/zlib/LICENSE new file mode 100644 index 0000000000..ca5fddfe0d --- /dev/null +++ b/cmake/ports/zlib/LICENSE @@ -0,0 +1,20 @@ + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu \ No newline at end of file diff --git a/cmake/ports/zlib/cmake_dont_build_more_than_needed.patch b/cmake/ports/zlib/cmake_dont_build_more_than_needed.patch new file mode 100644 index 0000000000..229a2d055b --- /dev/null +++ b/cmake/ports/zlib/cmake_dont_build_more_than_needed.patch @@ -0,0 +1,42 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0fe939d..8d2f5f1 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -7,6 +7,7 @@ set(VERSION "1.2.11") + + option(ASM686 "Enable building i686 assembly implementation") + option(AMD64 "Enable building amd64 assembly implementation") ++option(SKIP_BUILD_EXAMPLES "Skip build of the examples" OFF) + + 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) + 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} + RUNTIME DESTINATION "${INSTALL_BIN_DIR}" + ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" + LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) +@@ -230,6 +239,7 @@ endif() + # Example binaries + #============================================================================ + ++if (NOT SKIP_BUILD_EXAMPLES) + add_executable(example test/example.c) + target_link_libraries(example zlib) + add_test(example example) +@@ -247,3 +257,4 @@ if(HAVE_OFF64_T) + target_link_libraries(minigzip64 zlib) + set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + endif() ++endif() diff --git a/cmake/ports/zlib/portfile.cmake b/cmake/ports/zlib/portfile.cmake new file mode 100644 index 0000000000..f2cc68b7a3 --- /dev/null +++ b/cmake/ports/zlib/portfile.cmake @@ -0,0 +1,47 @@ +include(vcpkg_common_functions) +set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/zlib-1.2.11) +vcpkg_download_distfile(ARCHIVE_FILE + URLS "http://www.zlib.net/zlib-1.2.11.tar.gz" "https://downloads.sourceforge.net/project/libpng/zlib/1.2.11/zlib-1.2.11.tar.gz" + FILENAME "zlib1211.tar.gz" + SHA512 73fd3fff4adeccd4894084c15ddac89890cd10ef105dd5e1835e1e9bbb6a49ff229713bd197d203edfa17c2727700fce65a2a235f07568212d820dca88b528ae +) +vcpkg_extract_source_archive(${ARCHIVE_FILE}) + +vcpkg_apply_patches( + SOURCE_PATH ${SOURCE_PATH} + PATCHES + ${CMAKE_CURRENT_LIST_DIR}/cmake_dont_build_more_than_needed.patch +) + +# This is generated during the cmake build +file(REMOVE ${SOURCE_PATH}/zconf.h) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -DSKIP_INSTALL_FILES=ON + -DSKIP_BUILD_EXAMPLES=ON + OPTIONS_DEBUG + -DSKIP_INSTALL_HEADERS=ON +) + +vcpkg_install_cmake() + +# Both dynamic and static are built, so keep only the one needed +if(VCPKG_LIBRARY_LINKAGE STREQUAL static) + if(EXISTS ${CURRENT_PACKAGES_DIR}/lib/zlibstatic.lib) + file(RENAME ${CURRENT_PACKAGES_DIR}/lib/zlibstatic.lib ${CURRENT_PACKAGES_DIR}/lib/zlib.lib) + endif() + if(EXISTS ${CURRENT_PACKAGES_DIR}/debug/lib/zlibstaticd.lib) + file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/zlibstaticd.lib ${CURRENT_PACKAGES_DIR}/debug/lib/zlibd.lib) + endif() +endif() + +file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/zlib RENAME copyright) + +vcpkg_copy_pdbs() + +file(COPY ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT}) + +#vcpkg_test_cmake(PACKAGE_NAME ZLIB MODULE) diff --git a/cmake/ports/zlib/usage b/cmake/ports/zlib/usage new file mode 100644 index 0000000000..0dfed74930 --- /dev/null +++ b/cmake/ports/zlib/usage @@ -0,0 +1,4 @@ +The package zlib is compatible with built-in CMake targets: + + find_package(ZLIB REQUIRED) + target_link_libraries(main PRIVATE ZLIB::ZLIB) diff --git a/domain-server/CMakeLists.txt b/domain-server/CMakeLists.txt index 458dcb5ab8..693132a8f7 100644 --- a/domain-server/CMakeLists.txt +++ b/domain-server/CMakeLists.txt @@ -27,30 +27,8 @@ include_hifi_library_headers(graphics) link_hifi_libraries(embedded-webserver networking shared avatars octree) target_zlib() - -add_dependency_external_projects(quazip) - -find_package(QuaZip REQUIRED) -target_include_directories(${TARGET_NAME} SYSTEM PUBLIC ${QUAZIP_INCLUDE_DIRS}) -target_link_libraries(${TARGET_NAME} ${QUAZIP_LIBRARIES}) - -if (WIN32) - add_paths_to_fixup_libs(${QUAZIP_DLL_PATH}) -endif () - -# find OpenSSL -find_package(OpenSSL REQUIRED) - -if (APPLE AND ${OPENSSL_INCLUDE_DIR} STREQUAL "/usr/include") - # this is a user on OS X using system OpenSSL, which is going to throw warnings since they're deprecating for their common crypto - message(WARNING "The found version of OpenSSL is the OS X system version. This will produce deprecation warnings." - "\nWe recommend you install a newer version (at least 1.0.1h) in a different directory and set OPENSSL_ROOT_DIR in your env so Cmake can find it.") -endif () - -include_directories(SYSTEM "${OPENSSL_INCLUDE_DIR}") - -# append OpenSSL to our list of libraries to link -target_link_libraries(${TARGET_NAME} ${OPENSSL_LIBRARIES}) +target_quazip() +target_openssl() # libcrypto uses dlopen in libdl if (UNIX) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index cc9fe8ef4c..50247b1145 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -190,8 +190,6 @@ if (WIN32) add_dependency_external_projects(sixense) endif () - add_dependency_external_projects(sdl2) - add_dependency_external_projects(OpenVR) add_dependency_external_projects(neuron) add_dependency_external_projects(wasapi) add_dependency_external_projects(steamworks) diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index e5e94da68a..bc72c7d7c5 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include diff --git a/libraries/audio/src/AudioInjectorLocalBuffer.h b/libraries/audio/src/AudioInjectorLocalBuffer.h index 673966ff09..3065de5199 100644 --- a/libraries/audio/src/AudioInjectorLocalBuffer.h +++ b/libraries/audio/src/AudioInjectorLocalBuffer.h @@ -14,7 +14,7 @@ #include -#include +#include class AudioInjectorLocalBuffer : public QIODevice { Q_OBJECT diff --git a/libraries/baking/CMakeLists.txt b/libraries/baking/CMakeLists.txt index ec7caf574b..9041c3a4f1 100644 --- a/libraries/baking/CMakeLists.txt +++ b/libraries/baking/CMakeLists.txt @@ -4,7 +4,4 @@ setup_hifi_library(Concurrent) link_hifi_libraries(shared graphics networking ktx image fbx) include_hifi_library_headers(gpu) -add_dependency_external_projects(draco) -find_package(Draco REQUIRED) -target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${DRACO_INCLUDE_DIRS}) -target_link_libraries(${TARGET_NAME} ${DRACO_LIBRARY} ${DRACO_ENCODER_LIBRARY}) +target_draco() diff --git a/libraries/graphics/src/graphics/BufferViewHelpers.h b/libraries/graphics/src/graphics/BufferViewHelpers.h index 026e7b53a3..8a48c17007 100644 --- a/libraries/graphics/src/graphics/BufferViewHelpers.h +++ b/libraries/graphics/src/graphics/BufferViewHelpers.h @@ -10,7 +10,6 @@ #include #include #include -#include #include "GpuHelpers.h" #include "GLMHelpers.h" diff --git a/libraries/image/src/image/Image.cpp b/libraries/image/src/image/Image.cpp index 1355a24bf4..f450366417 100644 --- a/libraries/image/src/image/Image.cpp +++ b/libraries/image/src/image/Image.cpp @@ -32,8 +32,8 @@ using namespace gpu; #include #undef _CRT_SECURE_NO_WARNINGS -#include -#include +#include +#include static const glm::uvec2 SPARSE_PAGE_SIZE(128); static const glm::uvec2 MAX_TEXTURE_SIZE_GLES(2048); diff --git a/libraries/networking/src/udt/SequenceNumber.h b/libraries/networking/src/udt/SequenceNumber.h index 2c82eccfa3..13bd83d4f2 100644 --- a/libraries/networking/src/udt/SequenceNumber.h +++ b/libraries/networking/src/udt/SequenceNumber.h @@ -14,7 +14,7 @@ #include -#include +#include namespace udt { diff --git a/libraries/render-utils/src/LightStage.cpp b/libraries/render-utils/src/LightStage.cpp index ccedb0cd7b..8fe3b0fef5 100644 --- a/libraries/render-utils/src/LightStage.cpp +++ b/libraries/render-utils/src/LightStage.cpp @@ -60,7 +60,8 @@ LightStage::LightStage() { } LightStage::Shadow::Schema::Schema() { - ShadowTransform defaultTransform; + ShadowTransform defaultTransform = {}; + defaultTransform.reprojection = mat4(); defaultTransform.fixedBias = 0.005f; std::fill(cascades, cascades + SHADOW_CASCADE_MAX_COUNT, defaultTransform); invMapSize = 1.0f / MAP_SIZE; diff --git a/libraries/shaders/src/shaders/Shaders.cpp b/libraries/shaders/src/shaders/Shaders.cpp index 549bf65f80..c7e39b2940 100644 --- a/libraries/shaders/src/shaders/Shaders.cpp +++ b/libraries/shaders/src/shaders/Shaders.cpp @@ -16,7 +16,7 @@ #include #include -#include +#include #include #include diff --git a/plugins/hifiSdl2/src/Joystick.h b/plugins/hifiSdl2/src/Joystick.h index 7ea17739e3..ae90470974 100644 --- a/plugins/hifiSdl2/src/Joystick.h +++ b/plugins/hifiSdl2/src/Joystick.h @@ -15,7 +15,7 @@ #include #include -#include +#include #undef main #include diff --git a/plugins/hifiSdl2/src/SDL2Manager.h b/plugins/hifiSdl2/src/SDL2Manager.h index 0daad6fd8b..ac2f446205 100644 --- a/plugins/hifiSdl2/src/SDL2Manager.h +++ b/plugins/hifiSdl2/src/SDL2Manager.h @@ -12,7 +12,7 @@ #ifndef hifi__SDL2Manager_h #define hifi__SDL2Manager_h -#include +#include #include #include diff --git a/plugins/oculus/CMakeLists.txt b/plugins/oculus/CMakeLists.txt index 664f9fe906..abce753b4d 100644 --- a/plugins/oculus/CMakeLists.txt +++ b/plugins/oculus/CMakeLists.txt @@ -8,9 +8,6 @@ if (WIN32 AND (NOT USE_GLES)) - # we're using static GLEW, so define GLEW_STATIC - add_definitions(-DGLEW_STATIC) - # if we were passed an Oculus App ID for entitlement checks, send that along if (DEFINED ENV{OCULUS_APP_ID}) add_definitions(-DOCULUS_APP_ID="$ENV{OCULUS_APP_ID}") diff --git a/plugins/openvr/CMakeLists.txt b/plugins/openvr/CMakeLists.txt index eea08e66d5..7c3671991e 100644 --- a/plugins/openvr/CMakeLists.txt +++ b/plugins/openvr/CMakeLists.txt @@ -7,20 +7,13 @@ # if (WIN32 AND (NOT USE_GLES)) - # we're using static GLEW, so define GLEW_STATIC - add_definitions(-DGLEW_STATIC) set(TARGET_NAME openvr) setup_hifi_plugin(Gui Qml Multimedia) link_hifi_libraries(shared task gl qml networking controllers ui plugins display-plugins ui-plugins input-plugins script-engine audio-client render-utils graphics shaders gpu render model-networking fbx ktx image procedural ${PLATFORM_GL_BACKEND}) - include_hifi_library_headers(octree) - add_dependency_external_projects(OpenVR) - - find_package(OpenVR REQUIRED) - target_include_directories(${TARGET_NAME} PRIVATE ${OPENVR_INCLUDE_DIRS}) - target_link_libraries(${TARGET_NAME} ${OPENVR_LIBRARIES}) + target_openvr() target_link_libraries(${TARGET_NAME} Winmm.lib) endif() diff --git a/prebuild.py b/prebuild.py new file mode 100644 index 0000000000..11eb2fc9e9 --- /dev/null +++ b/prebuild.py @@ -0,0 +1,249 @@ +#!python + +import argparse +import concurrent +import hashlib +import importlib +import json +import os +import platform +import shutil +import ssl +import subprocess +import sys +import tarfile +import tempfile +import time +import urllib.request +import functools + +print = functools.partial(print, flush=True) + +def executeSubprocess(processArgs, folder=None, env=None): + restoreDir = None + if folder != None: + restoreDir = os.getcwd() + os.chdir(folder) + + process = subprocess.Popen( + processArgs, stdout=sys.stdout, stderr=sys.stderr, env=env) + process.wait() + + if (0 != process.returncode): + raise RuntimeError('Call to "{}" failed.\n\narguments:\n{}\n'.format( + processArgs[0], + ' '.join(processArgs[1:]), + )) + + if restoreDir != None: + os.chdir(restoreDir) + + +def hashFile(file): + hasher = hashlib.sha512() + with open(file, "rb") as f: + for chunk in iter(lambda: f.read(4096), b""): + hasher.update(chunk) + return hasher.hexdigest() + + +def hashFolder(folder): + hasher = hashlib.sha256() + for dirName, subdirList, fileList in os.walk(folder): + for fname in fileList: + with open(os.path.join(folder, dirName, fname), "rb") as f: + for chunk in iter(lambda: f.read(4096), b""): + hasher.update(chunk) + return hasher.hexdigest() + + +def downloadAndExtract(url, destPath, hash=None): + tempFileDescriptor, tempFileName = tempfile.mkstemp() + # OSX Python doesn't support SSL, so we need to bypass it. + # However, we still validate the downloaded file's sha512 hash + context = ssl._create_unverified_context() + with urllib.request.urlopen(url, context=context) as response, open(tempFileDescriptor, 'wb') as tempFile: + shutil.copyfileobj(response, tempFile) + + # Verify the hash + if hash and hash != hashFile(tempFileName): + raise RuntimeError("Downloaded file does not match hash") + + # Extract the archive + with tarfile.open(tempFileName, 'r:gz') as tgz: + # prefix = os.path.commonprefix(tgz.getnames()) + # if (prefix != '.' and prefix != ''): + # prefixlen = len(prefix) + # for member in tgz.getmembers(): + # name = member.name + # if prefix == name: + # continue + # member.name = name[prefixlen + 1:] + tgz.extractall(destPath) + os.remove(tempFileName) + + +class VcpkgRepo: + def __init__(self): + global args + scriptPath = os.path.dirname(os.path.realpath(sys.argv[0])) + # our custom ports, relative to the script location + self.sourcePortsPath = os.path.join(scriptPath, 'cmake', 'ports') + # FIXME Revert to ports hash before release + self.id = hashFolder(self.sourcePortsPath)[:8] + + if args.vcpkg_root is not None: + print("override vcpkg path with " + args.vcpkg_root) + self.path = args.vcpkg_root + self.basePath = None + else: + defaultBasePath = os.path.join(tempfile.gettempdir(), 'hifi', 'vcpkg') + self.basePath = os.getenv('HIFI_VCPKG_BASE', defaultBasePath) + if (not os.path.isdir(self.basePath)): + os.makedirs(self.basePath) + self.path = os.path.join(self.basePath, self.id) + + self.tagFile = os.path.join(self.path, '.id') + # A format version attached to the tag file... increment when you want to force the build systems to rebuild + # without the contents of the ports changing + self.version = 1 + self.tagContents = "{}_{}".format(self.id, self.version) + + print("prebuild path: " + self.path) + # OS dependent information + system = platform.system() + if 'Windows' == system: + self.exe = os.path.join(self.path, 'vcpkg.exe') + self.vcpkgUrl = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/vcpkg-win32.tar.gz?versionId=YZYkDejDRk7L_hrK_WVFthWvisAhbDzZ' + self.vcpkgHash = '3e0ff829a74956491d57666109b3e6b5ce4ed0735c24093884317102387b2cb1b2cd1ff38af9ed9173501f6e32ffa05cc6fe6d470b77a71ca1ffc3e0aa46ab9e' + self.hostTriplet = 'x64-windows' + elif 'Darwin' == system: + self.exe = os.path.join(self.path, 'vcpkg') + self.vcpkgUrl = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/vcpkg-osx.tar.gz?versionId=_fhqSxjfrtDJBvEsQ8L_ODcdUjlpX9cc' + self.vcpkgHash = '519d666d02ef22b87c793f016ca412e70f92e1d55953c8f9bd4ee40f6d9f78c1df01a6ee293907718f3bbf24075cc35492fb216326dfc50712a95858e9cbcb4d' + self.hostTriplet = 'x64-osx' + else: + self.exe = os.path.join(self.path, 'vcpkg') + self.vcpkgUrl = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/vcpkg-linux.tar.gz?versionId=97Nazh24etEVKWz33XwgLY0bvxEfZgMU' + self.vcpkgHash = '6a1ce47ef6621e699a4627e8821ad32528c82fce62a6939d35b205da2d299aaa405b5f392df4a9e5343dd6a296516e341105fbb2dd8b48864781d129d7fba10d' + self.hostTriplet = 'x64-linux' + + if args.android: + self.triplet = 'arm64-android' + else: + self.triplet = self.hostTriplet + + def outOfDate(self): + global args + if args.force_build: + return True + print("Looking for tag file {}".format(self.tagFile)) + if not os.path.isfile(self.tagFile): + return True + with open(self.tagFile, 'r') as f: + storedTag = f.read() + print("Found stored tag {}".format(storedTag)) + if storedTag != self.tagContents: + print("Doesn't match computed tag {}".format(self.tagContents)) + return True + return False + + def clean(self): + cleanPath = self.path + if self.basePath is not None: + cleanPath = self.basePath + print("Cleaning vcpkg installation(s) at {}".format(cleanPath)) + if os.path.isdir(self.path): + print("Removing {}".format(cleanPath)) + shutil.rmtree(cleanPath, ignore_errors=True) + + def bootstrap(self): + if self.outOfDate(): + self.clean() + + global args + # Make sure we have a vcpkg executable + if True or args.force_bootstrap or (not os.path.isfile(self.exe)) or (not os.path.isfile(os.path.join(self.path, '.vcpkg_root'))): + print("Fetching vcpkg from {} to {}".format(self.vcpkgUrl, self.path)) + downloadAndExtract(self.vcpkgUrl, self.path, self.vcpkgHash) + + print("Replacing port files") + portsPath = os.path.join(self.path, 'ports') + if (os.path.islink(portsPath)): + os.unlink(portsPath) + if (os.path.isdir(portsPath)): + shutil.rmtree(portsPath, ignore_errors=True) + shutil.copytree(self.sourcePortsPath, portsPath) + + def downloadAndroidDependencies(self): + url = "https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/vcpkg-arm64-android.tar.gz" + hash = "832f82a4d090046bdec25d313e20f56ead45b54dd06eee3798c5c8cbdd64cce4067692b1c3f26a89afe6ff9917c10e4b601c118bea06d23f8adbfe5c0ec12bc3" + dest = os.path.join(self.path, 'installed') + downloadAndExtract(url, dest, hash) + + + def run(self, commands): + actualCommands = [self.exe, '--vcpkg-root', self.path] + actualCommands.extend(commands) + print("Running command") + print(actualCommands) + executeSubprocess(actualCommands, folder=self.path) + + def buildDependencies(self): + global args + print("Installing host tools") + self.run(['install', '--triplet', self.hostTriplet, 'hifi-host-tools']) + # Special case for android, grab a bunch of binaries + if args.android: + self.downloadAndroidDependencies() + return + + print("Installing build dependencies") + self.run(['install', '--triplet', self.triplet, 'hifi-client-deps']) + # Remove temporary build artifacts + builddir = os.path.join(self.path, 'buildtrees') + if os.path.isdir(builddir): + print("Wiping build trees") + shutil.rmtree(builddir, ignore_errors=True) + + def writeConfig(self): + global args + configFilePath = os.path.join(args.build_root, 'vcpkg.cmake') + print("Writing cmake config to {}".format(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') + cmakeTemplate = 'set(CMAKE_TOOLCHAIN_FILE "{}" CACHE FILEPATH "Toolchain file")\n' + cmakeTemplate += 'set(VKPKG_INSTALL_ROOT "{}" CACHE FILEPATH "vcpkg installed packages path")\n' + cmakeTemplate += 'set(VCPKG_TOOLS_DIR "{}" CACHE FILEPATH "vcpkg installed packages path")\n' + cmakeConfig = cmakeTemplate.format(cmakeScript, installPath, toolsPath).replace('\\', '/') + with open(configFilePath, 'w') as f: + f.write(cmakeConfig) + + def writeTag(self): + print("Writing tag {} to {}".format(self.tagContents, self.tagFile)) + with open(self.tagFile, 'w') as f: + f.write(self.tagContents) + +def main(): + vcpkg = VcpkgRepo() + vcpkg.bootstrap() + vcpkg.buildDependencies() + vcpkg.writeConfig() + vcpkg.writeTag() + + + +from argparse import ArgumentParser +parser = ArgumentParser(description='Prepare build dependencies.') +parser.add_argument('--android', action='store_true') +parser.add_argument('--debug', action='store_true') +parser.add_argument('--force-bootstrap', action='store_true') +parser.add_argument('--force-build', action='store_true') +parser.add_argument('--vcpkg-root', type=str, help='The location of the vcpkg distribution') +parser.add_argument('--build-root', required=True, type=str, help='The location of the cmake build') + +args = parser.parse_args() +main() + diff --git a/tests-manual/controllers/CMakeLists.txt b/tests-manual/controllers/CMakeLists.txt index ce1c150ed4..03043c79f2 100644 --- a/tests-manual/controllers/CMakeLists.txt +++ b/tests-manual/controllers/CMakeLists.txt @@ -11,14 +11,8 @@ setup_memory_debugger() # link in the shared libraries link_hifi_libraries(shared gl script-engine plugins render-utils ui-plugins input-plugins display-plugins controllers) - -if (WIN32) - add_dependency_external_projects(OpenVR) - find_package(OpenVR REQUIRED) - target_include_directories(${TARGET_NAME} PRIVATE ${OPENVR_INCLUDE_DIRS}) - target_link_libraries(${TARGET_NAME} ${OPENVR_LIBRARIES}) -endif() if (WIN32) + target_openvr() target_link_libraries(${TARGET_NAME} Winmm.lib) add_dependency_external_projects(wasapi) endif() diff --git a/tests-manual/render-texture-load/src/GLIHelpers.cpp b/tests-manual/render-texture-load/src/GLIHelpers.cpp index be39e7f1c8..abdd648485 100644 --- a/tests-manual/render-texture-load/src/GLIHelpers.cpp +++ b/tests-manual/render-texture-load/src/GLIHelpers.cpp @@ -10,6 +10,7 @@ #include #include +#if 0 #include #include #include @@ -68,3 +69,4 @@ gpu::TexturePointer processTexture(const QString& sourceFile) { // FIXME load the actual KTX texture return gpu::TexturePointer(); } +#endif \ No newline at end of file diff --git a/tests-manual/render-texture-load/src/GLIHelpers.h b/tests-manual/render-texture-load/src/GLIHelpers.h index a5d4f71bb3..b9332d7ba2 100644 --- a/tests-manual/render-texture-load/src/GLIHelpers.h +++ b/tests-manual/render-texture-load/src/GLIHelpers.h @@ -12,9 +12,8 @@ #include #include +#if 0 // Work around for a bug in the MSVC compiler that chokes when you use GLI and Qt headers together. -#define gli glm - #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-variable" @@ -46,3 +45,5 @@ gpu::TexturePointer processTexture(const QString& file); #endif + +#endif diff --git a/tests/shaders/CMakeLists.txt b/tests/shaders/CMakeLists.txt index e238405d62..a2bba2a425 100644 --- a/tests/shaders/CMakeLists.txt +++ b/tests/shaders/CMakeLists.txt @@ -4,6 +4,14 @@ macro (setup_testcase_dependencies) # link in the shared libraries link_hifi_libraries(shared test-utils gpu shaders gl ${PLATFORM_GL_BACKEND}) #target_spirv() + + find_package(spirv_cross_core REQUIRED) + find_package(spirv_cross_reflect REQUIRED) + find_package(spirv_cross_glsl REQUIRED) + target_include_directories(${TARGET_NAME} PRIVATE $) + target_include_directories(${TARGET_NAME} PRIVATE $ENV{VULKAN_SDK}/Include) + + package_libraries_for_deployment() endmacro () diff --git a/tests/shaders/src/ShaderTests.cpp b/tests/shaders/src/ShaderTests.cpp index 692771f0fc..56b92ed047 100644 --- a/tests/shaders/src/ShaderTests.cpp +++ b/tests/shaders/src/ShaderTests.cpp @@ -31,13 +31,27 @@ #include #include -#define RUNTIME_SHADER_COMPILE_TEST 0 +#define RUNTIME_SHADER_COMPILE_TEST 1 #if RUNTIME_SHADER_COMPILE_TEST +#include #include #include #include #include +#include + +#ifdef DEBUG +#define VCPKG_LIB_DIR "D:/hifi/vcpkg/hifi/installed/x64-windows/debug/lib/" +#else +#define VCPKG_LIB_DIR "D:/hifi/vcpkg/hifi/installed/x64-windows/lib/" +#endif + +#pragma comment(lib, VCPKG_LIB_DIR "shaderc_combined.lib") +#pragma comment(lib, VCPKG_LIB_DIR "spirv-cross-core.lib") +#pragma comment(lib, VCPKG_LIB_DIR "spirv-cross-glsl.lib") +#pragma comment(lib, VCPKG_LIB_DIR "spirv-cross-reflect.lib") + #endif QTEST_MAIN(ShaderTests) @@ -49,6 +63,7 @@ void ShaderTests::initTestCase() { if (!_context->makeCurrent()) { qFatal("Unable to make test GL context current"); } + QOpenGLContextWrapper(_context->qglContext()).makeCurrent(_context->getWindow()); gl::initModuleGl(); if (!_context->makeCurrent()) { qFatal("Unable to make test GL context current"); @@ -94,6 +109,7 @@ bool isSubset(const C& parent, const C& child) { return true; } +#if 0 gpu::Shader::ReflectionMap mergeReflection(const std::initializer_list& list) { gpu::Shader::ReflectionMap result; std::unordered_map> usedLocationsByType; @@ -124,6 +140,22 @@ gpu::Shader::ReflectionMap mergeReflection(const std::initializer_list +bool compareBindings(const C& actual, const gpu::Shader::LocationMap& expected) { + if (actual.size() != expected.size()) { + auto actualNames = toStringSet(actual, [](const auto& v) { return v.name; }); + auto expectedNames = toStringSet(expected, [](const auto& v) { return v.first; }); + if (!isSubset(expectedNames, actualNames)) { + qDebug() << "Found" << toQStringList(actualNames); + qDebug() << "Expected" << toQStringList(expectedNames); + return false; + } + } + return true; +} + +#endif + #endif template @@ -177,19 +209,6 @@ static void verifyInterface(const gpu::Shader::Source& vertexSource, const gpu:: } #if RUNTIME_SHADER_COMPILE_TEST -template -bool compareBindings(const C& actual, const gpu::Shader::LocationMap& expected) { - if (actual.size() != expected.size()) { - auto actualNames = toStringSet(actual, [](const auto& v) { return v.name; }); - auto expectedNames = toStringSet(expected, [](const auto& v) { return v.first; }); - if (!isSubset(expectedNames, actualNames)) { - qDebug() << "Found" << toQStringList(actualNames); - qDebug() << "Expected" << toQStringList(expectedNames); - return false; - } - } - return true; -} void configureGLSLCompilerResources(TBuiltInResource* glslCompilerResources) { glslCompilerResources->maxLights = 32; @@ -324,77 +343,40 @@ EShLanguage getShaderStage(const std::string& shaderName) { throw std::runtime_error("Invalid shader name"); } -const gpu::Shader::Source& loadShader(uint32_t shaderId); +void rebuildSource(shader::Dialect dialect, shader::Variant variant, const shader::Source& source) { + try { + using namespace glslang; + static const EShMessages messages = (EShMessages)(EShMsgDefault | EShMsgSpvRules | EShMsgVulkanRules); + auto shaderName = source.name; + const std::string baseOutName = "d:/shaders/" + shaderName; + auto stage = getShaderStage(shaderName); -bool compileSpirv(uint32_t shaderId, bool stereo) { - const gpu::Shader::Source& source = loadShader(shaderId); - using namespace glslang; + TShader shader(stage); + std::vector strings; + const auto& dialectVariantSource = source.dialectSources.at(dialect).variantSources.at(variant); + strings.push_back(dialectVariantSource.scribe.c_str()); + shader.setStrings(strings.data(), (int)strings.size()); + shader.setEnvInput(EShSourceGlsl, stage, EShClientOpenGL, 450); + shader.setEnvClient(EShClientVulkan, EShTargetVulkan_1_1); + shader.setEnvTarget(EShTargetSpv, EShTargetSpv_1_3); - static const std::string CORE_HEADER( - R"SHADER(#version 450 core -#define GPU_GL450 -#define BITFIELD int -#define GPU_SSBO_TRANSFORM_OBJECT -#define gl_VertexID gl_VertexIndex -#define gl_InstanceID gl_InstanceIndex -)SHADER"); + bool success = shader.parse(&glslCompilerResources, 450, false, messages); + if (!success) { + qWarning() << "Failed to parse shader " << shaderName.c_str(); + qWarning() << shader.getInfoLog(); + qWarning() << shader.getInfoDebugLog(); + throw std::runtime_error("Wrong"); + } - static const std::string DOMAIN_HEADER[] = { - "#define GPU_VERTEX_SHADER\r\n", - "#define GPU_PIXEL_SHADER\r\n", - "#define GPU_GEOMETRY_SHADER\r\n", - }; - - static const std::string STEREO_HEADER( - R"SHADER( -#define GPU_TRANSFORM_IS_STEREO -#define GPU_TRANSFORM_STEREO_CAMERA -#define GPU_TRANSFORM_STEREO_CAMERA_INSTANCED -#define GPU_TRANSFORM_STEREO_SPLIT_SCREEN -)SHADER"); - - static std::once_flag once; - static TBuiltInResource glslCompilerResources; - std::call_once(once, [&] { configureGLSLCompilerResources(&glslCompilerResources); }); - - static const EShMessages messages = (EShMessages)(EShMsgDefault | EShMsgSpvRules | EShMsgVulkanRules); - auto shaderName = shader::loadShaderName(shaderId); - auto stage = getShaderStage(shaderName); - - TShader shader(stage); - std::vector strings; - strings.push_back(CORE_HEADER.c_str()); - strings.push_back(DOMAIN_HEADER[stage == EShLangVertex ? 0 : 1].c_str()); - if (stereo) { - strings.push_back(STEREO_HEADER.c_str()); - } - strings.push_back(source.getCode().c_str()); - shader.setStrings(strings.data(), (int)strings.size()); - shader.setEnvInput(EShSourceGlsl, stage, EShClientOpenGL, 450); - shader.setEnvClient(EShClientVulkan, EShTargetVulkan_1_1); - shader.setEnvTarget(EShTargetSpv, EShTargetSpv_1_3); - bool success = shader.parse(&glslCompilerResources, 450, false, messages); - if (!success) { - qWarning() << "Failed to parse shader " << shaderName.c_str(); - qWarning() << shader.getInfoLog(); - qWarning() << shader.getInfoDebugLog(); - return false; - } - - // Create and link a shader program containing the single shader - glslang::TProgram program; - program.addShader(&shader); - if (!program.link(messages)) { - qWarning() << "Failed to compile shader " << shaderName.c_str(); - qWarning() << program.getInfoLog(); - qWarning() << program.getInfoDebugLog(); - return false; - } - - std::string baseOutName = "d:/shaders/" + shaderName; - if (stereo) { - baseOutName += ".stereo"; - } + // Create and link a shader program containing the single shader + glslang::TProgram program; + program.addShader(&shader); + if (!program.link(messages)) { + qWarning() << "Failed to compile shader " << shaderName.c_str(); + qWarning() << program.getInfoLog(); + qWarning() << program.getInfoDebugLog(); + throw std::runtime_error("Wrong"); + } // Output the SPIR-V code from the shader program std::vector spirv; @@ -429,9 +411,10 @@ bool compileSpirv(uint32_t shaderId, bool stereo) { throw std::runtime_error("bad disassembly"); } - write(baseOutName + ".spv.txt", disassembly); - - return true; + write(baseOutName + ".spv.txt", disassembly); + } catch (const std::runtime_error& error) { + qWarning() << error.what(); + } } #endif @@ -524,88 +507,10 @@ void ShaderTests::testShaderLoad() { << fragmentSource.name.c_str(); QFAIL("Program link error"); } -#if RUNTIME_SHADER_COMPILE_TEST - auto expectedBindings = mergeReflection({ vertexSource, fragmentSource }); - QVERIFY(glshader != nullptr); - for (const auto& shaderObject : glshader->_shaderObjects) { - const auto& program = shaderObject.glprogram; - - // Uniforms - { - auto uniforms = gl::Uniform::load(program); - const auto& uniformRemap = shaderObject.uniformRemap; - auto expectedUniforms = expectedBindings[gpu::Shader::BindingType::UNIFORM]; - if (!compareBindings(uniforms, expectedUniforms)) { - qDebug() << "Uniforms mismatch"; - } - for (const auto& uniform : uniforms) { - if (0 != expectedUniforms.count(uniform.name)) { - auto expectedLocation = expectedUniforms[uniform.name]; - if (0 != uniformRemap.count(expectedLocation)) { - expectedLocation = uniformRemap.at(expectedLocation); - } - QVERIFY(expectedLocation == uniform.binding); - } - } - } - - // Textures - { - auto textures = gl::Uniform::loadTextures(program); - auto expiredBegin = - std::remove_if(textures.begin(), textures.end(), [&](const gl::Uniform& uniform) -> bool { - return uniform.name == "transformObjectBuffer"; - }); - textures.erase(expiredBegin, textures.end()); - - const auto expectedTextures = expectedBindings[gpu::Shader::BindingType::TEXTURE]; - if (!compareBindings(textures, expectedTextures)) { - qDebug() << "Textures mismatch"; - } - for (const auto& texture : textures) { - if (0 != expectedTextures.count(texture.name)) { - const auto& location = texture.binding; - const auto& expectedUnit = expectedTextures.at(texture.name); - GLint actualUnit = -1; - glGetUniformiv(program, location, &actualUnit); - QVERIFY(expectedUnit == actualUnit); - } - } - } - - // UBOs - { - auto ubos = gl::UniformBlock::load(program); - auto expectedUbos = expectedBindings[gpu::Shader::BindingType::UNIFORM_BUFFER]; - if (!compareBindings(ubos, expectedUbos)) { - qDebug() << "UBOs mismatch"; - } - for (const auto& ubo : ubos) { - if (0 != expectedUbos.count(ubo.name)) { - QVERIFY(expectedUbos[ubo.name] == ubo.binding); - } - } - } - - // FIXME add storage buffer validation - } -#endif } } catch (const std::runtime_error& error) { QFAIL(error.what()); } -#if RUNTIME_SHADER_COMPILE_TEST - for (uint32_t i = 1; i <= maxShader; ++i) { - auto used = usedShaders.count(i); - if (0 != usedShaders.count(i)) { - continue; - } - auto reflectionJson = shader::loadShaderReflection(i); - auto name = QJsonDocument::fromJson(reflectionJson.c_str()).object()["name"].toString(); - qDebug() << "Unused shader" << name; - } -#endif - qDebug() << "Completed all shaders"; } diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 1c36306410..6ec9125ce8 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,8 +1,6 @@ # add the tool directories -add_subdirectory(scribe) -set_target_properties(scribe PROPERTIES FOLDER "Tools") - find_npm() + if (NPM_EXECUTABLE) add_subdirectory(jsdoc) set_target_properties(jsdoc PROPERTIES FOLDER "Tools") diff --git a/tools/scribe/CMakeLists.txt b/tools/scribe/CMakeLists.txt deleted file mode 100755 index 9c71aeec9c..0000000000 --- a/tools/scribe/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -set(TARGET_NAME scribe) - -# don't use the setup_hifi_project macro as we don't want Qt or GLM dependencies -file(GLOB TARGET_SRCS src/*) -add_executable(${TARGET_NAME} ${TARGET_SRCS}) -if (WIN32) - set_property(TARGET ${TARGET_NAME} APPEND_STRING PROPERTY LINK_FLAGS_DEBUG "/OPT:NOREF /OPT:NOICF") -endif() diff --git a/tools/scribe/src/TextTemplate.cpp b/tools/scribe/src/TextTemplate.cpp deleted file mode 100755 index aad508487c..0000000000 --- a/tools/scribe/src/TextTemplate.cpp +++ /dev/null @@ -1,1012 +0,0 @@ -// -// TextTemplate.cpp -// tools/shaderScribe/src -// -// Created by Sam Gateau on 12/15/2014. -// Copyright 2013 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -#include "TextTemplate.h" - -#include -#include -#include -#include - -typedef TextTemplate::Block::Pointer BlockPointer; -typedef TextTemplate::Config::Pointer ConfigPointer; -typedef TextTemplate::Pointer TextTemplatePointer; - -const std::string TextTemplate::Tag::NULL_VAR = "_SCRIBE_NULL"; - -//----------------------------------------------------------------------------- -TextTemplate::Config::Config() : - _includes(), - _funcs(), - _logStream(&std::cout), - _numErrors(0), - _includerCallback(TextTemplate::loadFile) { - _paths.push_back(""); -} - -const TextTemplatePointer TextTemplate::Config::addInclude(const ConfigPointer& config, const char* include) { - if (!config) { - return TextTemplatePointer(); - } - - TextTemplatePointer included = config->findInclude(include); - if (included) { - return included; - } - - // INcluded doest exist yet so let's try to create it - String includeStream; - if (config->_includerCallback(config, include, includeStream)) { - // ok, then create a new Template on the include file with this as lib - included = std::make_shared(include, config); - - std::stringstream src(includeStream); - - int nbErrors = included->parse(src); - if (nbErrors > 0) { - included->logError(included->_root, "File failed to parse, not included"); - return TextTemplatePointer(); - } - config->_includes.insert(Includes::value_type(include, included)); - return included; - } - - return TextTemplatePointer(); -} - -const TextTemplatePointer TextTemplate::Config::findInclude(const char* include) { - Includes::iterator includeIt = _includes.find(String(include)); - if (includeIt != _includes.end()) { - return (*includeIt).second; - } else { - return TextTemplatePointer(); - } -} - -void TextTemplate::Config::addIncludePath(const char* path) { - _paths.push_back(String(path)); -} - -bool TextTemplate::loadFile(const ConfigPointer& config, const char* filename, String& source) { - String sourceFile(filename); - String fullfilename; - for (unsigned int i = 0; i < config->_paths.size(); i++) { - fullfilename = config->_paths[i] + sourceFile; - std::ifstream ifs; - ifs.open(fullfilename.c_str()); - if (ifs.is_open()) { - config->_includeFullPaths.insert(fullfilename); - std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); - source = str; - ifs.close(); - return (source.length() > 0); - } - } - - return false; -} - -TextTemplate::Funcs::Funcs() : - _funcs() { -} - -TextTemplate::Funcs::~Funcs() { -} - - -const BlockPointer TextTemplate::Funcs::findFunc(const char* func) { - map::iterator it = _funcs.find(String(func)); - if (it != _funcs.end()) { - return (*it).second; - } else { - return BlockPointer(); - } -} - -const BlockPointer TextTemplate::Funcs::addFunc(const char* func, const BlockPointer& funcBlock) { - BlockPointer included = findFunc(func); - if (! included) { - _funcs.insert(map::value_type(func, funcBlock)); - } - return included; -} - -void TextTemplate::Block::addNewBlock(const Pointer& parent, const Pointer& block) { - if (parent) { - parent->blocks.push_back(block); - block->parent = parent; - } -} - -const BlockPointer& TextTemplate::Block::getCurrentBlock(const Pointer& block) { - if (block && block->command.isBlockEnd()) { - return block->parent; - } else { - return block; - } -} - -void TextTemplate::logError(const Block::Pointer& block, const char* fmt, ...) { - va_list argp; - va_start(argp, fmt); - - char buff[256]; - sprintf(buff, fmt, argp); - - _numErrors++; - log() << block->sourceName << " Error >>" << buff << std::endl; - - int level = 1; - displayTree(std::cerr, level); - -} - -bool TextTemplate::grabUntilBeginTag(std::istream* str, std::string& grabbed, Tag::Type& tagType) { - std::stringstream dst; - while (!str->eof()) { - - std::string datatoken; - getline((*str), datatoken, Tag::BEGIN); - dst << datatoken; - - char next = str->peek(); - if (next == Tag::VAR) { - tagType = Tag::VARIABLE; - grabbed = dst.str(); - str->get(); // skip tag char - return true; - } else if (next == Tag::COM) { - tagType = Tag::COMMAND; - grabbed = dst.str(); - str->get(); // skip tag char - return true; - } else if (next == Tag::REM) { - tagType = Tag::REMARK; - grabbed = dst.str(); - str->get(); // skip tag char - return true; - } else { - if (!str->eof()) { - // false positive, just found the Tag::BEGIN without consequence - dst << Tag::BEGIN; - // keep searching - } else { - // end of the file finishing with no tag - tagType = Tag::INVALID; - grabbed = dst.str(); - return true; - } - } - } - - return false; -} - -bool TextTemplate::grabUntilEndTag(std::istream* str, std::string& grabbed, Tag::Type& tagType) { - std::stringstream dst; - - // preEnd char depends on tag type - char preEnd = Tag::COM; - if (tagType == Tag::VARIABLE) { - preEnd = Tag::VAR; - } else if (tagType == Tag::REMARK) { - preEnd = Tag::REM; - } - - while (!str->eof() && !str->fail()) { - // looking for the end of the tag means find the next preEnd - std::string dataToken; - getline((*str), dataToken, preEnd); - char end = str->peek(); - - dst << dataToken; - - // and if the next char is Tag::END then that's it - if (end == Tag::END) { - grabbed = dst.str(); - str->get(); // eat the Tag::END - return true; - } else { - // false positive, keep on searching - dst << preEnd; - } - } - grabbed = dst.str(); - return false; -} - -bool TextTemplate::stepForward(std::istream* str, std::string& grabbed, std::string& tag, Tag::Type& tagType, - Tag::Type& nextTagType) { - if (str->eof()) { - return false; - } - - if (!_steppingStarted) { - _steppingStarted = true; - return grabUntilBeginTag(str, grabbed, nextTagType); - } - - // Read from the last opening Tag::BEGIN captured to the next Tag::END - if (grabUntilEndTag(str, tag, tagType)) { - // skip trailing space and new lines only after Command or Remark tag block - if ((tagType == Tag::COMMAND) || (tagType == Tag::REMARK)) { - while (!str->eof() && !str->fail()) { - char c = str->peek(); - if ((c == ' ') || (c == '\t') || (c == '\n')) { - str->get(); - } else { - break; - } - } - } - - grabUntilBeginTag(str, grabbed, nextTagType); - } - - return true; //hasElement; -} - -const BlockPointer TextTemplate::processStep(const BlockPointer& block, std::string& grabbed, std::string& tag, - Tag::Type& tagType) { - switch (tagType) { - case Tag::INVALID: - block->ostr << grabbed; - return block; - break; - case Tag::VARIABLE: - return processStepVar(block, grabbed, tag); - break; - case Tag::COMMAND: - return processStepCommand(block, grabbed, tag); - break; - case Tag::REMARK: - return processStepRemark(block, grabbed, tag); - break; - } - - logError(block, "Invalid tag"); - return block; -} - -bool TextTemplate::grabFirstToken(String& src, String& token, String& reminder) { - bool goOn = true; - std::string::size_type i = 0; - while (goOn && (i < src.length())) { - char c = src[i]; - if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || (c == '_') || (c == '.') || (c == '[') || (c == ']')) { - token += c; - } else { - if (!token.empty()) { - reminder = src.substr(i); - return true; - } - } - i++; - } - - return (!token.empty()); -} - -bool TextTemplate::convertExpressionToArguments(String& src, std::vector< String >& arguments) { - std::stringstream str(src); - String token; - - while (!str.eof()) { - str >> token; - if (!str.fail()) { - arguments.push_back(token); - } - } - - return true; -} - -bool TextTemplate::convertExpressionToDefArguments(String& src, std::vector< String >& arguments) { - if (src.empty()) { - return false; - } - - std::stringstream argstr(src); - std::stringstream dest; - bool inVar = false; - while (!argstr.eof()) { - // parse the value of a var, try to find a VAR, so look for the pattern BEGIN,VAR ... VAR,END - String token; - char tag; - if (!inVar) { - getline(argstr, token, Tag::BEGIN); - dest << token; - tag = argstr.peek(); - } else { - getline(argstr, token, Tag::END); - dest << token; - tag = token.back(); - } - - if (tag == Tag::VAR) { - if (!inVar) { - // real var coming: - arguments.push_back(dest.str()); - inVar = true; - } else { - // real var over - arguments.push_back(dest.str()); - inVar = false; - } - } else { - if (argstr.eof()) { - arguments.push_back(dest.str()); - } else { - // put back the tag char stolen - dest << (!inVar ? Tag::BEGIN : Tag::END); - } - } - } - - return true; -} - -bool TextTemplate::convertExpressionToFuncArguments(String& src, std::vector< String >& arguments) { - if (src.empty()) { - return false; - } - std::stringstream streamSrc(src); - String params; - getline(streamSrc, params, '('); - getline(streamSrc, params, ')'); - if (params.empty()) { - return false; - } - - std::stringstream str(params); - String token; - int nbTokens = 0; - while (!str.eof()) { - char c = str.peek(); - if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || (c == '_') || (c == '.') || (c == Tag::VAR) || (c == '[') || (c == ']')) { - token += c; - } else if (c == ',') { - if (!token.empty()) { - if (token == Tag::NULL_VAR) { - arguments.push_back(Tag::NULL_VAR); - } else { - arguments.push_back(token); - } - nbTokens++; - } - token.clear(); - } - - str.get(); - } - - if (token.size()) { - arguments.push_back(token); - nbTokens++; - } - - return (nbTokens > 0); -} - -const BlockPointer TextTemplate::processStepVar(const BlockPointer& block, String& grabbed, String& tag) { - // then look at the define - String var = tag; - String varName; - String val; - - if (grabFirstToken(var, varName, val)) { - if (!varName.empty()) { - BlockPointer parent = Block::getCurrentBlock(block); - - // Add a new BLock - BlockPointer newBlock = std::make_shared(_root->sourceName); - (newBlock->ostr) << grabbed; - - newBlock->command.type = Command::VAR; - - newBlock->command.arguments.push_back(varName); - - if (!val.empty()) { - convertExpressionToFuncArguments(val, newBlock->command.arguments); - } - - Block::addNewBlock(parent, newBlock); - - // dive in the new block - return newBlock; - } - } - - return block; -} - -const BlockPointer TextTemplate::processStepCommand(const BlockPointer& block, String& grabbed, String& tag) { - // Grab the command name - String command = tag; - String commandName; - - if (grabFirstToken(command, commandName, command)) { - if (commandName.compare("def") == 0) { - return processStepDef(block, grabbed, command); - } else if (commandName.compare("if") == 0) { - return processStepCommandIf(block, grabbed, command); - } else if (commandName.compare("endif") == 0) { - return processStepCommandEndIf(block, grabbed, command); - } else if (commandName.compare("else") == 0) { - return processStepCommandElse(block, grabbed, command); - } else if (commandName.compare("elif") == 0) { - return processStepCommandElif(block, grabbed, command); - } else if (commandName.compare("include") == 0) { - return processStepInclude(block, grabbed, command); - } else if (commandName.compare("func") == 0) { - return processStepFunc(block, grabbed, command); - } else if (commandName.compare("endfunc") == 0) { - return processStepEndFunc(block, grabbed, command); - } - } - - return block; -} - -const BlockPointer TextTemplate::processStepDef(const BlockPointer& block, String& grabbed, String& def) { - // then look at the define - String varName; - String val; - - if (!grabFirstToken(def, varName, val)) { - logError(block, "Invalid Var name in a tag"); - return block; - } - - BlockPointer parent = Block::getCurrentBlock(block); - - // Add a new BLock - BlockPointer newBlock = std::make_shared(_root->sourceName); - (newBlock->ostr) << grabbed; - - newBlock->command.type = Command::DEF; - newBlock->command.arguments.push_back(varName); - if (!val.empty()) { - // loose first character which should be a white space - val = val.substr(val.find_first_not_of(' ')); - convertExpressionToDefArguments(val, newBlock->command.arguments); - } - - Block::addNewBlock(parent, newBlock); - - // dive in the new block - return newBlock; -} - - -const BlockPointer TextTemplate::processStepCommandIf(const BlockPointer& block, String& grabbed, String& expression) { - BlockPointer parent = Block::getCurrentBlock(block); - - // Add a new BLock depth - BlockPointer newIfBlock = std::make_shared(_root->sourceName); - newIfBlock->command.type = Command::IFBLOCK; - - Block::addNewBlock(parent, newIfBlock); - - BlockPointer newBlock = std::make_shared(_root->sourceName); - (newBlock->ostr) << grabbed; - - newBlock->command.type = Command::IF; - convertExpressionToArguments(expression, newBlock->command.arguments); - - Block::addNewBlock(newIfBlock, newBlock); - - // dive in the new If branch - return newBlock; -} - -const BlockPointer TextTemplate::processStepCommandEndIf(const BlockPointer& block, String& grabbed, String& expression) { - BlockPointer parent = Block::getCurrentBlock(block); - - // are we in a if block ? - if ((parent->command.type == Command::IF) - || (parent->command.type == Command::ELIF) - || (parent->command.type == Command::ELSE)) { - BlockPointer newBlock = std::make_shared(_root->sourceName); - (newBlock->ostr) << grabbed; - - newBlock->command.type = Command::ENDIF; - newBlock->command.arguments.push_back(expression); - - Block::addNewBlock(parent->parent->parent, newBlock); - - return newBlock; - } else { - logError(block, "Invalid block, not in a block"); - return block; - } - - return block; -} - -const BlockPointer TextTemplate::processStepCommandElse(const BlockPointer& block, String& grabbed, String& expression) { - BlockPointer parent = Block::getCurrentBlock(block); - - // are we in a if block ? - if ((parent->command.type == Command::IF) - || (parent->command.type == Command::ELIF)) { - // All good go back to the IfBlock - parent = parent->parent; - - // Add a new BLock depth - BlockPointer newBlock = std::make_shared(_root->sourceName); - newBlock->ostr << grabbed; - newBlock->command.type = Command::ELSE; - newBlock->command.arguments.push_back(expression); - - Block::addNewBlock(parent, newBlock); - - // dive in the new block - return newBlock; - - } else if ((block)->command.type == Command::ELSE) { - logError(block, "Invalid block, in a block but after a block"); - return block; - } else { - logError(block, "Invalid block, not in a block"); - return block; - } -} - -const BlockPointer TextTemplate::processStepCommandElif(const BlockPointer& block, String& grabbed, String& expression) { - BlockPointer parent = Block::getCurrentBlock(block); - - // are we in a if block ? - if ((parent->command.type == Command::IF) - || (parent->command.type == Command::ELIF)) { - // All good go back to the IfBlock - parent = parent->parent; - - // Add a new BLock depth - BlockPointer newBlock = std::make_shared(_root->sourceName); - (newBlock->ostr) << grabbed; - - newBlock->command.type = Command::ELIF; - convertExpressionToArguments(expression, newBlock->command.arguments); - - Block::addNewBlock(parent, newBlock); - - // dive in the new block - return newBlock; - - } else if (parent->command.type == Command::ELSE) { - logError(block, "Invalid block, in a block but after a block"); - return block; - } else { - logError(block, "Invalid block, not in a block"); - return block; - } -} - -const BlockPointer TextTemplate::processStepRemark(const BlockPointer& block, String& grabbed, String& tag) { - // nothing to do :) - - // no need to think, let's just add the grabbed text - (block->ostr) << grabbed; - - return block; -} - -const BlockPointer TextTemplate::processStepInclude(const BlockPointer& block, String& grabbed, String& include) { - BlockPointer parent = Block::getCurrentBlock(block); - - // Add a new BLock - BlockPointer newBlock = std::make_shared(_root->sourceName); - (newBlock->ostr) << grabbed; - - newBlock->command.type = Command::INCLUDE; - convertExpressionToArguments(include, newBlock->command.arguments); - - Block::addNewBlock(parent, newBlock); - - TextTemplatePointer inc = Config::addInclude(_config, newBlock->command.arguments.front().c_str()); - if (!inc) { - logError(newBlock, "Failed to include %s", newBlock->command.arguments.front().c_str()); - } - - // dive in the new block - return newBlock; -} - -const BlockPointer TextTemplate::processStepFunc(const BlockPointer& block, String& grabbed, String& func) { - // then look at the define - String varName; - String var; - - if (!grabFirstToken(func, varName, var)) { - logError(block, "Invalid func name <%s> in a block", func.c_str()); - return block; - } - - // DOes the func already exists ? - if (_config->_funcs.findFunc(varName.c_str())) { - logError(block, "Declaring a new func named <%s> already exists", func.c_str()); - return block; - } - - BlockPointer parent = Block::getCurrentBlock(block); - - // Add a new BLock - BlockPointer newBlock = std::make_shared(_root->sourceName); - (newBlock->ostr) << grabbed; - - newBlock->command.type = Command::FUNC; - newBlock->command.arguments.push_back(varName); - convertExpressionToFuncArguments(var, newBlock->command.arguments); - - _config->_funcs.addFunc(varName.c_str(), newBlock); - - Block::addNewBlock(parent, newBlock); - - // dive in the new block - return newBlock; -} - -const BlockPointer TextTemplate::processStepEndFunc(const BlockPointer& block, String& grabbed, String& tag) { - BlockPointer parent = Block::getCurrentBlock(block); - - // are we in a func block ? - if (parent->command.type == Command::FUNC) { - // Make sure the FUnc has been declared properly - BlockPointer funcBlock = _config->_funcs.findFunc(parent->command.arguments.front().c_str()); - if (funcBlock != parent) { - logError(block, "Mismatching blocks"); - return BlockPointer(); - } - - // Everything is cool , so let's unplugg the FUnc block from this tree and just put the EndFunc block - - BlockPointer newBlock = std::make_shared(_root->sourceName); - (newBlock->ostr) << grabbed; - - newBlock->command.type = Command::ENDFUNC; - convertExpressionToArguments(tag, newBlock->command.arguments); - - newBlock->parent = parent->parent; - - parent->parent->blocks.back() = newBlock; - - parent->parent = 0; - - // dive in the new block - return newBlock; - } else { - logError(block, "Invalid block, not in a block"); - return BlockPointer(); - } - - return block; -} - -TextTemplate::TextTemplate(const String& name, const ConfigPointer& externalConfig) : - _config(externalConfig), - _root(new Block(name)), - _numErrors(0), - _steppingStarted(false) { -} - -TextTemplate::~TextTemplate() { -} - -int TextTemplate::scribe(std::ostream& dst, std::istream& src, Vars& vars) { - int nbErrors = parse(src); - - if (nbErrors == 0) { - return generate(dst, vars); - } - return nbErrors; -} - -int TextTemplate::generateTree(std::ostream& dst, const BlockPointer& block, Vars& vars) { - BlockPointer newCurrentBlock; - int numPasses = evalBlockGeneration(dst, block, vars, newCurrentBlock); - for (int passNum= 0; passNum < numPasses; passNum++) { - dst << newCurrentBlock->ostr.str(); - - for (auto child : newCurrentBlock->blocks) { - generateTree(dst, child, vars); - } - } - - return _numErrors; -} - -int TextTemplate::evalBlockGeneration(std::ostream& dst, const BlockPointer& block, Vars& vars, BlockPointer& branch) { - switch (block->command.type) { - case Command::BLOCK: { - branch = block; - return 1; - } - break; - case Command::VAR: { - Vars::iterator it = vars.find(block->command.arguments.front()); - if (it != vars.end()) { - dst << (*it).second; - } else { - BlockPointer funcBlock = _config->_funcs.findFunc(block->command.arguments.front().c_str()); - if (funcBlock) { - // before diving in the func tree, let's modify the vars with the local defs: - int nbParams = (int)std::min(block->command.arguments.size(), - funcBlock->command.arguments.size()); - std::vector< String > paramCache; - paramCache.push_back(""); - String val; - for (int i = 1; i < nbParams; i++) { - val = block->command.arguments[i]; - if ((val[0] == Tag::VAR) && (val[val.length()-1] == Tag::VAR)) { - val = val.substr(1, val.length()-2); - Vars::iterator it = vars.find(val); - if (it != vars.end()) { - val = (*it).second; - } else { - val = Tag::NULL_VAR; - } - } - - Vars::iterator it = vars.find(funcBlock->command.arguments[i]); - if (it != vars.end()) { - paramCache.push_back((*it).second); - (*it).second = val; - } else { - if (val != Tag::NULL_VAR) { - vars.insert(Vars::value_type(funcBlock->command.arguments[i], val)); - } - - paramCache.push_back(Tag::NULL_VAR); - } - } - - generateTree(dst, funcBlock, vars); - - for (int i = 1; i < nbParams; i++) { - if (paramCache[i] == Tag::NULL_VAR) { - vars.erase(funcBlock->command.arguments[i]); - } else { - vars[funcBlock->command.arguments[i]] = paramCache[i]; - } - } - } - } - branch = block; - return 1; - } - break; - case Command::IFBLOCK: { - // ok, go through the branches and pick the first one that goes - for (auto child: block->blocks) { - int numPasses = evalBlockGeneration(dst, child, vars, branch); - if (numPasses > 0) { - return numPasses; - } - } - } - break; - case Command::IF: - case Command::ELIF: { - if (!block->command.arguments.empty()) { - // Just one argument means check for the var beeing defined - if (block->command.arguments.size() == 1) { - Vars::iterator it = vars.find(block->command.arguments.front()); - if (it != vars.end()) { - branch = block; - return 1; - } - } else if (block->command.arguments.size() == 2) { - if (block->command.arguments[0].compare("not") == 0) { - Vars::iterator it = vars.find(block->command.arguments[1]); - if (it == vars.end()) { - branch = block; - return 1; - } - } - } else if (block->command.arguments.size() == 3) { - if (block->command.arguments[1].compare("and") == 0) { - Vars::iterator itL = vars.find(block->command.arguments[0]); - Vars::iterator itR = vars.find(block->command.arguments[2]); - if ((itL != vars.end()) && (itR != vars.end())) { - branch = block; - return 1; - } - } else if (block->command.arguments[1].compare("or") == 0) { - Vars::iterator itL = vars.find(block->command.arguments[0]); - Vars::iterator itR = vars.find(block->command.arguments[2]); - if ((itL != vars.end()) || (itR != vars.end())) { - branch = block; - return 1; - } - } else if (block->command.arguments[1].compare("==") == 0) { - Vars::iterator itL = vars.find(block->command.arguments[0]); - if (itL != vars.end()) { - if ((*itL).second.compare(block->command.arguments[2]) == 0) { - branch = block; - return 1; - } - } - } - } - - } - return 0; - } - break; - case Command::ELSE: { - branch = block; - return 1; - } - break; - case Command::ENDIF: { - branch = block; - return 1; - } - break; - case Command::DEF: { - if (block->command.arguments.size()) { - // THe actual value of the var defined sneeds to be evaluated: - String val; - for (unsigned int t = 1; t < block->command.arguments.size(); t++) { - // detect if a param is a var - auto len = block->command.arguments[t].length(); - if ((block->command.arguments[t][0] == Tag::VAR) - && (block->command.arguments[t][len - 1] == Tag::VAR)) { - String var = block->command.arguments[t].substr(1, len - 2); - Vars::iterator it = vars.find(var); - if (it != vars.end()) { - val += (*it).second; - } - } else { - val += block->command.arguments[t]; - } - } - - Vars::iterator it = vars.find(block->command.arguments.front()); - if (it == vars.end()) { - vars.insert(Vars::value_type(block->command.arguments.front(), val)); - } else { - (*it).second = val; - } - - branch = block; - return 1; - } else { - branch = block; - return 0; - } - } - break; - - case Command::INCLUDE: { - TextTemplatePointer include = _config->findInclude(block->command.arguments.front().c_str()); - if (include && !include->_root->blocks.empty()) { - if (include->_root) { - generateTree(dst, include->_root, vars); - } - } - - branch = block; - return 1; - } - break; - - case Command::FUNC: { - branch = block; - return 1; - } - break; - - case Command::ENDFUNC: { - branch = block; - return 1; - } - break; - - default: { - } - } - - return 0; -} - - -int TextTemplate::parse(std::istream& src) { - _root->command.type = Command::BLOCK; - BlockPointer currentBlock = _root; - _numErrors = 0; - - // First Parse the input file - int nbLoops = 0; - bool goOn = true; - Tag::Type tagType = Tag::INVALID; - Tag::Type nextTagType = Tag::INVALID; - while (goOn) { - std::string data; - std::string tag; - if (stepForward(&src, data, tag, tagType, nextTagType)) { - currentBlock = processStep(currentBlock, data, tag, tagType); - } else { - goOn = false; - } - - tagType = nextTagType; - nbLoops++; - } - - return _numErrors; -} - -int TextTemplate::generate(std::ostream& dst, Vars& vars) { - return generateTree(dst, _root, vars); -} - -void TextTemplate::displayTree(std::ostream& dst, int& level) const { - Block::displayTree(_root, dst, level); -} - -void TextTemplate::Block::displayTree(const BlockPointer& block, std::ostream& dst, int& level) { - String tab(level * 2, ' '); - - const String BLOCK_TYPE_NAMES[] = { - "VAR", - "BLOCK", - "FUNC", - "ENDFUNC", - "IFBLOCK", - "IF", - "ELIF", - "ELSE", - "ENDIF", - "FOR", - "ENDFOR", - "INCLUDE", - "DEF" - }; - - dst << tab << "{ " << BLOCK_TYPE_NAMES[block->command.type] << ":"; - if (!block->command.arguments.empty()) { - for (auto arg: block->command.arguments) { - dst << " " << arg; - } - } - dst << std::endl; - - level++; - for (auto sub: block->blocks) { - displayTree(sub, dst, level); - } - level--; - - dst << tab << "}" << std::endl; -} - -void TextTemplate::Config::displayTree(std::ostream& dst, int& level) const { - String tab(level * 2, ' '); - - level++; - dst << tab << "Includes:" << std::endl; - for (auto inc: _includes) { - dst << tab << tab << inc.first << std::endl; - inc.second->displayTree(dst, level); - } - dst << tab << "Funcs:" << std::endl; - for (auto func: _funcs._funcs) { - dst << tab << tab << func.first << std::endl; - TextTemplate::Block::displayTree( func.second, dst, level); - } - level--; -} - -void TextTemplate::Config::displayMakefileDeps(std::ostream& dst) const { - for (const auto& include : _includeFullPaths) { - std::cout << include << std::endl; - } -} diff --git a/tools/scribe/src/TextTemplate.h b/tools/scribe/src/TextTemplate.h deleted file mode 100755 index b3b767176c..0000000000 --- a/tools/scribe/src/TextTemplate.h +++ /dev/null @@ -1,213 +0,0 @@ - -// -// TextTemplate.cpp -// tools/shaderScribe/src -// -// Created by Sam Gateau on 12/15/2014. -// Copyright 2013 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -#ifndef hifi_TEXT_TEMPLATE_H -#define hifi_TEXT_TEMPLATE_H - -#include -#include -#include -#include -#include -#include -#include -#include - -class TextTemplate { -public: - typedef std::shared_ptr< TextTemplate > Pointer; - typedef std::string String; - typedef std::vector< String > StringVector; - typedef std::map< String, String > Vars; - typedef std::map< String, TextTemplate::Pointer > Includes; - using PathSet = std::unordered_set; - - class Tag { - public: - enum Type { - VARIABLE = 0, - COMMAND, - REMARK, - INVALID = -1, - }; - - static const char BEGIN = '<'; - static const char END = '>'; - - static const char VAR = '$'; - static const char COM = '@'; - static const char REM = '!'; - - static const std::string NULL_VAR; - }; - - class Command { - public: - typedef std::vector< Command > vector; - - enum Type { - VAR = 0, - BLOCK, - FUNC, - ENDFUNC, - IFBLOCK, - IF, - ELIF, - ELSE, - ENDIF, - FOR, - ENDFOR, - INCLUDE, - DEF, - }; - - Type type; - std::vector< String > arguments; - - bool isBlockEnd() { - switch (type) { - case ENDFUNC: - case ENDIF: - case ENDFOR: - case INCLUDE: - case DEF: - case VAR: - return true; - default: - return false; - } - } - }; - - class Block { - public: - typedef std::shared_ptr Pointer; - typedef std::vector< Block::Pointer > Vector; - - Block::Pointer parent; - Command command; - Vector blocks; - std::stringstream ostr; - - String sourceName; - - Block(const String& sourceFilename) : - sourceName(sourceFilename) {} - - static void addNewBlock(const Block::Pointer& parent, const Block::Pointer& block); - static const Block::Pointer& getCurrentBlock(const Block::Pointer& block); - - static void displayTree(const Block::Pointer& block, std::ostream& dst, int& level); - }; - - class Funcs { - public: - typedef std::map< String, Block::Pointer > map; - - Funcs(); - ~Funcs(); - - const Block::Pointer findFunc(const char* func); - const Block::Pointer addFunc(const char* func, const Block::Pointer& root); - - map _funcs; - protected: - }; - - class Config { - public: - typedef std::shared_ptr< Config > Pointer; - typedef bool (*IncluderCallback) (const Config::Pointer& config, const char* filename, String& source); - PathSet _includeFullPaths; - Includes _includes; - Funcs _funcs; - std::ostream* _logStream; - int _numErrors; - IncluderCallback _includerCallback; - StringVector _paths; - - Config(); - - static const TextTemplate::Pointer addInclude(const Config::Pointer& config, const char* include); - const TextTemplate::Pointer findInclude(const char* include); - - void addIncludePath(const char* path); - - void displayTree(std::ostream& dst, int& level) const; - - void displayMakefileDeps(std::ostream& dst) const; - }; - - static bool loadFile(const Config::Pointer& config, const char* filename, String& source); - - TextTemplate(const String& name, const Config::Pointer& config = std::make_shared()); - ~TextTemplate(); - - // Scibe does all the job of parsing an inout template stream and then gneerating theresulting stream using the vars - int scribe(std::ostream& dst, std::istream& src, Vars& vars); - - int parse(std::istream& src); - int generate(std::ostream& dst, Vars& vars); - - const Config::Pointer config() { return _config; } - - void displayTree(std::ostream& dst, int& level) const; - - void displayMakefileDeps(std::ostream& dst) const { _config->displayMakefileDeps(dst); } - -protected: - Config::Pointer _config; - Block::Pointer _root; - PathSet _includeFullPaths; - int _numErrors; - bool _steppingStarted; - - bool grabUntilBeginTag(std::istream* str, String& grabbed, Tag::Type& tagType); - bool grabUntilEndTag(std::istream* str, String& grabbed, Tag::Type& tagType); - - bool stepForward(std::istream* str, String& grabbed, String& tag, Tag::Type& tagType, Tag::Type& nextTagType); - - bool grabFirstToken(String& src, String& token, String& reminder); - bool convertExpressionToArguments(String& src, std::vector< String >& arguments); - bool convertExpressionToDefArguments(String& src, std::vector< String >& arguments); - bool convertExpressionToFuncArguments(String& src, std::vector< String >& arguments); - - // Filter between var, command or comments - const Block::Pointer processStep(const Block::Pointer& block, String& grabbed, String& tag, Tag::Type& tagType); - const Block::Pointer processStepVar(const Block::Pointer& block, String& grabbed, String& tag); - const Block::Pointer processStepCommand(const Block::Pointer& block, String& grabbed, String& tag); - const Block::Pointer processStepRemark(const Block::Pointer& block, String& grabbed, String& tag); - - // Define command - const Block::Pointer processStepDef(const Block::Pointer& block, String& grabbed, String& tag); - - // If commands - const Block::Pointer processStepCommandIf(const Block::Pointer& block, String& grabbed, String& expression); - const Block::Pointer processStepCommandEndIf(const Block::Pointer& block, String& grabbed, String& expression); - const Block::Pointer processStepCommandElif(const Block::Pointer& block, String& grabbed, String& expression); - const Block::Pointer processStepCommandElse(const Block::Pointer& block, String& grabbed, String& expression); - - // Include command - const Block::Pointer processStepInclude(const Block::Pointer& block, String& grabbed, String& tag); - - // Function command - const Block::Pointer processStepFunc(const Block::Pointer& block, String& grabbed, String& tag); - const Block::Pointer processStepEndFunc(const Block::Pointer& block, String& grabbed, String& tag); - - // Generation - int generateTree(std::ostream& dst, const Block::Pointer& block, Vars& vars); - int evalBlockGeneration(std::ostream& dst, const Block::Pointer& block, Vars& vars, Block::Pointer& branch); - - // Errors - std::ostream& log() { return (* _config->_logStream); } - void logError(const Block::Pointer& block, const char* error, ...); -}; - -#endif diff --git a/tools/scribe/src/main.cpp b/tools/scribe/src/main.cpp deleted file mode 100755 index c1ade05bb1..0000000000 --- a/tools/scribe/src/main.cpp +++ /dev/null @@ -1,400 +0,0 @@ -// -// main.cpp -// tools/shaderScribe/src -// -// Created by Sam Gateau on 12/15/2014. -// Copyright 2013 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html - - -#include "TextTemplate.h" - -#include -#include -#include -#include - -using namespace std; - -int main (int argc, char** argv) { - // process the command line arguments - std::vector< std::string > inputs; - - std::string srcFilename; - std::string destFilename; - std::string targetName; - std::list headerFiles; - TextTemplate::Vars vars; - - std::string lastVarName; - bool listVars = false; - bool makefileDeps = false; - bool showParseTree = false; - bool makeCPlusPlus = false; - - auto config = std::make_shared(); - - enum Mode { - READY = 0, - GRAB_OUTPUT, - GRAB_VAR_NAME, - GRAB_VAR_VALUE, - GRAB_INCLUDE_PATH, - GRAB_TARGET_NAME, - GRAB_SHADER_TYPE, - GRAB_HEADER, - EXIT, - } mode = READY; - - enum Type { - VERTEX = 0, - FRAGMENT, - GEOMETRY, - } type = VERTEX; - static const char* shaderTypeString[] = { - "VERTEX", "PIXEL", "GEOMETRY" - }; - static const char* shaderCreateString[] = { - "Vertex", "Pixel", "Geometry" - }; - std::string shaderStage{ "vert" }; - - for (int ii = 1; (mode != EXIT) && (ii < argc); ii++) { - inputs.push_back(argv[ii]); - - switch (mode) { - case READY: { - if (inputs.back() == "-o") { - mode = GRAB_OUTPUT; - } else if (inputs.back() == "-H") { - mode = GRAB_HEADER; - } else if (inputs.back() == "-t") { - mode = GRAB_TARGET_NAME; - } else if (inputs.back() == "-D") { - mode = GRAB_VAR_NAME; - } else if (inputs.back() == "-I") { - mode = GRAB_INCLUDE_PATH; - } else if (inputs.back() == "-listVars") { - listVars = true; - mode = READY; - } else if (inputs.back() == "-M") { - makefileDeps = true; - mode = READY; - } else if (inputs.back() == "-showParseTree") { - showParseTree = true; - mode = READY; - } else if (inputs.back() == "-c++") { - makeCPlusPlus = true; - mode = READY; - } else if (inputs.back() == "-T") { - mode = GRAB_SHADER_TYPE; - } else { - // just grabbed the source filename, stop parameter parsing - srcFilename = inputs.back(); - mode = READY; - } - } - break; - - case GRAB_OUTPUT: { - destFilename = inputs.back(); - mode = READY; - } - break; - - case GRAB_TARGET_NAME: { - targetName = inputs.back(); - mode = READY; - } - break; - - case GRAB_HEADER: { - headerFiles.push_back(inputs.back()); - mode = READY; - } - break; - - case GRAB_VAR_NAME: { - // grab first the name of the var - lastVarName = inputs.back(); - mode = GRAB_VAR_VALUE; - } - break; - case GRAB_VAR_VALUE: { - // and then the value - vars.insert(TextTemplate::Vars::value_type(lastVarName, inputs.back())); - - mode = READY; - } - break; - - case GRAB_INCLUDE_PATH: { - config->addIncludePath(inputs.back().c_str()); - mode = READY; - } - break; - - case GRAB_SHADER_TYPE: - { - if (inputs.back() == "frag") { - shaderStage = inputs.back(); - type = FRAGMENT; - } else if (inputs.back() == "geom") { - shaderStage = inputs.back(); - type = GEOMETRY; - } else if (inputs.back() == "vert") { - shaderStage = inputs.back(); - type = VERTEX; - } else { - cerr << "Unrecognized shader type. Supported is vert, frag or geom" << endl; - } - mode = READY; - } - break; - - case EXIT: { - // THis shouldn't happen - } - break; - } - } - - if (srcFilename.empty()) { - cerr << "Usage: shaderScribe [OPTION]... inputFilename" << endl; - cerr << "Where options include:" << endl; - cerr << " -o filename: Send output to filename rather than standard output." << endl; - cerr << " -t targetName: Set the targetName used, if not defined use the output filename 'name' and if not defined use the inputFilename 'name'" << endl; - cerr << " -I include_directory: Declare a directory to be added to the includes search pool." << endl; - cerr << " -D varname varvalue: Declare a var used to generate the output file." << endl; - cerr << " varname and varvalue must be made of alpha numerical characters with no spaces." << endl; - cerr << " -H : Prepend the contents of header file to the scribe output " << endl; - cerr << " This can be specified multiple times and the headers will be applied in the specified order" << endl; - cerr << " -M : Emit a list of files that the scribe output depends on, for make and similar build tools " << endl; - cerr << " -listVars : Will list the vars name and value in the standard output." << endl; - cerr << " -showParseTree : Draw the tree obtained while parsing the source" << endl; - cerr << " -c++ : Generate a c++ source file containing the output file stream stored as a char[] variable" << endl; - cerr << " -T vert/frag/geom : define the type of the shader. Defaults to VERTEX if not specified." << endl; - cerr << " This is necessary if the -c++ option is used." << endl; - return 0; - } - - // Define targetName: if none, get destFilename, if none get srcFilename - if (targetName.empty()) { - if (destFilename.empty()) { - targetName = srcFilename; - } else { - targetName = destFilename; - } - } - // no clean it to have just a descent c var name - if (!targetName.empty()) { - // trim anything before '/' or '\' - targetName = targetName.substr(targetName.find_last_of('/') + 1); - targetName = targetName.substr(targetName.find_last_of('\\') + 1); - - // trim anything after '.' - targetName = targetName.substr(0, targetName.find_first_of('.')); - } - - // Add built in vars - time_t endTime = chrono::system_clock::to_time_t(chrono::system_clock::now()); - std::string endTimStr(ctime(&endTime)); - vars["_SCRIBE_DATE"] = endTimStr.substr(0, endTimStr.length() - 1); - - // List vars? - if (listVars) { - cerr << "Vars:" << endl; - for (auto v : vars) { - cerr << " " << v.first << " = " << v.second << endl; - } - } - - // Open up source - std::fstream srcStream; - srcStream.open(srcFilename, std::fstream::in); - if (!srcStream.is_open()) { - cerr << "Failed to open source file <" << srcFilename << ">" << endl; - return 1; - } - - auto scribe = std::make_shared(srcFilename, config); - - std::string header; - if (!headerFiles.empty()) { - for (const auto& headerFile : headerFiles) { - std::fstream headerStream; - headerStream.open(headerFile, std::fstream::in); - if (!headerStream.is_open()) { - cerr << "Failed to open source file <" << headerFile << ">" << endl; - return 1; - } - header += std::string((std::istreambuf_iterator(headerStream)), std::istreambuf_iterator()); - } - } - - // Add the type define to the shader - switch (type) { - case VERTEX: - header += "#define GPU_VERTEX_SHADER\n"; - break; - - case FRAGMENT: - header += "#define GPU_PIXEL_SHADER\n"; - break; - - case GEOMETRY: - header += "#define GPU_GEOMETRY_SHADER\n"; - break; - } - - // ready to parse and generate - std::stringstream destStringStream; - destStringStream << header; - int numErrors = scribe->scribe(destStringStream, srcStream, vars); - if (numErrors) { - cerr << "Scribe " << srcFilename << "> failed: " << numErrors << " errors." << endl; - return 1; - }; - - - if (showParseTree) { - int level = 1; - cerr << "Config trees:" << std::endl; - config->displayTree(cerr, level); - - cerr << srcFilename << " tree:" << std::endl; - scribe->displayTree(cerr, level); - } - - if (makefileDeps) { - scribe->displayMakefileDeps(cout); - } else if (makeCPlusPlus) { - // Because there is a maximum size for literal strings declared in source we need to partition the - // full source string stream into pages that seems to be around that value... - const int MAX_STRING_LITERAL = 10000; - std::string lineToken; - auto pageSize = lineToken.length(); - std::vector> pages(1, std::make_shared()); - while (!destStringStream.eof()) { - std::getline(destStringStream, lineToken); - auto lineSize = lineToken.length() + 1; - - if (pageSize + lineSize > MAX_STRING_LITERAL) { - pages.push_back(std::make_shared()); - // reset pageStringStream - pageSize = 0; - } - - (*pages.back()) << lineToken << std::endl; - pageSize += lineSize; - } - - std::stringstream headerStringStream; - std::stringstream sourceStringStream; - std::string headerFileName = destFilename + ".h"; - std::string sourceFileName = destFilename + ".cpp"; - - sourceStringStream << "// File generated by Scribe " << vars["_SCRIBE_DATE"] << std::endl; - - // Write header file - headerStringStream << "#ifndef " << targetName << "_h" << std::endl; - headerStringStream << "#define " << targetName << "_h\n" << std::endl; - headerStringStream << "#include \n" << std::endl; - headerStringStream << "class " << targetName << " {" << std::endl; - headerStringStream << "public:" << std::endl; - headerStringStream << "\tstatic gpu::Shader::Type getType() { return gpu::Shader::" << shaderTypeString[type] << "; }" << std::endl; - headerStringStream << "\tstatic const std::string& getSource() { return _source; }" << std::endl; - headerStringStream << "\tstatic gpu::ShaderPointer getShader();" << std::endl; - headerStringStream << "private:" << std::endl; - headerStringStream << "\tstatic const std::string _source;" << std::endl; - headerStringStream << "\tstatic gpu::ShaderPointer _shader;" << std::endl; - headerStringStream << "};\n" << std::endl; - headerStringStream << "#endif // " << targetName << "_h" << std::endl; - - bool mustOutputHeader = destFilename.empty(); - // Compare with existing file - { - std::fstream headerFile; - headerFile.open(headerFileName, std::fstream::in); - if (headerFile.is_open()) { - // Skip first line - std::string line; - std::stringstream previousHeaderStringStream; - std::getline(headerFile, line); - - previousHeaderStringStream << headerFile.rdbuf(); - mustOutputHeader = mustOutputHeader || previousHeaderStringStream.str() != headerStringStream.str(); - } else { - mustOutputHeader = true; - } - } - - if (mustOutputHeader) { - if (!destFilename.empty()) { - // File content has changed so write it - std::fstream headerFile; - headerFile.open(headerFileName, std::fstream::out); - if (headerFile.is_open()) { - // First line contains the date of modification - headerFile << sourceStringStream.str(); - headerFile << headerStringStream.str(); - } else { - cerr << "Scribe output file <" << headerFileName << "> failed to open." << endl; - return 1; - } - } else { - cerr << sourceStringStream.str(); - cerr << headerStringStream.str(); - } - } - - // Write source file - sourceStringStream << "#include \"" << targetName << ".h\"\n" << std::endl; - sourceStringStream << "gpu::ShaderPointer " << targetName << "::_shader;" << std::endl; - sourceStringStream << "const std::string " << targetName << "::_source = std::string()"; - // Write the pages content - for (auto page : pages) { - sourceStringStream << "+ std::string(R\"SCRIBE(\n" << page->str() << "\n)SCRIBE\")\n"; - } - sourceStringStream << ";\n" << std::endl << std::endl; - - sourceStringStream << "gpu::ShaderPointer " << targetName << "::getShader() {" << std::endl; - sourceStringStream << "\tif (_shader==nullptr) {" << std::endl; - sourceStringStream << "\t\t_shader = gpu::Shader::create" << shaderCreateString[type] << "(std::string(_source));" << std::endl; - sourceStringStream << "\t}" << std::endl; - sourceStringStream << "\treturn _shader;" << std::endl; - sourceStringStream << "}\n" << std::endl; - - // Destination stream - if (!destFilename.empty()) { - std::fstream sourceFile; - sourceFile.open(sourceFileName, std::fstream::out); - if (!sourceFile.is_open()) { - cerr << "Scribe output file <" << sourceFileName << "> failed to open." << endl; - return 1; - } - sourceFile << sourceStringStream.str(); - } else { - cerr << sourceStringStream.str(); - } - } else { - // Destination stream - if (!destFilename.empty()) { - std::fstream destFileStream; - destFileStream.open(destFilename, std::fstream::out); - if (!destFileStream.is_open()) { - cerr << "Scribe output file <" << destFilename << "> failed to open." << endl; - return 1; - } - - destFileStream << destStringStream.str(); - } else { - cerr << destStringStream.str(); - } - } - - return 0; - -} diff --git a/tools/shadergen.py b/tools/shadergen.py index 7450aebcb3..ffbe1662ec 100644 --- a/tools/shadergen.py +++ b/tools/shadergen.py @@ -39,7 +39,7 @@ def getTypeForScribeFile(scribefilename): return switcher.get(extension) def getCommonScribeArgs(scribefile, includeLibs): - scribeArgs = [args.scribe] + scribeArgs = [os.path.join(args.tools_dir, 'scribe')] # FIXME use the sys.platform to set the correct value scribeArgs.extend(['-D', 'GLPROFILE', 'PC_GL']) scribeArgs.extend(['-T', getTypeForScribeFile(scribefile)]) @@ -133,9 +133,9 @@ folderMutex = Lock() def processCommand(line): global args global scribeDepCache - glslangExec = args.spirv_binaries + '/glslangValidator' - spirvCrossExec = args.spirv_binaries + '/spirv-cross' - spirvOptExec = args.spirv_binaries + '/spirv-opt' + glslangExec = args.tools_dir + '/glslangValidator' + spirvCrossExec = args.tools_dir + '/spirv-cross' + spirvOptExec = args.tools_dir + '/spirv-opt' params = line.split(';') dialect = params.pop(0) variant = params.pop(0) @@ -170,11 +170,8 @@ def processCommand(line): scribeDepCache.gen(scribeFile, libs, dialect, variant) scribeArgs = getCommonScribeArgs(scribeFile, libs) - headerFlag = '-H' - # using the old flag on Android builds for now - if (dialect == '310es'): headerFlag = '-h' for header in getDialectAndVariantHeaders(dialect, variant): - scribeArgs.extend([headerFlag, header]) + scribeArgs.extend(['-H', header]) scribeArgs.extend(['-o', unoptGlslFile]) executeSubprocess(scribeArgs) @@ -222,10 +219,9 @@ def main(): parser = ArgumentParser(description='Generate shader artifacts.') parser.add_argument('--commands', type=argparse.FileType('r'), help='list of commands to execute') -parser.add_argument('--spirv-binaries', type=str, help='location of the SPIRV binaries') +parser.add_argument('--tools-dir', type=str, help='location of the host compatible binaries') parser.add_argument('--build-dir', type=str, help='The build directory base path') parser.add_argument('--source-dir', type=str, help='The root directory of the git repository') -parser.add_argument('--scribe', type=str, help='The scribe executable path') parser.add_argument('--debug', action='store_true') parser.add_argument('--force', action='store_true', help='Ignore timestamps and force regeneration of all files') parser.add_argument('--dry-run', action='store_true', help='Report the files that would be process, but do not output') @@ -233,18 +229,16 @@ parser.add_argument('--dry-run', action='store_true', help='Report the files tha args = None if len(sys.argv) == 1: # for debugging - spirvPath = os.environ['VULKAN_SDK'] + '/bin' - #spirvPath = expanduser('~//VulkanSDK/1.1.82.1/x86_64/bin') sourceDir = expanduser('~/git/hifi') - buildPath = sourceDir + '/build_noui' - scribePath = buildPath + '/tools/scribe/Release/scribe' + toolsDir = os.path.join(expanduser('~/git/vcpkg'), 'installed', 'x64-windows', 'tools') + buildPath = sourceDir + '/build' commandsPath = buildPath + '/libraries/shaders/shadergen.txt' shaderDir = buildPath + '/libraries/shaders' - testArgs = '--commands {} --spirv-binaries {} --scribe {} --build-dir {} --source-dir {}'.format( - commandsPath, spirvPath, scribePath, shaderDir, sourceDir + testArgs = '--commands {} --tools-dir {} --build-dir {} --source-dir {}'.format( + commandsPath, toolsDir, shaderDir, sourceDir ).split() - #testArgs.append('--debug') - #testArgs.append('--force') + testArgs.append('--debug') + testArgs.append('--force') #testArgs.append('--dry-run') args = parser.parse_args(testArgs) else: From 2691c39d66635521e8e675e6da0f1baaf01e0f25 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 8 Nov 2018 12:47:53 -0800 Subject: [PATCH 5/8] PR feedback --- CMakeLists.txt | 4 +-- cmake/externals/quazip/CMakeLists.txt | 2 +- .../macros/ManuallyInstallOpenSSLForQt.cmake | 4 +-- cmake/macros/TargetDraco.cmake | 4 +-- cmake/macros/TargetEtc2Comp.cmake | 4 +-- cmake/macros/TargetGlm.cmake | 2 +- cmake/macros/TargetNvtt.cmake | 4 +-- cmake/macros/TargetOpenVR.cmake | 4 +-- prebuild.py | 26 ++++++++++++------- 9 files changed, 30 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index daed46678a..4e5dbe935a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,8 +35,8 @@ project(hifi) include("cmake/init.cmake") include("cmake/compiler.cmake") -add_paths_to_fixup_libs(${VKPKG_INSTALL_ROOT}/bin) -add_paths_to_fixup_libs(${VKPKG_INSTALL_ROOT}/debug/bin) +add_paths_to_fixup_libs(${VCPKG_INSTALL_ROOT}/bin) +add_paths_to_fixup_libs(${VCPKG_INSTALL_ROOT}/debug/bin) if (NOT DEFINED CLIENT_ONLY) set(CLIENT_ONLY 0) diff --git a/cmake/externals/quazip/CMakeLists.txt b/cmake/externals/quazip/CMakeLists.txt index 20e93d04b1..f99d995a0c 100644 --- a/cmake/externals/quazip/CMakeLists.txt +++ b/cmake/externals/quazip/CMakeLists.txt @@ -9,7 +9,7 @@ set(QUAZIP_CMAKE_ARGS -DCMAKE_PREFIX_PATH=${QT_CMAKE_PREFIX_PATH} -DCMAKE_INSTALL_NAME_DIR:PATH=/lib -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - -DZLIB_ROOT=${VKPKG_INSTALL_ROOT} + -DZLIB_ROOT=${VCPKG_INSTALL_ROOT} -DCMAKE_POSITION_INDEPENDENT_CODE=ON) if (NOT APPLE) diff --git a/cmake/macros/ManuallyInstallOpenSSLForQt.cmake b/cmake/macros/ManuallyInstallOpenSSLForQt.cmake index 61f00acace..eae0eaca58 100644 --- a/cmake/macros/ManuallyInstallOpenSSLForQt.cmake +++ b/cmake/macros/ManuallyInstallOpenSSLForQt.cmake @@ -19,13 +19,13 @@ macro(manually_install_openssl_for_qt) find_package(OpenSSL REQUIRED) install( - FILES "${VKPKG_INSTALL_ROOT}/bin/ssleay32.dll" + FILES "${VCPKG_INSTALL_ROOT}/bin/ssleay32.dll" DESTINATION ${TARGET_INSTALL_DIR} COMPONENT ${TARGET_INSTALL_COMPONENT} ) install( - FILES "${VKPKG_INSTALL_ROOT}/bin/libeay32.dll" + FILES "${VCPKG_INSTALL_ROOT}/bin/libeay32.dll" DESTINATION ${TARGET_INSTALL_DIR} COMPONENT ${TARGET_INSTALL_COMPONENT} ) diff --git a/cmake/macros/TargetDraco.cmake b/cmake/macros/TargetDraco.cmake index 19674648b1..9dbfa865b8 100755 --- a/cmake/macros/TargetDraco.cmake +++ b/cmake/macros/TargetDraco.cmake @@ -10,8 +10,8 @@ macro(TARGET_DRACO) list(APPEND DRACO_LIBRARIES ${LIB_DIR}/libdracoenc.a) target_link_libraries(${TARGET_NAME} ${DRACO_LIBRARIES}) else() - set(LIB_SEARCH_PATH_RELEASE ${VKPKG_INSTALL_ROOT}/lib/) - set(LIB_SEARCH_PATH_DEBUG ${VKPKG_INSTALL_ROOT}/debug/lib/) + set(LIB_SEARCH_PATH_RELEASE ${VCPKG_INSTALL_ROOT}/lib/) + set(LIB_SEARCH_PATH_DEBUG ${VCPKG_INSTALL_ROOT}/debug/lib/) foreach(LIB ${LIBS}) find_library(${LIB}_LIBPATH ${LIB} PATHS ${LIB_SEARCH_PATH_RELEASE} NO_DEFAULT_PATH) list(APPEND DRACO_LIBRARY_RELEASE ${${LIB}_LIBPATH}) diff --git a/cmake/macros/TargetEtc2Comp.cmake b/cmake/macros/TargetEtc2Comp.cmake index 42a57241f7..d6668e62eb 100644 --- a/cmake/macros/TargetEtc2Comp.cmake +++ b/cmake/macros/TargetEtc2Comp.cmake @@ -13,8 +13,8 @@ macro(TARGET_ETC2COMP) set(ETC2COMP_LIBRARY_RELEASE ${INSTALL_DIR}/lib/libEtcLib.a) target_include_directories(${TARGET_NAME} PRIVATE ${ETC2COMP_INCLUDE_DIRS}) else() - find_library(ETC2COMP_LIBRARY_DEBUG EtcLib PATHS ${VKPKG_INSTALL_ROOT}/debug/lib/ NO_DEFAULT_PATH) - find_library(ETC2COMP_LIBRARY_RELEASE EtcLib PATHS ${VKPKG_INSTALL_ROOT}/lib/ NO_DEFAULT_PATH) + find_library(ETC2COMP_LIBRARY_DEBUG EtcLib PATHS ${VCPKG_INSTALL_ROOT}/debug/lib/ NO_DEFAULT_PATH) + find_library(ETC2COMP_LIBRARY_RELEASE EtcLib PATHS ${VCPKG_INSTALL_ROOT}/lib/ NO_DEFAULT_PATH) endif() select_library_configurations(ETC2COMP) diff --git a/cmake/macros/TargetGlm.cmake b/cmake/macros/TargetGlm.cmake index 302dcd5ea8..99ea9de755 100644 --- a/cmake/macros/TargetGlm.cmake +++ b/cmake/macros/TargetGlm.cmake @@ -7,7 +7,7 @@ # macro(TARGET_GLM) if (ANDROID) - target_include_directories(${TARGET_NAME} PUBLIC "${VKPKG_INSTALL_ROOT}/include") + target_include_directories(${TARGET_NAME} PUBLIC "${VCPKG_INSTALL_ROOT}/include") else() find_package(glm CONFIG REQUIRED) target_link_libraries(${TARGET_NAME} glm) diff --git a/cmake/macros/TargetNvtt.cmake b/cmake/macros/TargetNvtt.cmake index 89d989951f..8227355cb9 100644 --- a/cmake/macros/TargetNvtt.cmake +++ b/cmake/macros/TargetNvtt.cmake @@ -17,8 +17,8 @@ macro(TARGET_NVTT) set(NVTT_LIBRARIES ${NVTT_LIBS} CACHE TYPE INTERNAL) target_include_directories(${TARGET_NAME} PRIVATE ${NVTT_INCLUDE_DIRS}) else() - find_library(NVTT_LIBRARY_RELEASE nvtt PATHS ${VKPKG_INSTALL_ROOT}/lib NO_DEFAULT_PATH) - find_library(NVTT_LIBRARY_DEBUG nvtt PATHS ${VKPKG_INSTALL_ROOT}/debug/lib NO_DEFAULT_PATH) + find_library(NVTT_LIBRARY_RELEASE nvtt PATHS ${VCPKG_INSTALL_ROOT}/lib NO_DEFAULT_PATH) + find_library(NVTT_LIBRARY_DEBUG nvtt PATHS ${VCPKG_INSTALL_ROOT}/debug/lib NO_DEFAULT_PATH) select_library_configurations(NVTT) endif() diff --git a/cmake/macros/TargetOpenVR.cmake b/cmake/macros/TargetOpenVR.cmake index 8602c9e290..6c08aa605a 100644 --- a/cmake/macros/TargetOpenVR.cmake +++ b/cmake/macros/TargetOpenVR.cmake @@ -6,8 +6,8 @@ # See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html # macro(TARGET_OPENVR) - find_library(OPENVR_LIBRARY_RELEASE NAMES openvr_api PATHS ${VKPKG_INSTALL_ROOT}/lib) - find_library(OPENVR_LIBRARY_DEBUG NAMES openvr_api PATHS ${VKPKG_INSTALL_ROOT}/debug/lib) + find_library(OPENVR_LIBRARY_RELEASE NAMES openvr_api PATHS ${VCPKG_INSTALL_ROOT}/lib) + find_library(OPENVR_LIBRARY_DEBUG NAMES openvr_api PATHS ${VCPKG_INSTALL_ROOT}/debug/lib) select_library_configurations(OPENVR) target_link_libraries(${TARGET_NAME} ${OPENVR_LIBRARY}) endmacro() diff --git a/prebuild.py b/prebuild.py index 11eb2fc9e9..d43f65393e 100644 --- a/prebuild.py +++ b/prebuild.py @@ -71,14 +71,6 @@ def downloadAndExtract(url, destPath, hash=None): # Extract the archive with tarfile.open(tempFileName, 'r:gz') as tgz: - # prefix = os.path.commonprefix(tgz.getnames()) - # if (prefix != '.' and prefix != ''): - # prefixlen = len(prefix) - # for member in tgz.getmembers(): - # name = member.name - # if prefix == name: - # continue - # member.name = name[prefixlen + 1:] tgz.extractall(destPath) os.remove(tempFileName) @@ -162,8 +154,22 @@ class VcpkgRepo: self.clean() global args + downloadVcpkg = False + if args.force_bootstrap: + print("Forcing bootstrap") + downloadVcpkg = True + + if not downloadVcpkg and not os.path.isfile(self.exe): + print("Missing executable, boostrapping") + downloadVcpkg = True + # Make sure we have a vcpkg executable - if True or args.force_bootstrap or (not os.path.isfile(self.exe)) or (not os.path.isfile(os.path.join(self.path, '.vcpkg_root'))): + testFile = os.path.join(self.path, '.vcpkg-root') + if not downloadVcpkg and not os.path.isfile(testFile): + print("Missing {}, bootstrapping".format(testFile)) + downloadVcpkg = True + + if downloadVcpkg: print("Fetching vcpkg from {} to {}".format(self.vcpkgUrl, self.path)) downloadAndExtract(self.vcpkgUrl, self.path, self.vcpkgHash) @@ -215,7 +221,7 @@ class VcpkgRepo: installPath = os.path.join(self.path, 'installed', self.triplet) toolsPath = os.path.join(self.path, 'installed', self.hostTriplet, 'tools') cmakeTemplate = 'set(CMAKE_TOOLCHAIN_FILE "{}" CACHE FILEPATH "Toolchain file")\n' - cmakeTemplate += 'set(VKPKG_INSTALL_ROOT "{}" CACHE FILEPATH "vcpkg installed packages path")\n' + cmakeTemplate += 'set(VCPKG_INSTALL_ROOT "{}" CACHE FILEPATH "vcpkg installed packages path")\n' cmakeTemplate += 'set(VCPKG_TOOLS_DIR "{}" CACHE FILEPATH "vcpkg installed packages path")\n' cmakeConfig = cmakeTemplate.format(cmakeScript, installPath, toolsPath).replace('\\', '/') with open(configFilePath, 'w') as f: From 3d2e7234385e5be3bca4246009998954ae8c65b3 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 8 Nov 2018 14:55:29 -0800 Subject: [PATCH 6/8] Adding new package guidance --- VCPKG.md | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ prebuild.py | 13 ++++------ 2 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 VCPKG.md diff --git a/VCPKG.md b/VCPKG.md new file mode 100644 index 0000000000..c426dc618f --- /dev/null +++ b/VCPKG.md @@ -0,0 +1,75 @@ +[VCPKG](https://github.com/Microsoft/vcpkg) is an open source package management system created by Microsoft, intially just for Windows based system, but eventually extended to cover Linux and OSX as well, and in theory extensible enough to cover additional operating systems. + +VCPKG is now our primary mechanism for managing the external libraries and tools on which we rely to build our applications. + +Conventional usage of VCPKG involves cloning the repository, running the bootstrapping script to build the vcpkg binary, and then calling the binary to install a set of libraries. The libraries themselves are specified by a set of port files inside the [repository](https://github.com/Microsoft/vcpkg/tree/master/ports) + +Because the main VCPKG repository does not contain all the ports we want, and because we want to be able to manage the precise versions of our dependencies, rather than allow it to be outside of our control, instead of using the main vcpkg repository, we use a combination of a [fork](https://github.com/highfidelity/vcpkg) of the repository (which allows us to customize the vcpkg binary, currently necessary to deal with some out of date tools on our build hosts) and a set of [custom port files](./cmake/ports) stored in our own repository. + +## Adding new packages to vcpkg + +Note... Android vcpkg usage is still experimental. Contact Austin for more detailed information if you need to add a new package for use by Android. + +### Setup development environment + +In order to add new packages, you will need to set up an environment for testing. This assumes you already have the tools for normal Hifi development (git, cmake, a working C++ compiler, etc) + +* Clone our vcpkg [fork](https://github.com/highfidelity/vcpkg) +* Remove the ports directory from the checkout and symlink to our own [custom port files](./cmake/ports) +* Bootstrap the vcpkg binary with the `bootstrap-vcpkg.sh` or `bootstrap-vcpkg.bat` script + +### Add a new port skeleton + +Your new package will require, at minimum, a `CONTROL` file and a `portfile.cmake` file, located in a subdirectory of the ports folder. Assuming you're creating a new dependency named `foo` it should be located in `ports/foo` under the vcpkg directory. The `CONTROL` file will contain a small number of fields, such as the name, version, description and any other vcpkg ports on which you depend. The `portfile.cmake` is a CMake script that will instruct vcpkg how to build the packages. We'll cover that in more depth in a moment. For now, just create one and leave it blank. + +### Add a reference to your package to one or more of the hifi meta-packages + +We have three meta-packages used to do our building. When you modify one of these packages, make sure to bump the version number in the `CONTROL` file for the package + +#### hifi-deps + +This metapackage contains anything required for building the server or shared components. For instance, the `glm`, `tbb` and `zlib` packages are declared here because they're used everywhere, not just in our client application code. + +#### hifi-client-deps + +This metapackage contains anything required for building the client. For example, `sdl2` is listed here because it's required for our joystick input, but not for the server or shared components. Note that `hifi-client-deps` depends on `hifi-deps`, so you don't have to declare something twice if it's used in both he server and client. Just declare it in `hifi-deps` and it will still be includeded transitively. + +#### hifi-host-tools + +This metapackage contains anything we use to create executables that will then be used in the build process. The `hifi-deps` and `hifi-client-deps` packages are built for the target architecture, which may be different than the host architecture (for instance, when building for Android). The `hifi-host-tools` packages are always build for the host architecture, because they're tools that are intended to be run as part of the build process. Scribe for example is used at build time to generate shaders. Building an arm64 version of Scribe is useless because we need to run it on the host machine. + +Note that packages can appear in both the `hifi-host-tools` and one of the other metapackages, indicating that the package both contains a library which we will use at runtime, and a tool which we will use at build time. The `spirv-tools` package is an example. + +### Implement the portfile.cmake + +How the portfile is written depends on what kind of package you're working with. It's basically still a CMake script, but there are a number of [functions](https://vcpkg.readthedocs.io/en/latest/maintainers/portfile-functions/) available to make fetching and building packages easier. + +Typically there are three areas you need to deal with + +* Getting the source +* Building the source +* Installing the artifacts + +#### Getting sources + +Getting sources from github, gitlab or bitbucket is easy. There are special functions specifcially for those. See the [etc2comp portfile](./cmake/ports/etc2comp/portfile.cmake) for an example of fetching source via github. + +If the project isn't available that way, you can still use the [vcpkg_download_distfile](https://vcpkg.readthedocs.io/en/latest/maintainers/vcpkg_download_distfile/) function to explicitly download an archive and then use [vcpkg_extract_source_archive](https://vcpkg.readthedocs.io/en/latest/maintainers/vcpkg_extract_source_archive/) to unpack it. See the [zlib portfile](./cmake/ports/zlib/portfile.cmake) for an example there. + +#### Building + +If your package uses CMake, you'll be able to use the [vcpkg_configure_cmake](https://vcpkg.readthedocs.io/en/latest/maintainers/vcpkg_configure_cmake/) and [vcpkg_build_cmake](https://vcpkg.readthedocs.io/en/latest/maintainers/vcpkg_build_cmake/) commands to configure and build the package. If you're going to be relying on the CMake installation functionality, you can just call [vcpkg_install_cmake](https://vcpkg.readthedocs.io/en/latest/maintainers/vcpkg_install_cmake/), since it will implicitly run the build before the install. + +If your package is not binary, but doesn't use CMake, you're just going to have to figure it out. + +If your package is binary, then you can just skip this step + +#### Installing + +Once you've built the package, you need to install the artifacts in the target directory. Ideally, your package's CMake INSTALL commands will do the right thing. However, there are usually some things you have to do manually. Since VCPKG will build both the release and debug versions for all packages, you need to make sure if your package installed headers that you remove the _debug_ versions of these headers. This is typically done with the `file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)`. Additionally, if your package creates any standalone executables, you need to make sure they're installed in the destination `tools` directory, not the `bin` or `lib` directories, which are specifically for shared library binaries (like .so or .dll files) and link library files (like .a or .lib files) respectively. + +If you're dealing with a binary package, then you'll need to explicitly perform all the required copies from the location where you extracted the archive to the installation directory. An example of this is available in the [openssl-android portfile](./cmake/ports/openssl-android/portfile.cmake) + +### Commit and test + +Once you've tested building your new package locally, you'll need to commit and push the changes and additions to the portfiles you've made and then monitor the build hosts to verify that the new package successfully built on all the target environments. diff --git a/prebuild.py b/prebuild.py index d43f65393e..c327994b5a 100644 --- a/prebuild.py +++ b/prebuild.py @@ -87,13 +87,12 @@ class VcpkgRepo: if args.vcpkg_root is not None: print("override vcpkg path with " + args.vcpkg_root) self.path = args.vcpkg_root - self.basePath = None else: defaultBasePath = os.path.join(tempfile.gettempdir(), 'hifi', 'vcpkg') - self.basePath = os.getenv('HIFI_VCPKG_BASE', defaultBasePath) - if (not os.path.isdir(self.basePath)): - os.makedirs(self.basePath) - self.path = os.path.join(self.basePath, self.id) + basePath = os.getenv('HIFI_VCPKG_BASE', defaultBasePath) + if (not os.path.isdir(basePath)): + os.makedirs(basePath) + self.path = os.path.join(basePath, self.id) self.tagFile = os.path.join(self.path, '.id') # A format version attached to the tag file... increment when you want to force the build systems to rebuild @@ -142,9 +141,7 @@ class VcpkgRepo: def clean(self): cleanPath = self.path - if self.basePath is not None: - cleanPath = self.basePath - print("Cleaning vcpkg installation(s) at {}".format(cleanPath)) + print("Cleaning vcpkg installation at {}".format(cleanPath)) if os.path.isdir(self.path): print("Removing {}".format(cleanPath)) shutil.rmtree(cleanPath, ignore_errors=True) From 5f6369daf66d44ec7e2ae6dfc609c190f10aa952 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 8 Nov 2018 15:44:28 -0800 Subject: [PATCH 7/8] Don't wipe explicit vcpkg directories --- prebuild.py | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/prebuild.py b/prebuild.py index c327994b5a..dacc49a86e 100644 --- a/prebuild.py +++ b/prebuild.py @@ -126,6 +126,9 @@ class VcpkgRepo: def outOfDate(self): global args + # Prevent doing a clean if we've explcitly set a directory for vcpkg + if args.vcpkg_root is not None: + return False if args.force_build: return True print("Looking for tag file {}".format(self.tagFile)) @@ -147,28 +150,31 @@ class VcpkgRepo: shutil.rmtree(cleanPath, ignore_errors=True) def bootstrap(self): + global args if self.outOfDate(): self.clean() - global args - downloadVcpkg = False - if args.force_bootstrap: - print("Forcing bootstrap") - downloadVcpkg = True + # don't download the vcpkg binaries if we're working with an explicit + # vcpkg directory (possibly a git checkout) + if args.vcpkg_root is None: + downloadVcpkg = False + if args.force_bootstrap: + print("Forcing bootstrap") + downloadVcpkg = True - if not downloadVcpkg and not os.path.isfile(self.exe): - print("Missing executable, boostrapping") - downloadVcpkg = True - - # Make sure we have a vcpkg executable - testFile = os.path.join(self.path, '.vcpkg-root') - if not downloadVcpkg and not os.path.isfile(testFile): - print("Missing {}, bootstrapping".format(testFile)) - downloadVcpkg = True + if not downloadVcpkg and not os.path.isfile(self.exe): + print("Missing executable, boostrapping") + downloadVcpkg = True + + # Make sure we have a vcpkg executable + testFile = os.path.join(self.path, '.vcpkg-root') + if not downloadVcpkg and not os.path.isfile(testFile): + print("Missing {}, bootstrapping".format(testFile)) + downloadVcpkg = True - if downloadVcpkg: - print("Fetching vcpkg from {} to {}".format(self.vcpkgUrl, self.path)) - downloadAndExtract(self.vcpkgUrl, self.path, self.vcpkgHash) + if downloadVcpkg: + print("Fetching vcpkg from {} to {}".format(self.vcpkgUrl, self.path)) + downloadAndExtract(self.vcpkgUrl, self.path, self.vcpkgHash) print("Replacing port files") portsPath = os.path.join(self.path, 'ports') @@ -184,7 +190,6 @@ class VcpkgRepo: dest = os.path.join(self.path, 'installed') downloadAndExtract(url, dest, hash) - def run(self, commands): actualCommands = [self.exe, '--vcpkg-root', self.path] actualCommands.extend(commands) From 3e0dc35e543eaba55c766704f079d84aa7b3d93d Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 8 Nov 2018 16:46:36 -0800 Subject: [PATCH 8/8] Removing outdated external build instructions --- BUILD.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/BUILD.md b/BUILD.md index 0ba89ffd4b..00b17743e9 100644 --- a/BUILD.md +++ b/BUILD.md @@ -31,8 +31,6 @@ The above dependencies will be downloaded, built, linked and included automatica These are not placed in your normal build tree when doing an out of source build so that they do not need to be re-downloaded and re-compiled every time the CMake build folder is cleared. Should you want to force a re-download and re-compile of a specific external, you can simply remove that directory from the appropriate subfolder in `build/ext`. Should you want to force a re-download and re-compile of all externals, just remove the `build/ext` folder. -If you would like to use a specific install of a dependency instead of the version that would be grabbed as a CMake ExternalProject, you can pass -DUSE\_LOCAL\_$NAME=0 (where $NAME is the name of the subfolder in [cmake/externals](cmake/externals)) when you run CMake to tell it not to get that dependency as an external project. - #### CMake Hifi uses CMake to generate build files and project files for your platform.