Skip to content

Commit 1882ddb

Browse files
authored
Merge branch 'main' into cython-bindings-oss-build
2 parents 87e18b1 + f1c1542 commit 1882ddb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1702
-288
lines changed

.buckconfig.d/external_cells/facebook/buck2-shims-meta/external_cell.buckconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ gh_facebook_buck2_shims_meta = git
66

77
[external_cell_gh_facebook_buck2_shims_meta]
88
git_origin = https://github.com/facebook/buck2-shims-meta.git
9-
commit_hash = 5476ee7b2fc6e89f1dc625695c3457c42368e4d3
9+
commit_hash = df09226e8022572c3840179f33267099050db94f

.github/workflows/getdeps_linux.yml

Lines changed: 335 additions & 4 deletions
Large diffs are not rendered by default.

.github/workflows/getdeps_mac.yml

Lines changed: 303 additions & 0 deletions
Large diffs are not rendered by default.

.github/workflows/getdeps_windows.yml

Lines changed: 298 additions & 3 deletions
Large diffs are not rendered by default.

CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,12 @@ option(PYTHON_EXTENSIONS
468468
"Build Python Bindings for Folly, requires Cython and (BUILD_SHARED_LIBS=ON)"
469469
OFF
470470
)
471+
set(PYTHON_PACKAGE_INSTALL_DIR "" CACHE STRING
472+
"Installation directory for folly Python packages. \
473+
If empty, CMAKE_INSTALL_PREFIX will be used. \
474+
No effect if PYTHON_EXTENSIONS=OFF."
475+
)
476+
471477

