From 538234bd53963b28e4c6c7ca40f1d8c46e52dce0 Mon Sep 17 00:00:00 2001 From: tkeinz Date: Tue, 12 Jul 2022 00:13:28 +0200 Subject: [PATCH] [ezfoundation] Add new port (#25604) * Add new port ezfoundation * Update version registry for ezfoundation * Skip unsupported Linux and OSX build for ezfoundation * Add license field for ezfoundation * Update version registry for ezfoundation * Add supports spec in manifest * Update version registry Co-authored-by: Mark Keinz --- ports/ezfoundation/ezFoundation_vcpkg.patch | 185 ++++++++++++++++++++ ports/ezfoundation/portfile.cmake | 62 +++++++ ports/ezfoundation/vcpkg.json | 18 ++ versions/baseline.json | 4 + versions/e-/ezfoundation.json | 9 + 5 files changed, 278 insertions(+) create mode 100644 ports/ezfoundation/ezFoundation_vcpkg.patch create mode 100644 ports/ezfoundation/portfile.cmake create mode 100644 ports/ezfoundation/vcpkg.json create mode 100644 versions/e-/ezfoundation.json diff --git a/ports/ezfoundation/ezFoundation_vcpkg.patch b/ports/ezfoundation/ezFoundation_vcpkg.patch new file mode 100644 index 00000000000..f4b40c55400 --- /dev/null +++ b/ports/ezfoundation/ezFoundation_vcpkg.patch @@ -0,0 +1,185 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index a04be90..f853a0c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,5 +1,9 @@ + cmake_minimum_required(VERSION 3.19) + ++if(CMAKE_BUILD_TYPE STREQUAL Release) ++ set(CMAKE_BUILD_TYPE "Shipping" CACHE STRING "Release overridden with Shipping" FORCE) ++endif() ++ + if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + message(FATAL_ERROR "In-source builds are not supported. Please choose a different binary directory.") + return() +diff --git a/Code/Engine/CMakeLists.txt b/Code/Engine/CMakeLists.txt +index fb4bef4..ccda93d 100644 +--- a/Code/Engine/CMakeLists.txt ++++ b/Code/Engine/CMakeLists.txt +@@ -20,5 +20,3 @@ execute_process( + OUTPUT_VARIABLE EZ_GIT_BRANCH_NAME + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +- +-configure_file("${CMAKE_CURRENT_LIST_DIR}/ezBuildInfo.h.in" "${CMAKE_CURRENT_LIST_DIR}/ezBuildInfo.h" NEWLINE_STYLE LF) +\ No newline at end of file +diff --git a/Code/Engine/Foundation/Basics/Assert.cpp b/Code/Engine/Foundation/Basics/Assert.cpp +index 7a55afc..778fadd 100644 +--- a/Code/Engine/Foundation/Basics/Assert.cpp ++++ b/Code/Engine/Foundation/Basics/Assert.cpp +@@ -66,16 +66,6 @@ bool ezDefaultAssertHandler(const char* szSourceFile, ezUInt32 uiLine, const cha + + #if EZ_ENABLED(EZ_PLATFORM_WINDOWS) + +- // make sure the cursor is definitely shown, since the user must be able to click buttons +-# if EZ_ENABLED(EZ_PLATFORM_WINDOWS_UWP) +- // Todo: Use modern Windows API to show cursor in current window. +- // http://stackoverflow.com/questions/37956628/change-mouse-pointer-in-uwp-app +-# else +- ezInt32 iHideCursor = 1; +- while (ShowCursor(true) < 0) +- ++iHideCursor; +-# endif +- + # if EZ_ENABLED(EZ_COMPILE_FOR_DEBUG) + + ezInt32 iRes = _CrtDbgReport(_CRT_ASSERT, szSourceFile, uiLine, nullptr, "'%s'\nFunction: %s\nMessage: %s", szExpression, szFunction, szAssertMsg); +@@ -83,24 +73,9 @@ bool ezDefaultAssertHandler(const char* szSourceFile, ezUInt32 uiLine, const cha + // currently we will ALWAYS trigger the breakpoint / crash (except for when the user presses 'ignore') + if (iRes == 0) + { +- // when the user ignores the assert, restore the cursor show/hide state to the previous count +-# if EZ_ENABLED(EZ_PLATFORM_WINDOWS_UWP) +- // Todo: Use modern Windows API to restore cursor. +-# else +- for (ezInt32 i = 0; i < iHideCursor; ++i) +- ShowCursor(false); +-# endif +- + return false; + } + +-# else +- +- +-# if EZ_ENABLED(EZ_PLATFORM_WINDOWS_DESKTOP) +- MessageBoxA(nullptr, szTemp, "Assertion", MB_ICONERROR); +-# endif +- + # endif + + #endif +diff --git a/Code/Engine/Foundation/Logging/Implementation/Log.cpp b/Code/Engine/Foundation/Logging/Implementation/Log.cpp +index 1a0d2ed..afcde54 100644 +--- a/Code/Engine/Foundation/Logging/Implementation/Log.cpp ++++ b/Code/Engine/Foundation/Logging/Implementation/Log.cpp +@@ -260,12 +260,7 @@ void ezLog::OsMessageBox(const ezFormatString& text) + title = ezApplication::GetApplicationInstance()->GetApplicationName(); + } + +-#if EZ_ENABLED(EZ_PLATFORM_WINDOWS_DESKTOP) +- MessageBoxW(nullptr, ezStringWChar(display).GetData(), ezStringWChar(title), MB_OK); +-#else + ezLog::Print(display); +- EZ_ASSERT_NOT_IMPLEMENTED; +-#endif + } + + void ezLog::GenerateFormattedTimestamp(TimestampMode mode, ezStringBuilder& sTimestampOut) +diff --git a/Code/Engine/Foundation/Math/Implementation/Math_inl.h b/Code/Engine/Foundation/Math/Implementation/Math_inl.h +index 1a2962e..9b31f01 100644 +--- a/Code/Engine/Foundation/Math/Implementation/Math_inl.h ++++ b/Code/Engine/Foundation/Math/Implementation/Math_inl.h +@@ -80,6 +80,7 @@ namespace ezMath + #endif + } + ++#if EZ_ENABLED(EZ_PLATFORM_64BIT) + EZ_ALWAYS_INLINE ezUInt32 FirstBitLow(ezUInt64 value) + { + EZ_ASSERT_DEBUG(value != 0, "FirstBitLow is undefined for 0"); +@@ -95,6 +96,7 @@ namespace ezMath + return 0; + #endif + } ++#endif + + EZ_ALWAYS_INLINE ezUInt32 FirstBitHigh(ezUInt32 value) + { +@@ -112,6 +114,7 @@ namespace ezMath + #endif + } + ++#if EZ_ENABLED(EZ_PLATFORM_64BIT) + EZ_ALWAYS_INLINE ezUInt32 FirstBitHigh(ezUInt64 value) + { + EZ_ASSERT_DEBUG(value != 0, "FirstBitHigh is undefined for 0"); +@@ -127,6 +130,7 @@ namespace ezMath + return 0; + #endif + } ++#endif + + EZ_ALWAYS_INLINE ezUInt32 CountTrailingZeros(ezUInt32 bitmask) { return (bitmask == 0) ? 32 : FirstBitLow(bitmask); } + +diff --git a/Code/Engine/Foundation/Memory/Implementation/AllocatorBase_inl.h b/Code/Engine/Foundation/Memory/Implementation/AllocatorBase_inl.h +index fb839b3..21e2ec1 100644 +--- a/Code/Engine/Foundation/Memory/Implementation/AllocatorBase_inl.h ++++ b/Code/Engine/Foundation/Memory/Implementation/AllocatorBase_inl.h +@@ -60,7 +60,11 @@ namespace ezInternal + template + EZ_FORCE_INLINE T* CreateRawBuffer(ezAllocatorBase* pAllocator, size_t uiCount) + { ++#if EZ_ENABLED(EZ_PLATFORM_64BIT) + ezUInt64 safeAllocationSize = ezMath::SafeMultiply64(uiCount, sizeof(T)); ++#else ++ ezUInt32 safeAllocationSize = ezMath::SafeMultiply32(uiCount, sizeof(T)); ++#endif + return static_cast(pAllocator->Allocate(safeAllocationSize, EZ_ALIGNMENT_OF(T))); + } + +diff --git a/Code/Engine/Foundation/System/Implementation/Win/StackTracer_win.h b/Code/Engine/Foundation/System/Implementation/Win/StackTracer_win.h +index 54939fb..15f928a 100644 +--- a/Code/Engine/Foundation/System/Implementation/Win/StackTracer_win.h ++++ b/Code/Engine/Foundation/System/Implementation/Win/StackTracer_win.h +@@ -229,11 +229,23 @@ ezUInt32 ezStackTracer::GetStackTrace(ezArrayPtr& trace, void* pContext) + frame.AddrFrame.Offset = context.Rbp; + frame.AddrStack.Offset = context.Rsp; + machine_type = IMAGE_FILE_MACHINE_AMD64; +-#else ++#elif defined(_M_IX86) + frame.AddrPC.Offset = context.Eip; + frame.AddrFrame.Offset = context.Ebp; + frame.AddrStack.Offset = context.Esp; + machine_type = IMAGE_FILE_MACHINE_I386; ++#elif defined(_M_ARM64) ++ frame.AddrPC.Offset = context.Pc; ++ frame.AddrFrame.Offset = context.Fp; ++ frame.AddrStack.Offset = context.Sp; ++ machine_type = IMAGE_FILE_MACHINE_ARM64; ++#elif defined(_M_ARM) ++ frame.AddrPC.Offset = context.Pc; ++ frame.AddrFrame.Offset = context.R11; ++ frame.AddrStack.Offset = context.Sp; ++ machine_type = IMAGE_FILE_MACHINE_ARM; ++#else ++ #error Unknown architecture + #endif + for (ezInt32 i = 0; i < (ezInt32)trace.GetCount(); i++) + { +diff --git b/Code/Engine/ezBuildInfo.h b/Code/Engine/ezBuildInfo.h +new file mode 100644 +index 0000000..763271c +--- /dev/null ++++ b/Code/Engine/ezBuildInfo.h +@@ -0,0 +1,10 @@ ++// ++// This file is auto-generated by CMake. ++// ++ ++#pragma once ++ ++#define EZ_GIT_COMMIT_HASH_SHORT ++#define EZ_GIT_COMMIT_HASH_LONG ++#define EZ_GIT_BRANCH_NAME "" ++ diff --git a/ports/ezfoundation/portfile.cmake b/ports/ezfoundation/portfile.cmake new file mode 100644 index 00000000000..c93b4389a7f --- /dev/null +++ b/ports/ezfoundation/portfile.cmake @@ -0,0 +1,62 @@ +vcpkg_check_linkage(ONLY_STATIC_LIBRARY) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO ezEngine/ezEngine + REF 1448308ab99bae0d8d2a292ad345ff3a757f3124 #21.10 + SHA512 20da87772366d1612795f534b31600123c0d04beba252d27d895c3c3cff7dae65952bd890629d79a7a691c2f3444601552c4b4eca99e8f8a99dc935ce2ebd284 + PATCHES + ezFoundation_vcpkg.patch +) + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS + -DEZ_3RDPARTY_ENET_SUPPORT=OFF + -DEZ_3RDPARTY_ZSTD_SUPPORT=OFF + -DEZ_3RDPARTY_ZLIB_SUPPORT=OFF + -DEZ_BUILD_FILTER=FoundationOnly + -DEZ_BUILD_UNITTESTS=OFF + -DEZ_ENABLE_FOLDER_UNITY_FILES=OFF + -DEZ_ENABLE_QT_SUPPORT=OFF + -DEZ_USE_PCH=OFF + OPTIONS_DEBUG + -DEZ_OUTPUT_DIRECTORY_LIB=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/Output/Lib + -DEZ_OUTPUT_DIRECTORY_DLL=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/Output/Bin + OPTIONS_RELEASE + -DEZ_OUTPUT_DIRECTORY_LIB=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/Output/Lib + -DEZ_OUTPUT_DIRECTORY_DLL=${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/Output/Bin +) + +vcpkg_cmake_build(TARGET Foundation) + +# EzEngine does not support CMake-based install; copy headers and libraries manually. +file(GLOB_RECURSE FOUNDATION_INCLUDE_FILES RELATIVE "${SOURCE_PATH}/Code/Engine/Foundation" "${SOURCE_PATH}/Code/Engine/Foundation/*.h") +foreach(SOURCE_FILE ${FOUNDATION_INCLUDE_FILES}) + get_filename_component(SOURCE_FILE_DIR "${SOURCE_FILE}" DIRECTORY) + if(SOURCE_FILE_DIR STREQUAL "") + set(TARGET_DIR "${CURRENT_PACKAGES_DIR}/include/Foundation") + else() + set(TARGET_DIR "${CURRENT_PACKAGES_DIR}/include/Foundation/${SOURCE_FILE_DIR}") + endif() + file(COPY "${SOURCE_PATH}/Code/Engine/Foundation/${SOURCE_FILE}" DESTINATION "${TARGET_DIR}") +endforeach() + +if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL debug) + set(LIB_SOURCE_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/Output/Lib") + set(LIB_TARGET_DIR "${CURRENT_PACKAGES_DIR}/debug/lib") + file(GLOB_RECURSE LIB_FILES "${LIB_SOURCE_DIR}/*.lib") + foreach(LIB_FILE ${LIB_FILES}) + file(COPY "${LIB_FILE}" DESTINATION "${LIB_TARGET_DIR}") + endforeach() +endif() +if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL release) + set(LIB_SOURCE_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/Output/Lib") + set(LIB_TARGET_DIR "${CURRENT_PACKAGES_DIR}/lib") + file(GLOB_RECURSE LIB_FILES "${LIB_SOURCE_DIR}/*.lib") + foreach(LIB_FILE ${LIB_FILES}) + file(COPY "${LIB_FILE}" DESTINATION "${LIB_TARGET_DIR}") + endforeach() +endif() + +file(INSTALL "${SOURCE_PATH}/LICENSE.md" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright) diff --git a/ports/ezfoundation/vcpkg.json b/ports/ezfoundation/vcpkg.json new file mode 100644 index 00000000000..6b60fd29d4a --- /dev/null +++ b/ports/ezfoundation/vcpkg.json @@ -0,0 +1,18 @@ +{ + "name": "ezfoundation", + "version": "21.10", + "description": "Foundation library out of ezEngine", + "homepage": "https://ezengine.net/", + "license": "MIT", + "supports": "windows | uwp", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ] +} diff --git a/versions/baseline.json b/versions/baseline.json index 8343293aad9..a25ba133547 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -2152,6 +2152,10 @@ "baseline": "1.4.7", "port-version": 0 }, + "ezfoundation": { + "baseline": "21.10", + "port-version": 0 + }, "faad2": { "baseline": "2.9.1", "port-version": 5 diff --git a/versions/e-/ezfoundation.json b/versions/e-/ezfoundation.json new file mode 100644 index 00000000000..6c4c72ed8cb --- /dev/null +++ b/versions/e-/ezfoundation.json @@ -0,0 +1,9 @@ +{ + "versions": [ + { + "git-tree": "9db831cf3166d08f581365fccce852ae9aeb8b69", + "version": "21.10", + "port-version": 0 + } + ] +}