rhythmic-morning-87313
05/25/2022, 6:23 AMplatform_specific_resources()
target plugin here.
There seems to be multiple ways to specify separate source lists for each platform, but at least I don't want to declare per-platform classes for targets or fields.
I'm thinking about doing:
platform_specific_resources(
name="binaries1",
platform="linux-x86_64",
sources=[...],
)
platform_specific_resources(
name="binaries2",
platform="linux-arm64",
sources=[...],
)
python_sources(
name="lib",
dependencies=[":binaries1", ":binaries2"],
...
)
where each binaries1
and binaries2
target generates empty resources or fully hydrated resources depending on the subsystem option like --select-platform
.
Is it possible to write such an optional sources?rhythmic-morning-87313
05/25/2022, 8:21 AMrhythmic-morning-87313
05/25/2022, 8:21 AMplatform_specific_resources
, could i try https://www.pantsbuild.org/docs/target-api-extending-targets to add an optional "platfom" field to resources
?rhythmic-morning-87313
05/25/2022, 8:22 AMcurved-television-6568
05/25/2022, 8:38 AMresources(
name="binaries1",
sources=[...],
)
resources(
name="binaries2",
sources=[...],
)
resources(
name="platform-binaries",
platforms={
"linux-arm64": ":binaries1",
"linux-x86_64": ":binaries2",
},
)
python_sources(
name="lib",
dependencies=[":platform-binaries"],
...
)
The idea being, using dependency injection for resources with a platforms
field, based on some provided option, would allow you to selectively add resources to your Python lib
.
https://www.pantsbuild.org/docs/target-api-extending-targets
Unfortunately I didn’t find any documentation for how dependency inference/injection works, so will have to glean that from source. One example of dependency injection is from the docker backend (with which I’m most familiar) https://github.com/pantsbuild/pants/blob/1c1c0f14b04d6398b9f541ba557cecad8e51ec19/src/python/pants/backend/docker/util_rules/dependencies.pycurved-television-6568
05/25/2022, 8:43 AMplatforms
field is better targeted for the generic target
target, as a dependency selector there. So
target(
name="platform-binaries",
platforms={
"linux-arm64": ":binaries1",
"linux-x86_64": ":binaries2",
},
)
https://github.com/pantsbuild/pants/blob/1c1c0f14b04d6398b9f541ba557cecad8e51ec19/src/python/pants/core/target_types.py#L488-L498rhythmic-morning-87313
05/25/2022, 8:46 AMrhythmic-morning-87313
05/25/2022, 8:46 AMrhythmic-morning-87313
05/25/2022, 9:04 AMrhythmic-morning-87313
05/25/2022, 9:05 AMcurved-television-6568
05/25/2022, 9:08 AMDictStringToStringField
https://github.com/pantsbuild/pants/blob/1c1c0f14b04d6398b9f541ba557cecad8e51ec19/src/python/pants/engine/target.py#L1716curved-television-6568
05/25/2022, 9:10 AMcurved-television-6568
05/25/2022, 9:11 AMcurved-television-6568
05/25/2022, 9:12 AMcurved-television-6568
05/25/2022, 9:16 AMinject_for
must reference a field based on the actual Dependencies
field type. And given that the GenericTarget
doesn’t have a specific dependencies field type, the dependency injection you’re going for here would apply to all targets.. unless that is preferable, you’d want to have a dedicated target with a specific dependencies field for which to apply dependency injection on. (could simple mimic the GenericTarget but with a custom dependencies field)…curved-television-6568
05/25/2022, 9:18 AMtarget
was not the best.rhythmic-morning-87313
05/26/2022, 5:51 AMrhythmic-morning-87313
05/26/2022, 5:51 AMrhythmic-morning-87313
05/26/2022, 5:51 AMrhythmic-morning-87313
05/26/2022, 5:51 AMrhythmic-morning-87313
05/26/2022, 6:10 AMrhythmic-morning-87313
05/26/2022, 6:11 AMinject_for
expects a str-list Dependencies
-like field, not DictStringToStringField
.rhythmic-morning-87313
05/26/2022, 6:12 AMDependencies
field impl.rhythmic-morning-87313
05/26/2022, 6:16 AMrhythmic-morning-87313
05/26/2022, 6:18 AMPlatformDependenciesField
to pass if isinstance(request.field, inject_request_type.inject_for)
...rhythmic-morning-87313
05/26/2022, 6:45 AMrhythmic-morning-87313
05/26/2022, 6:45 AMrhythmic-morning-87313
05/26/2022, 6:56 AMrhythmic-morning-87313
05/26/2022, 6:56 AMcurved-television-6568
05/26/2022, 7:32 AMcurved-television-6568
05/26/2022, 7:34 AMrhythmic-morning-87313
05/26/2022, 7:45 AMrhythmic-morning-87313
05/26/2022, 7:45 AMrhythmic-morning-87313
05/26/2022, 7:46 AM./pants --selective-resources-platform=linux_x86_64 -ldebug dependencies --transitive src/ai/backend/runner:resources
curved-television-6568
05/26/2022, 7:47 AMrhythmic-morning-87313
05/26/2022, 7:48 AMcurved-television-6568
05/26/2022, 7:54 AMcurved-television-6568
05/26/2022, 8:16 AMcurved-television-6568
05/26/2022, 8:46 AMcurved-television-6568
05/26/2022, 8:47 AM$ ./pants --selective-resources-platform=linux_arm64 dependencies --transitive src/ai/backend/runner:resources
10:47:13.93 [INFO] Initializing scheduler...
10:47:14.06 [INFO] Scheduler initialized.
10:47:14.10 [INFO] ---- request: InjectPlatformSpecificDependenciesRequest(dependencies_field=<class 'selective_resources.register.PlatformSpecificDependenciesField'>(alias='dependencies', address=src/ai/backend/runner:platform-binaries, value=None, default=None))
10:47:14.10 [INFO] ---- selected platform: <Platform.linux_arm64: 'linux_arm64'>
10:47:14.10 [INFO] === Platforms: FrozenDict({'linux_x86_64': ':linux-x86_64-binaries', 'linux_arm64': ':linux-arm64-binaries'})
src/ai/backend/runner/DO_NOT_STORE_PERSISTENT_FILES_HERE.md:resources
src/ai/backend/runner/dropbear.glibc.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/dropbear.musl.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/dropbearconvert.glibc.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/dropbearconvert.musl.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/dropbearkey.glibc.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/dropbearkey.musl.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/entrypoint.sh:resources
src/ai/backend/runner/krunner-extractor.img.aarch64.tar.xz:linux-arm64-binaries
src/ai/backend/runner/krunner-extractor.sh:resources
src/ai/backend/runner/libbaihook.alpine3.8.aarch64.so:linux-arm64-binaries
src/ai/backend/runner/libbaihook.centos7.6.aarch64.so:linux-arm64-binaries
src/ai/backend/runner/libbaihook.ubuntu20.04.aarch64.so:linux-arm64-binaries
src/ai/backend/runner/logo.svg:resources
src/ai/backend/runner/scp.alpine3.8.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/scp.centos7.6.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/scp.ubuntu16.04.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/scp.ubuntu18.04.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/scp.ubuntu20.04.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/sftp-server.alpine3.8.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/sftp-server.centos7.6.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/sftp-server.ubuntu16.04.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/sftp-server.ubuntu18.04.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/sftp-server.ubuntu20.04.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/su-exec.alpine3.8.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/su-exec.centos7.6.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/su-exec.ubuntu16.04.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/su-exec.ubuntu18.04.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/su-exec.ubuntu20.04.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/tmux.glibc.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner/tmux.musl.aarch64.bin:linux-arm64-binaries
src/ai/backend/runner:platform-binaries
src/ai/backend/runner:version
curved-television-6568
05/26/2022, 8:47 AM$ ./pants --selective-resources-platform=linux_x86_64 dependencies --transitive src/ai/backend/runner:resources
10:47:27.07 [INFO] ---- request: InjectPlatformSpecificDependenciesRequest(dependencies_field=<class 'selective_resources.register.PlatformSpecificDependenciesField'>(alias='dependencies', address=src/ai/backend/runner:platform-binaries, value=None, default=None))
10:47:27.07 [INFO] ---- selected platform: <Platform.linux_x86_64: 'linux_x86_64'>
10:47:27.07 [INFO] === Platforms: FrozenDict({'linux_x86_64': ':linux-x86_64-binaries', 'linux_arm64': ':linux-arm64-binaries'})
src/ai/backend/runner/DO_NOT_STORE_PERSISTENT_FILES_HERE.md:resources
src/ai/backend/runner/dropbear.glibc.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/dropbear.musl.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/dropbearconvert.glibc.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/dropbearconvert.musl.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/dropbearkey.glibc.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/dropbearkey.musl.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/entrypoint.sh:resources
src/ai/backend/runner/krunner-extractor.img.x86_64.tar.xz:linux-x86_64-binaries
src/ai/backend/runner/krunner-extractor.sh:resources
src/ai/backend/runner/libbaihook.alpine3.8.x86_64.so:linux-x86_64-binaries
src/ai/backend/runner/libbaihook.centos7.6.x86_64.so:linux-x86_64-binaries
src/ai/backend/runner/libbaihook.ubuntu18.04.x86_64.so:linux-x86_64-binaries
src/ai/backend/runner/libbaihook.ubuntu20.04.x86_64.so:linux-x86_64-binaries
src/ai/backend/runner/logo.svg:resources
src/ai/backend/runner/scp.alpine3.8.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/scp.centos7.6.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/scp.ubuntu16.04.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/scp.ubuntu18.04.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/scp.ubuntu20.04.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/sftp-server.alpine3.8.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/sftp-server.centos7.6.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/sftp-server.ubuntu16.04.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/sftp-server.ubuntu18.04.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/sftp-server.ubuntu20.04.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/su-exec.alpine3.8.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/su-exec.centos7.6.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/su-exec.ubuntu16.04.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/su-exec.ubuntu18.04.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/su-exec.ubuntu20.04.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/tmux.glibc.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner/tmux.musl.x86_64.bin:linux-x86_64-binaries
src/ai/backend/runner:platform-binaries
src/ai/backend/runner:version
rhythmic-morning-87313
05/26/2022, 8:48 AMcurved-television-6568
05/26/2022, 8:49 AMcurved-television-6568
05/26/2022, 8:49 AMrhythmic-morning-87313
05/26/2022, 8:50 AMtarget.py
but it didn't help me..curved-television-6568
05/26/2022, 8:51 AMrhythmic-morning-87313
05/26/2022, 8:51 AMcurved-television-6568
05/26/2022, 8:51 AMrhythmic-morning-87313
05/26/2022, 8:52 AMrhythmic-morning-87313
05/26/2022, 8:52 AMrhythmic-morning-87313
05/26/2022, 8:53 AMPlatformSpecificDependenciesField
is something like a virtual field to trigger our own rule processingrhythmic-morning-87313
05/26/2022, 8:53 AMcurved-television-6568
05/26/2022, 8:53 AMcurved-television-6568
05/26/2022, 8:53 AMPlatformSpecificDependenciesField
is our “regular” dep field, in the above sentence.curved-television-6568
05/26/2022, 8:54 AMcurved-television-6568
05/26/2022, 8:54 AMcurved-television-6568
05/26/2022, 8:55 AMrhythmic-morning-87313
05/26/2022, 8:55 AMrhythmic-morning-87313
05/26/2022, 8:55 AMrhythmic-morning-87313
05/26/2022, 8:56 AMDictStringToStringField
and Dependencies
?" ...rhythmic-morning-87313
05/26/2022, 8:56 AMcurved-television-6568
05/26/2022, 8:56 AMcurved-television-6568
05/26/2022, 8:57 AMrhythmic-morning-87313
05/26/2022, 8:57 AMrhythmic-morning-87313
05/26/2022, 8:58 AMrhythmic-morning-87313
05/26/2022, 8:58 AM