Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build cli:buck2 #31

Closed
wants to merge 7 commits into from
Closed

Build cli:buck2 #31

wants to merge 7 commits into from

Conversation

aherrmann
Copy link
Contributor

Depends on #28.
Do not merge before #28.
This uses #28 as its base branch.

With this PR I can build cli:buck2 successfully on Ubuntu 22.04. I have tested the following commands successfully with the resulting binary:

buck2 --help
buck2 uquery cli:buck2

This addes

  • A few missing cargo dependencies for buck2.
  • Defines a cfg buck_oss_build to designate an open source build with buck2 itself.
  • Uses the above cfg to disable jemalloc. The corresponding Rust crate depends on jemalloc-sys, which includes a build.rs that runs an autotools build for jemalloc, which does not translate straightforwardly to a cxx_library.
  • Adds a fixup to build the zstd-sys C library.
  • Fixes the linking order with the vendored openssl library.
  • Adds -lc to the vendored libcrypto, which requires the atexit symbol from libc.

@facebook-github-bot facebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Oct 20, 2022
@aherrmann aherrmann changed the base branch from main to rust-protoc October 20, 2022 12:13
@aherrmann
Copy link
Contributor Author

I have successfully tested a self-hosted build, i.e. the following steps all succeeded.

$ cargo build --bin=buck2  --release
$ target/release/buck2 build cli:buck2 --target-platforms=ovr_config//platforms:default
$ cp buck-out/v2/gen/root/.../cli/__buck2__/static_pic/buck2 ./buck2
$ target/release/buck2 clean  # It also works without the clean, but I wanted to make it builds from scratch.
$ ./buck2 build cli:buck2 --target-platforms=ovr_config//platforms:default

Closes #11

To indicate an open source build performed by Buck2 instead of cargo.
The jemalloc create depends on the jemalloc-sys create which should
build a bundled version of the jemalloc C library. However, this is
difficult to achieve under Buck2 and reindeer. For now we disable the
jemalloc integration instead.
crypto.a needs to appear after ssl.a on the linker command line.
libcrypto requires the atexit symbol from libc.

```
  = note: /usr/bin/ld: shim/third-party/cxx/vendor/openssl-linux/lib/x86_64-linux-gnu/libcrypto.a(libcrypto-lib-init.o): in function `ossl_init_register_atexit_ossl_':
          (.text+0x200): undefined reference to `atexit'
          collect2: error: ld returned 1 exit status
```
@aherrmann aherrmann changed the base branch from rust-protoc to main October 24, 2022 11:47
@aherrmann aherrmann marked this pull request as ready for review October 24, 2022 11:47
@facebook-github-bot
Copy link
Contributor

@ndmitchell has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants