Merge pull request 'mac_build' (#91) from mac_build into master

This commit is contained in:
Georg Hagen
2024-07-31 11:41:24 +02:00
14 changed files with 228 additions and 21 deletions

View File

@@ -16,12 +16,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ windows_x64, ubuntu-latest ] os: [ windows_x64, ubuntu-latest, mac_arm ]
# - {
# name: "macOS",
# os: macos-latest,
# generator: '-G "xcode"'
# }
steps: steps:
- name: Checkout - name: Checkout

View File

@@ -13,5 +13,8 @@ FetchContent_Declare(
) )
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
if(APPLE)
set(GLFW_VULKAN_STATIC ON CACHE BOOL "" FORCE)
endif()
FetchContent_MakeAvailable(glfw) FetchContent_MakeAvailable(glfw)
set(glfw_FOUND ON PARENT_SCOPE) set(glfw_FOUND ON PARENT_SCOPE)

View File

@@ -28,6 +28,8 @@ function(LinkLibArchive TARGET)
find_package(zstd QUIET) find_package(zstd QUIET)
find_package(BZip2 QUIET) find_package(BZip2 QUIET)
find_package(LibLZMA QUIET) find_package(LibLZMA QUIET)
find_package(LibXml2 QUIET)
find_package(EXPAT QUIET)
target_include_directories(${TARGET} PRIVATE ${LibArchive_INCLUDE_DIR}) target_include_directories(${TARGET} PRIVATE ${LibArchive_INCLUDE_DIR})
target_link_libraries(${TARGET} PRIVATE ${LibArchive_LIBRARIES} ${ZLIB_LIBRARIES} ${zstd_LIBRARIES} ${LZ4_LIBRARIES}) target_link_libraries(${TARGET} PRIVATE ${LibArchive_LIBRARIES} ${ZLIB_LIBRARIES} ${zstd_LIBRARIES} ${LZ4_LIBRARIES})
if (BZIP2_LIBRARIES) if (BZIP2_LIBRARIES)
@@ -36,4 +38,10 @@ function(LinkLibArchive TARGET)
if (LIBLZMA_LIBRARIES) if (LIBLZMA_LIBRARIES)
target_link_libraries(${TARGET} PRIVATE ${LIBLZMA_LIBRARIES}) target_link_libraries(${TARGET} PRIVATE ${LIBLZMA_LIBRARIES})
endif() endif()
endfunction() if (LibXml2_FOUND)
target_link_libraries(${TARGET} PUBLIC ${LIBXML2_LIBRARIES})
endif()
if (EXPAT_FOUND)
target_link_libraries(${TARGET} PUBLIC ${EXPAT_LIBRARIES})
endif()
endfunction()

View File

