Flutter iOS Embedder
availability_version_check.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <dispatch/dispatch.h>
6 #include <dlfcn.h>
7 #include <cstdint>
8 
9 #include "flutter/fml/logging.h"
10 
11 // See context in https://github.com/flutter/flutter/issues/132130 and
12 // https://github.com/flutter/engine/pull/44711.
13 
14 // TODO(zanderso): Remove this after Clang 18 rolls into Xcode.
15 // https://github.com/flutter/flutter/issues/133203
16 
17 namespace {
18 
19 typedef uint32_t dyld_platform_t;
20 
21 typedef struct {
22  dyld_platform_t platform;
23  uint32_t version;
24 } dyld_build_version_t;
25 
26 typedef bool (*AvailabilityVersionCheckFn)(uint32_t count,
27  dyld_build_version_t versions[]);
28 
29 AvailabilityVersionCheckFn AvailabilityVersionCheck;
30 
31 dispatch_once_t DispatchOnceCounter;
32 
33 void InitializeAvailabilityCheck(void* unused) {
34  if (AvailabilityVersionCheck) {
35  return;
36  }
37  AvailabilityVersionCheck = reinterpret_cast<AvailabilityVersionCheckFn>(
38  dlsym(RTLD_DEFAULT, "_availability_version_check"));
39  FML_CHECK(AvailabilityVersionCheck);
40 }
41 
42 extern "C" bool _availability_version_check(uint32_t count,
43  dyld_build_version_t versions[]) {
44  dispatch_once_f(&DispatchOnceCounter, NULL, InitializeAvailabilityCheck);
45  return AvailabilityVersionCheck(count, versions);
46 }
47 
48 } // namespace