From 36584b8e20cafe7f8c59af9fde607f86a9bacac5 Mon Sep 17 00:00:00 2001 From: Daria Volvenkova Date: Wed, 26 Sep 2018 21:06:06 +0300 Subject: [PATCH] Fixed compilation for iOS simulator. --- drape/data_buffer.cpp | 2 +- drape/hw_texture.cpp | 4 +-- drape/mesh_object.cpp | 2 +- drape/render_state.cpp | 8 ++--- drape/vertex_array_buffer.cpp | 2 +- drape_frontend/frontend_renderer.cpp | 2 +- iphone/Maps/Classes/EAGLView.mm | 5 ++- iphone/Maps/Maps.xcodeproj/project.pbxproj | 3 ++ map/framework.cpp | 6 ++-- map/framework.hpp | 2 +- shaders/program_manager.cpp | 2 +- shaders/program_params.hpp | 2 +- xcode/common.xcconfig | 2 +- xcode/drape/drape.xcodeproj/project.pbxproj | 32 +++++++++++++++++- .../drape_frontend.xcodeproj/project.pbxproj | 2 +- .../shaders/shaders.xcodeproj/project.pbxproj | 33 +++++++++++++++++++ 16 files changed, 89 insertions(+), 20 deletions(-) diff --git a/drape/data_buffer.cpp b/drape/data_buffer.cpp index f32270d262..7864377889 100644 --- a/drape/data_buffer.cpp +++ b/drape/data_buffer.cpp @@ -36,7 +36,7 @@ void DataBuffer::MoveToGPU(ref_ptr context, GPUBuffer::Target t } else if (apiVersion == dp::ApiVersion::Metal) { -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) if (currentSize != 0) { m_impl = CreateImplForMetal(context, m_impl->Data(), m_impl->GetElementSize(), diff --git a/drape/hw_texture.cpp b/drape/hw_texture.cpp index 06297605d6..f5108ff902 100644 --- a/drape/hw_texture.cpp +++ b/drape/hw_texture.cpp @@ -253,7 +253,7 @@ drape_ptr CreateAllocator(ref_ptr conte auto const apiVersion = context->GetApiVersion(); if (apiVersion == dp::ApiVersion::Metal) { -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) return CreateMetalAllocator(); #endif CHECK(false, ("Metal rendering is supported now only on iOS.")); @@ -275,7 +275,7 @@ ref_ptr GetDefaultAllocator(ref_ptr con CHECK(context != nullptr, ()); if (context->GetApiVersion() == dp::ApiVersion::Metal) { -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) return GetDefaultMetalAllocator(); #endif CHECK(false, ("Metal rendering is supported now only on iOS.")); diff --git a/drape/mesh_object.cpp b/drape/mesh_object.cpp index d898afb5ac..81c777d052 100644 --- a/drape/mesh_object.cpp +++ b/drape/mesh_object.cpp @@ -153,7 +153,7 @@ MeshObject::MeshObject(ref_ptr context, DrawPrimitive drawP } else if (apiVersion == dp::ApiVersion::Metal) { -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) InitForMetal(); #endif } diff --git a/drape/render_state.cpp b/drape/render_state.cpp index eb797fc404..b12752b868 100644 --- a/drape/render_state.cpp +++ b/drape/render_state.cpp @@ -14,7 +14,7 @@ std::string const kColorTextureName = "u_colorTex"; std::string const kMaskTextureName = "u_maskTex"; } // namespace -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) // Definitions of these methods are in a .mm-file. extern void ApplyDepthStencilStateForMetal(ref_ptr context); extern void ApplyPipelineStateForMetal(ref_ptr context, ref_ptr program, @@ -220,7 +220,7 @@ void TextureState::ApplyTextures(ref_ptr context, RenderState c } else if (apiVersion == dp::ApiVersion::Metal) { -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) ApplyTexturesForMetal(context, program, state); #endif } @@ -245,7 +245,7 @@ void ApplyState(ref_ptr context, ref_ptr program, R if (apiVersion == dp::ApiVersion::Metal) { // For Metal rendering blending state is a part of the pipeline state. -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) ApplyPipelineStateForMetal(context, program, state.GetBlending().m_isEnabled); #endif } @@ -261,7 +261,7 @@ void ApplyState(ref_ptr context, ref_ptr program, R if (apiVersion == dp::ApiVersion::Metal) { // For Metal rendering we have to apply depth-stencil state after SetX functions calls. -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) ApplyDepthStencilStateForMetal(context); #endif } diff --git a/drape/vertex_array_buffer.cpp b/drape/vertex_array_buffer.cpp index d65b8a6044..79c7bfb360 100644 --- a/drape/vertex_array_buffer.cpp +++ b/drape/vertex_array_buffer.cpp @@ -206,7 +206,7 @@ void VertexArrayBuffer::Build(ref_ptr context, ref_ptr && renderFrameFunction); diff --git a/iphone/Maps/Classes/EAGLView.mm b/iphone/Maps/Classes/EAGLView.mm index 160fc6a2b4..e4dfc17ba5 100644 --- a/iphone/Maps/Classes/EAGLView.mm +++ b/iphone/Maps/Classes/EAGLView.mm @@ -57,13 +57,14 @@ double getExactDPI(double contentScaleFactor) - (dp::ApiVersion)getSupportedApiVersion { +#ifndef OMIM_OS_IPHONE_SIMULATOR if (GetFramework().LoadMetalAllowed()) { id tempDevice = MTLCreateSystemDefaultDevice(); if (tempDevice) return dp::ApiVersion::Metal; } - +#endif EAGLContext * tempContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3]; if (tempContext != nil) return dp::ApiVersion::OpenGLES3; @@ -95,10 +96,12 @@ double getExactDPI(double contentScaleFactor) m2::PointU const s = [self pixelSize]; if (m_apiVersion == dp::ApiVersion::Metal) { +#ifndef OMIM_OS_IPHONE_SIMULATOR CHECK(self.metalView != nil, ()); CHECK_EQUAL(self.bounds.size.width, self.metalView.bounds.size.width, ()); CHECK_EQUAL(self.bounds.size.height, self.metalView.bounds.size.height, ()); m_factory = make_unique_dp(self.metalView, s); +#endif } else { diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index ef563197ee..09d2737f0a 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -5154,6 +5154,7 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "maps.me dbg.entitlements"; DEVELOPMENT_TEAM = 3T6FSDE8C7; + "EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = MetalContextFactory.mm; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/3party/GoogleSignIn", @@ -5169,6 +5170,7 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "maps.me dbg.entitlements"; DEVELOPMENT_TEAM = 3T6FSDE8C7; + "EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = MetalContextFactory.mm; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/3party/GoogleSignIn", @@ -5184,6 +5186,7 @@ buildSettings = { CODE_SIGN_ENTITLEMENTS = "maps.me dbg.entitlements"; DEVELOPMENT_TEAM = 3T6FSDE8C7; + "EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = MetalContextFactory.mm; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/3party/GoogleSignIn", diff --git a/map/framework.cpp b/map/framework.cpp index b7a80ecc28..14bcdf5c77 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -136,7 +136,7 @@ char const kTrafficSimplifiedColorsKey[] = "TrafficSimplifiedColors"; char const kLargeFontsSize[] = "LargeFontsSize"; char const kTranslitMode[] = "TransliterationMode"; -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) char const kMetalAllowed[] = "MetalAllowed"; #endif @@ -2497,7 +2497,7 @@ void Framework::UpdateSavedDataVersion() int64_t Framework::GetCurrentDataVersion() const { return m_storage.GetCurrentDataVersion(); } -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) bool Framework::LoadMetalAllowed() { bool allowed; @@ -2786,7 +2786,7 @@ bool Framework::ParseDrapeDebugCommand(string const & query) m_drapeEngine->EnableDebugRectRendering(false /* shown */); return true; } -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) if (query == "?metal") { SaveMetalAllowed(true); diff --git a/map/framework.hpp b/map/framework.hpp index 4badf63e62..e94ecd904f 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -774,7 +774,7 @@ public: bool LoadTransitSchemeEnabled(); void SaveTransitSchemeEnabled(bool enabled); -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) bool LoadMetalAllowed(); void SaveMetalAllowed(bool allowed); #endif diff --git a/shaders/program_manager.cpp b/shaders/program_manager.cpp index faaaa86ef1..ad764fe24a 100644 --- a/shaders/program_manager.cpp +++ b/shaders/program_manager.cpp @@ -22,7 +22,7 @@ void ProgramManager::Init(ref_ptr context) } else if (apiVersion == dp::ApiVersion::Metal) { -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) InitForMetal(context); #endif } diff --git a/shaders/program_params.hpp b/shaders/program_params.hpp index 81b9ca2dbe..042f94211f 100644 --- a/shaders/program_params.hpp +++ b/shaders/program_params.hpp @@ -45,7 +45,7 @@ private: } \ } -#if defined(OMIM_OS_IPHONE) +#if defined(OMIM_OS_IPHONE) && !defined(OMIM_OS_IPHONE_SIMULATOR) #define ALIGNMENT __attribute__ ((aligned(16))) #else #define ALIGNMENT diff --git a/xcode/common.xcconfig b/xcode/common.xcconfig index 2cb68b3ff9..8cb6e987fb 100644 --- a/xcode/common.xcconfig +++ b/xcode/common.xcconfig @@ -64,7 +64,7 @@ CLANG_UNDEFINED_BEHAVIOR_SANITIZER_INTEGER = YES CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Developer COMPILER_INDEX_STORE_ENABLE = YES -DEBUG_INFORMATION_FORMAT = dwarf-with-dsym +DEBUG_INFORMATION_FORMAT = dwarf ENABLE_BITCODE = YES ENABLE_STRICT_OBJC_MSGSEND = YES GCC_NO_COMMON_BLOCKS = YES diff --git a/xcode/drape/drape.xcodeproj/project.pbxproj b/xcode/drape/drape.xcodeproj/project.pbxproj index 00a788b48d..05d351dcf7 100644 --- a/xcode/drape/drape.xcodeproj/project.pbxproj +++ b/xcode/drape/drape.xcodeproj/project.pbxproj @@ -618,7 +618,7 @@ /* Begin XCBuildConfiguration section */ 6729A4FA1A691F6A007D5872 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 34AF87C91DBE4F4900E5E7DC /* common-debug.xcconfig */; + baseConfigurationReference = 34AF87CA1DBE4F4900E5E7DC /* common-release.xcconfig */; buildSettings = { ENABLE_TESTABILITY = YES; GCC_OPTIMIZATION_LEVEL = 2; @@ -660,6 +660,16 @@ isa = XCBuildConfiguration; buildSettings = { EXCLUDED_SOURCE_FILE_NAMES = ""; + "EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = ( + metal_base_context.mm, + metal_gpu_buffer_impl.mm, + metal_mesh_object_impl.mm, + metal_states.mm, + metal_texture.mm, + metal_vertex_array_buffer_impl.mm, + render_state_metal.mm, + metal_cleaner.mm, + ); "EXCLUDED_SOURCE_FILE_NAMES[sdk=macosx*]" = hw_texture_ios.mm; EXECUTABLE_PREFIX = lib; GCC_PREFIX_HEADER = "$(OMIM_ROOT)/precompiled_headers.hpp"; @@ -671,6 +681,16 @@ isa = XCBuildConfiguration; buildSettings = { EXCLUDED_SOURCE_FILE_NAMES = ""; + "EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = ( + metal_base_context.mm, + metal_gpu_buffer_impl.mm, + metal_mesh_object_impl.mm, + metal_states.mm, + metal_texture.mm, + metal_vertex_array_buffer_impl.mm, + render_state_metal.mm, + metal_cleaner.mm, + ); "EXCLUDED_SOURCE_FILE_NAMES[sdk=macosx*]" = hw_texture_ios.mm; EXECUTABLE_PREFIX = lib; GCC_PREFIX_HEADER = "$(OMIM_ROOT)/precompiled_headers.hpp"; @@ -701,6 +721,16 @@ isa = XCBuildConfiguration; buildSettings = { EXCLUDED_SOURCE_FILE_NAMES = ""; + "EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = ( + metal_base_context.mm, + metal_gpu_buffer_impl.mm, + metal_mesh_object_impl.mm, + metal_states.mm, + metal_texture.mm, + metal_vertex_array_buffer_impl.mm, + render_state_metal.mm, + metal_cleaner.mm, + ); "EXCLUDED_SOURCE_FILE_NAMES[sdk=macosx*]" = hw_texture_ios.mm; EXECUTABLE_PREFIX = lib; GCC_PREFIX_HEADER = "$(OMIM_ROOT)/precompiled_headers.hpp"; diff --git a/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj b/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj index 36ef0dcba8..e56311ac57 100644 --- a/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj +++ b/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj @@ -952,7 +952,7 @@ /* Begin XCBuildConfiguration section */ 6709473C1BDF9B82005014C0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 34AF87CB1DBE508400E5E7DC /* common-debug.xcconfig */; + baseConfigurationReference = 34AF87CC1DBE508400E5E7DC /* common-release.xcconfig */; buildSettings = { ENABLE_TESTABILITY = YES; GCC_OPTIMIZATION_LEVEL = 2; diff --git a/xcode/shaders/shaders.xcodeproj/project.pbxproj b/xcode/shaders/shaders.xcodeproj/project.pbxproj index de28ab2ed6..acc6aa9bda 100644 --- a/xcode/shaders/shaders.xcodeproj/project.pbxproj +++ b/xcode/shaders/shaders.xcodeproj/project.pbxproj @@ -425,6 +425,7 @@ 4566606A20E254060085E8C1 /* Sources */, 4566606B20E254060085E8C1 /* Frameworks */, 4566606C20E254060085E8C1 /* CopyFiles */, + BB529C26215BE1CA0088A2A5 /* ShellScript */, ); buildRules = ( ); @@ -533,6 +534,19 @@ shellPath = /bin/sh; shellScript = "python ${SRCROOT}/../../shaders/gl_shaders_preprocessor.py ${SRCROOT}/../../shaders/GL shader_index.txt programs.hpp shaders_lib.glsl ${SRCROOT}/../../shaders gl_shaders"; }; + BB529C26215BE1CA0088A2A5 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "touch ${BUILT_PRODUCTS_DIR}/shaders_metal.metallib"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -622,12 +636,23 @@ 4566607820E254060085E8C1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + "EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = ( + metal_program_params.mm, + metal_program_pool.mm, + program_manager_metal.mm, + ); }; name = Debug; }; 4566607920E254060085E8C1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + EXCLUDED_SOURCE_FILE_NAMES = ""; + "EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = ( + metal_program_params.mm, + metal_program_pool.mm, + program_manager_metal.mm, + ); }; name = Release; }; @@ -647,6 +672,11 @@ 4566607E20E2552D0085E8C1 /* Production Full */ = { isa = XCBuildConfiguration; buildSettings = { + "EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*]" = ( + metal_program_params.mm, + metal_program_pool.mm, + program_manager_metal.mm, + ); }; name = "Production Full"; }; @@ -698,18 +728,21 @@ 4598438021394BE000F8CAB2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + SUPPORTED_PLATFORMS = "macosx iphoneos"; }; name = Debug; }; 4598438121394BE000F8CAB2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + SUPPORTED_PLATFORMS = "macosx iphoneos"; }; name = Release; }; 4598438221394BE000F8CAB2 /* Production Full */ = { isa = XCBuildConfiguration; buildSettings = { + SUPPORTED_PLATFORMS = "macosx iphoneos"; }; name = "Production Full"; };