Comments (1)
I wanted it to select the Linux execution platform automatically (since it's the only one with the "config//os/constraints:linux" constraint) but it tries to run it on the Windows platform, presumably because it is the first one declared
Correct.
How can I add constraints to the execution platform so that Buck2 automatically selects the correct execution platform for the selected target platform?
There is no general way to do that, but I'll explain how to solve your problem before I explain why.
You have a couple options and the best one depends on the particular situation. For this one, you have a :tests
target that uses a bunch of cmd_args
that assume things are running on Linux. In that case, it's appropriate to just set exec_compatible_with = ["config//os:linux"]
on the target. This tells buck that that target can only be built on a Linux execution platform, and so it will not pick an execution platform that doesn't have the Linux constraint. This sort of case is somewhat common.
An equally common case is that someone has a build tool like a compiler that only supports running on a particular platform. This comes up particularly for things that don't support cross-compilation, where you end up with something like "I have to choose between three different compilers based on target platform, and all of them can only run on a specific execution platform." In that case, the preferred thing to do is to say target_compatible_with = ["config//os:windows"]
on the compiler's target. Because the compiler's target should be an exec_dep
of the target running the compiler (possibly via a toolchain), that target compatibility restriction will effect the execution platform of the target using the compiler.
Now getting back to why there's no way to express these restrictions on the platform definition: Note that in all of the above cases, the restrictions that we told buck about only apply to a specific target or a family of targets that all share some exec dep. This acknowledges the general principle that "which platform can this be built on" is a property that is local to a specific build step, and does not apply universally across a build, a target platform, or the repo. As a result, buck is in general happy to cross-compile only some parts of your build and not others. Coming from other build systems that might be surprising, but it is actually a good thing. It can help you make efficient use of resources by compiling things locally or using a cheaper remote execution platform (ie not mac). It also allows you to do things like have a single build which packages one component that must be built on Mac and one component that must be built on Windows.
from buck2.
Related Issues (20)
- Conflicting inputs on erlang build of Opentelemetry HOT 1
- error: Variable `typing` not found HOT 2
- Excluding rules from certain platforms HOT 6
- Unable to `buck2 clean` a repo which uses `git_fetch()` on Windows
- `configured_alias` and configuration modifiers HOT 2
- review Go analysis.Pass.Module proposal
- Creating symbolic links to toolchains HOT 10
- Early-building some parts of graph HOT 7
- How to use "buck2 clean" or other commands to delete only the generated files (cache) without killing the daemon? HOT 2
- Question: how to pass dependencies that change state forward across a non-output-changing rule HOT 4
- buck2 : Is java supported as a part of buck2 HOT 2
- Share work across configurations by setting working directory for actions then canonicalizing that working directory in RE HOT 5
- Distributed project.ignore
- How to use c/aquery to find the dependents of an anon_target HOT 3
- Trouble linking Apple Frameworks HOT 1
- documentation mentions `frecli` which doesn't seem to be available publicly HOT 1
- Adding support for new languages HOT 5
- Java rules don't appear to be usable in OSS edition of buck2 HOT 2
- Builtin prelude support for running python in a venv?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from buck2.