472478
add_library(folly
473479
$<TARGET_OBJECTS:folly_base>

buck2

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,62 +4,62 @@
44
"name": "buck2",
55
"platforms": {
66
"macos-aarch64": {
7-
"size": 26678080,
7+
"size": 26226254,
88
"hash": "blake3",
9-
"digest": "77a33acb816af93dc9a38d0bf26a1c0d044ede1d1e9bf80e68bd2c692e9b15b3",
9+
"digest": "aa9470d7eb85a096eaf61f832c277d108b71d62c2ec70f7bf9a9d644955d8646",
1010
"format": "zst",
1111
"path": "buck2-aarch64-apple-darwin",
1212
"providers": [
1313
{
14-
"url": "https://github.com/facebook/buck2/releases/download/2025-01-02/buck2-aarch64-apple-darwin.zst"
14+
"url": "https://github.com/facebook/buck2/releases/download/2025-01-15/buck2-aarch64-apple-darwin.zst"
1515
}
1616
]
1717
},
1818
"linux-aarch64": {
19-
"size": 28584872,
19+
"size": 28089853,
2020
"hash": "blake3",
21-
"digest": "718ab212768932fa261284629b0c679639d06e7bff2d659f33eb1922121c4a9c",
21+
"digest": "fb73b58584c052c0a867f6f6124f1ff5be5a6c20678f5fab613621fff96bb685",
2222
"format": "zst",
2323
"path": "buck2-aarch64-unknown-linux-musl",
2424
"providers": [
2525
{
26-
"url": "https://github.com/facebook/buck2/releases/download/2025-01-02/buck2-aarch64-unknown-linux-musl.zst"
26+
"url": "https://github.com/facebook/buck2/releases/download/2025-01-15/buck2-aarch64-unknown-linux-musl.zst"
2727
}
2828
]
2929
},
3030
"macos-x86_64": {
31-
"size": 28411693,
31+
"size": 28041686,
3232
"hash": "blake3",
33-
"digest": "c70e6b0a7d35ada00dbb0a6af45c9032322c8d6bb5da9ade57813db8fec9cfd1",
33+
"digest": "d5be18e818d080b110d1d3fa0f8e5f5c25d05b4588ea442822166624800165d0",
3434
"format": "zst",
3535
"path": "buck2-x86_64-apple-darwin",
3636
"providers": [
3737
{
38-
"url": "https://github.com/facebook/buck2/releases/download/2025-01-02/buck2-x86_64-apple-darwin.zst"
38+
"url": "https://github.com/facebook/buck2/releases/download/2025-01-15/buck2-x86_64-apple-darwin.zst"
3939
}
4040
]
4141
},
4242
"windows-x86_64": {
43-
"size": 23990882,
43+
"size": 23726878,
4444
"hash": "blake3",
45-
"digest": "7dbef62c82d63a80c3a331b2455afce365c2a34c81a17533937f80989bc1f1dd",
45+
"digest": "8ef066f8bf5d6ea8aef96f043d3bff06fc5fa361a296ace7090f9460a11d7ae4",
4646
"format": "zst",
4747
"path": "buck2-x86_64-pc-windows-msvc.exe",
4848
"providers": [
4949
{
50-
"url": "https://github.com/facebook/buck2/releases/download/2025-01-02/buck2-x86_64-pc-windows-msvc.exe.zst"
50+
"url": "https://github.com/facebook/buck2/releases/download/2025-01-15/buck2-x86_64-pc-windows-msvc.exe.zst"
5151
}
5252
]
5353
},
5454
"linux-x86_64": {
55-
"size": 30052738,
55+
"size": 29531222,
5656
"hash": "blake3",
57-
"digest": "6a4e4f1e4c27fafa799fd64b258b00d405344e3e9e8fab0ab0cc88477bcf9947",
57+
"digest": "4d0c942dfd09d6a58aca43342f643f91eeaa8adb58b8d5a02a97ae5911518f1b",
5858
"format": "zst",
5959
"path": "buck2-x86_64-unknown-linux-musl",
6060
"providers": [
6161
{
62-
"url": "https://github.com/facebook/buck2/releases/download/2025-01-02/buck2-x86_64-unknown-linux-musl.zst"
62+
"url": "https://github.com/facebook/buck2/releases/download/2025-01-15/buck2-x86_64-unknown-linux-musl.zst"
6363
}
6464
]
6565
}

build/fbcode_builder/getdeps.py

Lines changed: 130 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -245,16 +245,16 @@ def __init__(self, cache, loader, m):
245245
self.loader = loader
246246
self.cache = cache
247247

248-
self.cache_file_name = "-".join(
248+
self.cache_key = "-".join(
249249
(
250250
m.name,
251251
self.ctx.get("os"),
252252
self.ctx.get("distro") or "none",
253253
self.ctx.get("distro_vers") or "none",
254254
self.project_hash,
255-
"buildcache.tgz",
256255
)
257256
)
257+
self.cache_file_name = self.cache_key + "-buildcache.tgz"
258258

259259
def is_cacheable(self):
260260
"""We only cache third party projects"""
@@ -440,7 +440,13 @@ def run_project_cmd(self, args, loader, manifest):
440440
elif manager == "deb":
441441
packages = sorted(set(all_packages["deb"]))
442442
if packages:
443-
cmd_args = ["sudo", "apt", "install", "-y"] + packages
443+
cmd_args = [
444+
"sudo",
445+
"--preserve-env=http_proxy",
446+
"apt-get",
447+
"install",
448+
"-y",
449+
] + packages
444450
elif manager == "homebrew":
445451
packages = sorted(set(all_packages["homebrew"]))
446452
if packages:
@@ -552,6 +558,38 @@ def setup_project_cmd_parser(self, parser):
552558
)
553559

554560

561+
@cmd("query-paths", "print the paths for tooling to use")
562+
class QueryPathsCmd(ProjectCmdBase):
563+
def run_project_cmd(self, args, loader, manifest):
564+
if args.recursive:
565+
manifests = loader.manifests_in_dependency_order()
566+
else:
567+
manifests = [manifest]
568+
569+
cache = cache_module.create_cache()
570+
for m in manifests:
571+
fetcher = loader.create_fetcher(m)
572+
if isinstance(fetcher, SystemPackageFetcher):
573+
# We are guaranteed that if the fetcher is set to
574+
# SystemPackageFetcher then this item is completely
575+
# satisfied by the appropriate system packages
576+
continue
577+
src_dir = fetcher.get_src_dir()
578+
print(f"{m.name}_SOURCE={src_dir}")
579+
inst_dir = loader.get_project_install_dir_respecting_install_prefix(m)
580+
print(f"{m.name}_INSTALL={inst_dir}")
581+
cached_project = CachedProject(cache, loader, m)
582+
print(f"{m.name}_CACHE_KEY={cached_project.cache_key}")
583+
584+
def setup_project_cmd_parser(self, parser):
585+
parser.add_argument(
586+
"--recursive",
587+
help="print the transitive deps also",
588+
action="store_true",
589+
default=False,
590+
)
591+
592+
555593
@cmd("show-source-dir", "print the source dir for a given project")
556594
class ShowSourceDirCmd(ProjectCmdBase):
557595
def run_project_cmd(self, args, loader, manifest):
@@ -1001,6 +1039,10 @@ def write_job_for_platform(self, platform, args): # noqa: C901
10011039
manifest_ctx.set("test", "on")
10021040
run_on = self.get_run_on(args)
10031041

1042+
tests_arg = "--no-tests "
1043+
if run_tests:
1044+
tests_arg = ""
1045+
10041046
# Some projects don't do anything "useful" as a leaf project, only
10051047
# as a dep for a leaf project. Check for those here; we don't want
10061048
# to waste the effort scheduling them on CI.
@@ -1086,12 +1128,14 @@ def write_job_for_platform(self, platform, args): # noqa: C901
10861128
)
10871129
out.write(" shell: cmd\n")
10881130

1089-
# The git installation may not like long filenames, so tell it
1090-
# that we want it to use them!
10911131
out.write(" - name: Fix Git config\n")
1092-
out.write(" run: git config --system core.longpaths true\n")
1093-
out.write(" - name: Disable autocrlf\n")
1094-
out.write(" run: git config --system core.autocrlf false\n")
1132+
out.write(" run: >\n")
1133+
out.write(" git config --system core.longpaths true &&\n")
1134+
out.write(" git config --system core.autocrlf false &&\n")
1135+
# cxx crate needs symlinks enabled
1136+
out.write(" git config --system core.symlinks true\n")
1137+
# && is not supported on default windows powershell, so use cmd
1138+
out.write(" shell: cmd\n")
10951139

10961140
out.write(" - uses: actions/checkout@v4\n")
10971141

@@ -1117,7 +1161,7 @@ def write_job_for_platform(self, platform, args): # noqa: C901
11171161
build_opts.allow_system_packages
11181162
and build_opts.host_type.get_package_manager()
11191163
):
1120-
sudo_arg = "sudo "
1164+
sudo_arg = "sudo --preserve-env=http_proxy "
11211165
allow_sys_arg = " --allow-system-packages"
11221166
if build_opts.host_type.get_package_manager() == "deb":
11231167
out.write(" - name: Update system package info\n")
@@ -1127,17 +1171,12 @@ def write_job_for_platform(self, platform, args): # noqa: C901
11271171
if build_opts.is_darwin():
11281172
# brew is installed as regular user
11291173
sudo_arg = ""
1130-
tests_arg = "--no-tests "
1131-
if run_tests:
1132-
tests_arg = ""
1133-
out.write(
1134-
f" run: {sudo_arg}python3 build/fbcode_builder/getdeps.py --allow-system-packages install-system-deps {tests_arg}--recursive {manifest.name}\n"
1135-
)
1174+
1175+
system_deps_cmd = f"{sudo_arg}{getdepscmd}{allow_sys_arg} install-system-deps {tests_arg}--recursive {manifest.name}"
11361176
if build_opts.is_linux() or build_opts.is_freebsd():
1137-
out.write(" - name: Install packaging system deps\n")
1138-
out.write(
1139-
f" run: {sudo_arg}python3 build/fbcode_builder/getdeps.py --allow-system-packages install-system-deps {tests_arg}--recursive patchelf\n"
1140-
)
1177+
system_deps_cmd += f" && {sudo_arg}{getdepscmd}{allow_sys_arg} install-system-deps {tests_arg}--recursive patchelf"
1178+
out.write(f" run: {system_deps_cmd}\n")
1179+
11411180
required_locales = manifest.get(
11421181
"github.actions", "required_locales", ctx=manifest_ctx
11431182
)
@@ -1152,6 +1191,18 @@ def write_job_for_platform(self, platform, args): # noqa: C901
11521191
out.write(f" - name: Ensure {loc} locale present\n")
11531192
out.write(f" run: {sudo_arg}locale-gen {loc}\n")
11541193