@@ -41,13 +41,9 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/TryCompileShaders.cmake.in ${CM
execute_process(COMMAND ${BASH_EXECUTABLE} CompileShaders.sh "${SHADER_OUTPUT_DEST}" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Scripts) execute_process(COMMAND ${BASH_EXECUTABLE} CompileShaders.sh "${SHADER_OUTPUT_DEST}" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Scripts)
file(GLOB GENERATED_SHADER_SOURCES "${SHADER_OUTPUT_DEST}/*") file(GLOB GENERATED_SHADER_SOURCES "${SHADER_OUTPUT_DEST}/*")
if(IOS) if(APPLE)
set(CMAKE_Swift_LANGUAGE_VERSION 5.0) file(GLOB_RECURSE sources CONFIGURE_DEPENDS "openVulkanoCpp/*.mm" "openVulkanoCpp/*.m" "openVulkanoCpp/*.c" "openVulkanoCpp/*.cpp" "examples/*.hpp" "examples/*.cpp")
enable_language(Swift) add_executable(openVulkanoCpp examples/main.cpp ${resources} ${GENERATED_SHADER_SOURCES})
file(GLOB_RECURSE sources CONFIGURE_DEPENDS "openVulkanoCpp/*.mm" "openVulkanoCpp/*.m" "openVulkanoCpp/*.c" "openVulkanoCpp/*.cpp" "openVulkanoCpp/*.swift")
file(GLOB_RECURSE resources CONFIGURE_DEPENDS "openVulkanoCpp/*.storyboard" "openVulkanoCpp/*.xib")
add_executable(openVulkanoCpp examples/main.m ${resources})
else() else()
file(GLOB_RECURSE sources CONFIGURE_DEPENDS "openVulkanoCpp/*.h" "openVulkanoCpp/*.c" "openVulkanoCpp/*.hpp" "openVulkanoCpp/*.cpp" "examples/*.hpp" "examples/*.cpp") file(GLOB_RECURSE sources CONFIGURE_DEPENDS "openVulkanoCpp/*.h" "openVulkanoCpp/*.c" "openVulkanoCpp/*.hpp" "openVulkanoCpp/*.cpp" "examples/*.hpp" "examples/*.cpp")
file(GLOB SHADER_SRC_FILES ${ROOT_FOLDER}/openVulkanoCpp/Shader/*) file(GLOB SHADER_SRC_FILES ${ROOT_FOLDER}/openVulkanoCpp/Shader/*)
@@ -74,7 +70,8 @@ if(IOS)
set(MACOSX_BUNDLE_BUNDLE_NAME ${APP_BUNDLE_IDENTIFIER}) set(MACOSX_BUNDLE_BUNDLE_NAME ${APP_BUNDLE_IDENTIFIER})
set(CMAKE_OSX_DEPLOYMENT_TARGET "14.1") # The used ARKit features are only available starting with iOS 14 set(CMAKE_OSX_DEPLOYMENT_TARGET "14.1") # The used ARKit features are only available starting with iOS 14
endif()
if(APPLE)
LinkAppleFrameworks(openVulkanoCpp) LinkAppleFrameworks(openVulkanoCpp)
endif () endif ()

View File

@@ -6,12 +6,14 @@ function(LinkAppleFrameworks TARGET)
PUBLIC "-framework CoreVideo" PUBLIC "-framework CoreVideo"
PUBLIC "-framework Metal" PUBLIC "-framework Metal"
PUBLIC "-framework MetalPerformanceShaders" PUBLIC "-framework MetalPerformanceShaders"
PUBLIC "-framework ARKit"
PUBLIC "-lstdc++" PUBLIC "-lstdc++"
PUBLIC c++ PUBLIC c++
PUBLIC c PUBLIC c
) )
if(IOS)
target_link_libraries(${TARGET} PUBLIC "-framework ARKit")
endif()
# Locate system libraries on iOS # Locate system libraries on iOS
find_library(UIKIT UIKit) find_library(UIKIT UIKit)
@@ -19,11 +21,20 @@ function(LinkAppleFrameworks TARGET)
find_library(MOBILECORESERVICES MobileCoreServices) find_library(MOBILECORESERVICES MobileCoreServices)
find_library(CFNETWORK CFNetwork) find_library(CFNETWORK CFNetwork)
find_library(SYSTEMCONFIGURATION SystemConfiguration) find_library(SYSTEMCONFIGURATION SystemConfiguration)
find_library(APPKIT AppKit)
find_library(IOSURFACE IOSurface)
find_library(QUARTZ Quartz)
# link the frameworks located above # link the frameworks located above
target_link_libraries(${TARGET} PUBLIC ${UIKIT}) if(IOS)
target_link_libraries(${TARGET} PUBLIC ${UIKIT})
target_link_libraries(${TARGET} PUBLIC ${MOBILECORESERVICES})
else()
target_link_libraries(${TARGET} PUBLIC ${APPKIT})
target_link_libraries(${TARGET} PUBLIC ${IOSURFACE})
target_link_libraries(${TARGET} PUBLIC ${QUARTZ})
endif()
target_link_libraries(${TARGET} PUBLIC ${FOUNDATION}) target_link_libraries(${TARGET} PUBLIC ${FOUNDATION})
target_link_libraries(${TARGET} PUBLIC ${MOBILECORESERVICES})
target_link_libraries(${TARGET} PUBLIC ${CFNETWORK}) target_link_libraries(${TARGET} PUBLIC ${CFNETWORK})
target_link_libraries(${TARGET} PUBLIC ${SYSTEMCONFIGURATION}) target_link_libraries(${TARGET} PUBLIC ${SYSTEMCONFIGURATION})
endfunction() endfunction()

View File

@@ -2,8 +2,13 @@ function(FilterPlatformPaths sourcesVar)
if (IOS) if (IOS)
list(FILTER ${sourcesVar} EXCLUDE REGEX ".*GLFW.*") list(FILTER ${sourcesVar} EXCLUDE REGEX ".*GLFW.*")
list(FILTER ${sourcesVar} EXCLUDE REGEX ".*[\\/]Host[\\/]MacOS[\\/].*")
else () else ()
list(FILTER ${sourcesVar} EXCLUDE REGEX ".*[\\/]Host[\\/]iOS[\\/].*") list(FILTER ${sourcesVar} EXCLUDE REGEX ".*[\\/]Host[\\/]iOS[\\/].*")
list(FILTER ${sourcesVar} EXCLUDE REGEX ".*[\\/]AR[\\/]Provider[\\/]ArKit[\\/].*")
endif ()
if (NOT APPLE)
list(FILTER ${sourcesVar} EXCLUDE REGEX ".*[\\/]Host[\\/]Apple[\\/].*")
endif () endif ()
if (NOT LINUX) if (NOT LINUX)
list(FILTER ${sourcesVar} EXCLUDE REGEX ".*[\\/]Host[\\/]Linux[\\/].*") list(FILTER ${sourcesVar} EXCLUDE REGEX ".*[\\/]Host[\\/]Linux[\\/].*")
@@ -15,4 +20,4 @@ function(FilterPlatformPaths sourcesVar)
list(FILTER ${sourcesVar} EXCLUDE REGEX "main\.(m|mm|c|cpp)") list(FILTER ${sourcesVar} EXCLUDE REGEX "main\.(m|mm|c|cpp)")
set(${sourcesVar} ${${sourcesVar}} PARENT_SCOPE) set(${sourcesVar} ${${sourcesVar}} PARENT_SCOPE)
endfunction() endfunction()

View File

@@ -8,7 +8,12 @@
#include "Provider/Playback/ArSessionPlayback.hpp" #include "Provider/Playback/ArSessionPlayback.hpp"
#include "Provider/Network/ArSessionStream.h" #include "Provider/Network/ArSessionStream.h"
#ifdef __APPLE__ #ifdef __APPLE__
#include <TargetConditionals.h>
#if TARGET_OS_MAC
#include "Provider/ArSessionNull.hpp"
#else
#include "Provider/ArKit/ArSessionArKit.h" #include "Provider/ArKit/ArSessionArKit.h"
#endif
#else #else
#ifdef ANDROID #ifdef ANDROID
#include "Provider/ArCore/ArSessionArCore.h" #include "Provider/ArCore/ArSessionArCore.h"

View File

@@ -0,0 +1,183 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include "Host/SystemInfo.hpp"
#include "Base/Logger.hpp"
#include <sstream>
#include <mach/mach.h>
#include <os/proc.h>
#import <Foundation/NSString.h>
#import <Foundation/NSProcessInfo.h>
namespace OpenVulkano
{
Event<> SystemInfo::OnLowPowerModeChanged;
Event<> SystemInfo::OnBatteryStateChanged;
Event<> SystemInfo::OnBatteryLevelChanged;
Event<> SystemInfo::OnDeviceOrientationChanged;
size_t SystemInfo::GetSystemRam()
{
return [NSProcessInfo processInfo].physicalMemory;
}
size_t SystemInfo::GetSystemRamAvailable()
{
return 0; //TODO
}
size_t SystemInfo::GetAppRamMax()
{
return GetAppRamAvailable() + GetAppRamUsed();
}
size_t SystemInfo::GetAppVirtualMemoryMax()
{
return INT64_MAX;
}
size_t SystemInfo::GetAppRamAvailable()
{
return 0; //TODO
}
size_t SystemInfo::GetAppRamUsed()
{
struct task_basic_info info;
mach_msg_type_number_t size = sizeof(info);
kern_return_t kerr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size);
if( kerr == KERN_SUCCESS )
{
return info.resident_size;
}
Logger::PERF->error("Failed to read memory consumption: {}", mach_error_string(kerr));
return 0;
}
std::string SystemInfo::GetUserName()
{
return "";
}
std::string SystemInfo::GetHostName()
{
return [[NSProcessInfo processInfo].hostName UTF8String];
}
std::string SystemInfo::GetDeviceName()
{
return "Mac"; //TODO
}
std::string SystemInfo::GetDeviceVendorName()
{
return "Apple";
}
std::string SystemInfo::GetDeviceModelName()
{
return ""; //TODO
}
std::string SystemInfo::GetOsName()
{
return ""; //TODO
}
OsVersion SystemInfo::GetOsVersion()
{
NSOperatingSystemVersion osVersion = [NSProcessInfo processInfo].operatingSystemVersion;
return { static_cast<int>(osVersion.majorVersion), static_cast<int>(osVersion.minorVersion), static_cast<int>(osVersion.patchVersion), 0 };
}
std::string SystemInfo::GetOsNameHumanReadable()
{
std::stringstream name;
name << GetOsName() << ' ' << GetOsVersion().major;
return name.str();
}
DeviceType SystemInfo::GetDeviceType()
{
return DeviceType::PC;
}
size_t SystemInfo::GetCpuCoreCount()
{
return [NSProcessInfo processInfo].processorCount;
}
size_t SystemInfo::GetCpuThreadCount()
{
return [NSProcessInfo processInfo].activeProcessorCount;
}
int32_t SystemInfo::GetCpuTemperature()
{
switch([NSProcessInfo processInfo].thermalState)
{
case NSProcessInfoThermalStateNominal: return 20;
case NSProcessInfoThermalStateFair: return 50;
case NSProcessInfoThermalStateSerious: return 80;
case NSProcessInfoThermalStateCritical: return 100;
}
return -1;
}
CpuThermalState SystemInfo::GetCpuThermalState()
{
switch([NSProcessInfo processInfo].thermalState)
{
case NSProcessInfoThermalStateNominal: return CpuThermalState::Normal;
case NSProcessInfoThermalStateFair: return CpuThermalState::Fair;
case NSProcessInfoThermalStateSerious: return CpuThermalState::Serious;
case NSProcessInfoThermalStateCritical: return CpuThermalState::Critical;
}
return CpuThermalState::Normal;
}
bool SystemInfo::IsDeviceInLowPowerMode()
{
return [NSProcessInfo processInfo].lowPowerModeEnabled;
}
void SystemInfo::EnableEnergyEvents()
{
//TODO
}
BatteryState SystemInfo::GetDeviceBatteryState()
{
return BatteryState::Unavailable; //TODO
}
float SystemInfo::GetDeviceBatteryLevel()
{
return 0; //TODO
}
bool SystemInfo::IsMultitaskingSupported()
{
return true;
}
DeviceOrientation SystemInfo::GetDeviceOrientation()
{
return DeviceOrientation::LandscapeRight;
}
void SystemInfo::EnableDeviceOrientationEvents()
{
//TODO?
}
InterfaceOrientation SystemInfo::GetInterfaceOrientation()
{
return InterfaceOrientation::Landscape; //TODO?
}
}