Flutter Engine
The Flutter Engine
macsdk_dir.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2#
3# Copyright 2023 Google LLC.
4#
5# Use of this source code is governed by a BSD-style license that can be
6# found in the LICENSE file.
7
8"""
9This script writes the full path to the MacSDK that is being used
10by the clang_mac toolchain for builds within this workspace. This
11path is created by //toolchain/download_mac_toolchain.bzl when
12downloading the mac toolchain, and the MacSDK directory is populated
13with symlinks to XCode's MacSDK contents.
14"""
15
16import codecs
17import hashlib
18import os
19import subprocess
20import sys
21from pathlib import Path
22
23
24def GetWorkspaceDir() -> str:
25 """Return the workspace directory containing this script."""
26 this_script_path = Path(os.path.realpath(__file__))
27 return str(this_script_path.parent.parent)
28
29
31 """Return the Bazel hash for this workspace.
32
33 This is the MD5 has of the full path to the workspace. See
34 https://bazel.build/remote/output-directories#layout-diagram for more detail."""
35 ws = GetWorkspaceDir().encode("utf-8")
36 return hashlib.md5(ws).hexdigest()
37
38
40 """Return the Bazel repository cache directory."""
41
42 prev_cwd = os.getcwd()
43 os.chdir(GetWorkspaceDir())
44 cmd = ["bazelisk", "info", "repository_cache"]
45 output = subprocess.check_output(cmd)
46 decoded_output = codecs.decode(output, "utf-8")
47 return decoded_output.strip()
48
49
50def GetBazelOutputDir() -> str:
51 """Return the Bazel output directory.
52
53 This is described in https://bazel.build/remote/output-directories"""
54 repo_cache_dir = Path(GetBazelRepositoryCacheDir())
55 # The repository cache is inside the output directory, so going up
56 # three levels returns the output directory.
57 output_dir = repo_cache_dir.parent.parent.parent
58 return str(output_dir)
59
60
62 """Determine the output directory cache for this workspace.
63
64 Note: The Bazel docs(1) are very clear that the organization of the output
65 directory may change at any time.
66
67 (1) https://bazel.build/remote/output-directories
68 """
69 return os.path.join(GetBazelOutputDir(), GetBazelWorkspaceHash())
70
71
73 """Determine the MacSDK symlinks directory for this workspace."""
74 return os.path.join(GetBazelWorkspaceCacheDir(), "external", "clang_mac", "symlinks", "xcode", "MacSDK")
75
76
77if "__main__" == __name__:
static void encode(uint8_t output[16], const uint32_t input[4])
Definition: SkMD5.cpp:240
CanvasPath Path
Definition: dart_ui.cc:58
def print(*args, **kwargs)
Definition: run_tests.py:49
str GetMacSDKSymlinkDir()
Definition: macsdk_dir.py:72
str GetWorkspaceDir()
Definition: macsdk_dir.py:24
str GetBazelRepositoryCacheDir()
Definition: macsdk_dir.py:39
str GetBazelWorkspaceCacheDir()
Definition: macsdk_dir.py:61
str GetBazelWorkspaceHash()
Definition: macsdk_dir.py:30
str GetBazelOutputDir()
Definition: macsdk_dir.py:50