1194+
out.write(" - id: paths\n")
1195+
out.write(" name: Query paths\n")
1196+
if build_opts.is_windows():
1197+
out.write(
1198+
f" run: {getdepscmd}{allow_sys_arg} query-paths {tests_arg}--recursive --src-dir=. {manifest.name} >> $env:GITHUB_OUTPUT\n"
1199+
)
1200+
out.write(" shell: pwsh\n")
1201+
else:
1202+
out.write(
1203+
f' run: {getdepscmd}{allow_sys_arg} query-paths {tests_arg}--recursive --src-dir=. {manifest.name} >> "$GITHUB_OUTPUT"\n'
1204+
)
1205+
11551206
projects = loader.manifests_in_dependency_order()
11561207

11571208
main_repo_url = manifest.get_repo_url(manifest_ctx)
@@ -1178,25 +1229,66 @@ def write_job_for_platform(self, platform, args): # noqa: C901
11781229
ctx = loader.ctx_gen.get_context(m.name)
11791230
if m.get_repo_url(ctx) != main_repo_url:
11801231
out.write(" - name: Fetch %s\n" % m.name)
1232+
out.write(
1233+
f" if: ${{{{ steps.paths.outputs.{m.name}_SOURCE }}}}\n"
1234+
)
11811235
out.write(
11821236
f" run: {getdepscmd}{allow_sys_arg} fetch --no-tests {m.name}\n"
11831237
)
11841238

11851239
for m in projects:
1186-
if m != manifest:
1187-
if m.name == "rust":
1188-
continue
1240+
if m == manifest or m.name == "rust":
1241+
continue
1242+
src_dir_arg = ""
1243+
ctx = loader.ctx_gen.get_context(m.name)
1244+
if main_repo_url and m.get_repo_url(ctx) == main_repo_url:
1245+
# Its in the same repo, so src-dir is also .
1246+
src_dir_arg = "--src-dir=. "
1247+
has_same_repo_dep = True
1248+
1249+
if args.use_build_cache and not src_dir_arg:
1250+
out.write(f" - name: Restore {m.name} from cache\n")
1251+
out.write(f" id: restore_{m.name}\n")
1252+
# only need to restore if would build it
1253+
out.write(
1254+
f" if: ${{{{ steps.paths.outputs.{m.name}_SOURCE }}}}\n"
1255+
)
1256+
out.write(" uses: actions/cache/restore@v4\n")
1257+
out.write(" with:\n")
1258+
out.write(
1259+
f" path: ${{{{ steps.paths.outputs.{m.name}_INSTALL }}}}\n"
1260+
)
1261+
out.write(
1262+
f" key: ${{{{ steps.paths.outputs.{m.name}_CACHE_KEY }}}}-install\n"
1263+
)
1264+
1265+
out.write(" - name: Build %s\n" % m.name)
1266+
if not src_dir_arg:
1267+
if args.use_build_cache:
1268+
out.write(
1269+
f" if: ${{{{ steps.paths.outputs.{m.name}_SOURCE && ! steps.restore_{m.name}.outputs.cache-hit }}}}\n"
1270+
)
11891271
else:
1190-
src_dir_arg = ""
1191-
ctx = loader.ctx_gen.get_context(m.name)
1192-
if main_repo_url and m.get_repo_url(ctx) == main_repo_url:
1193-
# Its in the same repo, so src-dir is also .
1194-
src_dir_arg = "--src-dir=. "
1195-
has_same_repo_dep = True
1196-
out.write(" - name: Build %s\n" % m.name)
11971272
out.write(
1198-
f" run: {getdepscmd}{allow_sys_arg} build {build_type_arg}{src_dir_arg}{free_up_disk}--no-tests {m.name}\n"
1273+
f" if: ${{{{ steps.paths.outputs.{m.name}_SOURCE }}}}\n"
11991274
)
1275+
out.write(
1276+
f" run: {getdepscmd}{allow_sys_arg} build {build_type_arg}{src_dir_arg}{free_up_disk}--no-tests {m.name}\n"
1277+
)
1278+
1279+
if args.use_build_cache and not src_dir_arg:
1280+
out.write(f" - name: Save {m.name} to cache\n")
1281+
out.write(" uses: actions/cache/save@v4\n")
1282+
out.write(
1283+
f" if: ${{{{ steps.paths.outputs.{m.name}_SOURCE && ! steps.restore_{m.name}.outputs.cache-hit }}}}\n"
1284+
)
1285+
out.write(" with:\n")
1286+
out.write(
1287+
f" path: ${{{{ steps.paths.outputs.{m.name}_INSTALL }}}}\n"
1288+
)
1289+
out.write(
1290+
f" key: ${{{{ steps.paths.outputs.{m.name}_CACHE_KEY }}}}-install\n"
1291+
)
12001292

12011293
out.write(" - name: Build %s\n" % manifest.name)
12021294

@@ -1213,12 +1305,8 @@ def write_job_for_platform(self, platform, args): # noqa: C901
12131305
if has_same_repo_dep:
12141306
no_deps_arg = "--no-deps "
12151307

1216-
no_tests_arg = ""
1217-
if not run_tests:
1218-
no_tests_arg = "--no-tests "
1219-
12201308
out.write(
1221-
f" run: {getdepscmd}{allow_sys_arg} build {build_type_arg}{no_tests_arg}{no_deps_arg}--src-dir=. {manifest.name} {project_prefix}\n"
1309+
f" run: {getdepscmd}{allow_sys_arg} build {build_type_arg}{tests_arg}{no_deps_arg}--src-dir=. {manifest.name} {project_prefix}\n"
12221310
)
12231311

12241312
out.write(" - name: Copy artifacts\n")
@@ -1320,6 +1408,13 @@ def setup_project_cmd_parser(self, parser):
13201408
action="store",
13211409
default=None,
13221410
)
1411+
parser.add_argument(
1412+
"--no-build-cache",
1413+
action="store_false",
1414+
default=True,
1415+
dest="use_build_cache",
1416+
help="Do not attempt to use the build cache.",
1417+
)
13231418

13241419

13251420
def get_arg_var_name(args):

build/fbcode_builder/getdeps/cargo.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,14 @@ def recreate_dir(self, src, dst) -> None:
8282
shutil.rmtree(dst)
8383
simple_copytree(src, dst)
8484

85+
def recreate_linked_dir(self, src, dst) -> None:
86+
if os.path.isdir(dst):
87+
if os.path.islink(dst):
88+
os.remove(dst)
89+
elif os.path.isdir(dst):
90+
shutil.rmtree(dst)
91+
os.symlink(src, dst)
92+
8593
def cargo_config_file(self):
8694
build_source_dir = self.build_dir
8795
if self.cargo_config_file_subdir:
@@ -191,7 +199,9 @@ def _build(self, reconfigure) -> None:
191199
],
192200
)
193201

194-
self.recreate_dir(build_source_dir, os.path.join(self.inst_dir, "source"))
202+
self.recreate_linked_dir(
203+
build_source_dir, os.path.join(self.inst_dir, "source")
204+
)
195205

196206
def run_tests(self, schedule_type, owner, test_filter, retry, no_testpilot) -> None:
197207
if test_filter:

build/fbcode_builder/getdeps/fetcher.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,9 @@ def __init__(self, build_options, manifest, repo_url, rev, depth) -> None:
244244
if not m:
245245
raise Exception("Failed to parse rev from %s" % hash_file)
246246
rev = m.group(1)
247-
print("Using pinned rev %s for %s" % (rev, repo_url))
247+
print(
248+
"Using pinned rev %s for %s" % (rev, repo_url), file=sys.stderr
249+
)
248250

249251
self.rev = rev or "main"
250252
self.origin_repo = repo_url

0 commit comments

Comments
 (0)