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

Support zipped source files for cc_library and other languages #317

Closed
ekuefler opened this issue Jul 21, 2015 · 8 comments
Closed

Support zipped source files for cc_library and other languages #317

ekuefler opened this issue Jul 21, 2015 · 8 comments
Labels
P3 We're not considering working on this, but happy to review a PR. (No assignee) type: feature request
Milestone

Comments

@ekuefler
Copy link
Contributor

java_library allows .srcjars to be passed in srcs, which will be unzipped and all of their sources included in compilation. There is no equivalent for cc_library or other languages. This would be extremely useful to support genrules that create sets of source files that might not be fully defined at analysis time. See https://groups.google.com/forum/#!topic/bazel-discuss/O0MwYZLBaKU for more discussion.

It looks to me like the change would have to be made around CcCommon.java:254. The code to deal with source jars in Java is at AbstractLibraryBuilder.java:209

@ulfjack
Copy link
Contributor

ulfjack commented Mar 2, 2016

We are currently working on adding support for having rules that can generate a set of output files not all of which can be known at analysis time, and passing the entire set to a downstream action or alternatively running one action per output (and maybe other schemes as well).

@ulfjack
Copy link
Contributor

ulfjack commented Jun 15, 2016

Parts of the infrastructure are checked in, but it requires rule changes for each rule that wants to support it.

@ulfjack ulfjack removed their assignment Jun 15, 2016
@ulfjack
Copy link
Contributor

ulfjack commented Jun 15, 2016

Unassigning myself to clarify that I'm not working on this right now.

@hlopko
Copy link
Member

hlopko commented Feb 1, 2018

This is now implemented for tree artifacts (not only zip archives). Example on stack overflow: https://stackoverflow.com/questions/48417712/how-to-build-static-library-from-the-generated-source-files-using-bazel-build.

I'll close this issue now, please comment if I'm wrong for C++, or comment/create corresponding issues for other languages. Thanks!

@hlopko hlopko closed this as completed Feb 1, 2018
@marcohu
Copy link
Contributor

marcohu commented Apr 23, 2018

While this approach may work for C++, it does not for Java. Given a directory as input, java_library either complains that "a .java, .srcjar or .properties file is expected", or fails if the directory ends with the .srcjar extension (because a zip archive is assumed).

Are there any plans to provide a truly uniform approach for the genrules use case? Having to add a language specific extension does not work well for me.

I have a generator for multiple languages and would rather not have to adjust the output method depending on the language, because the output can vary depending on the input which would require an additional analysis up-front which might be difficult in Skylark.

The .srcjar approach works quite nicely with Java. Is the same not feasible with other languages?

@marcohu
Copy link
Contributor

marcohu commented Apr 24, 2018

I just tried the described approach for C++. It fails if the directory contains header files. I'm using Bazel 0.12.0.

My use case looks like this:

BUILD

load("@rules_antlr//antlr:antlr4.bzl", "antlr4")
antlr4(
    name = "generated",
    srcs = ["src/main/antlr4/Hello.g4"],
    language = "Cpp",
)
cc_library(
    name = "Native",
    srcs = [":generated"],
)

It yields the following exception:

Unhandled exception thrown during build; message: Unrecoverable error while evaluating node 'ActionTemplateExpansionKey{actionLookupKey=//antlr4/Native:Native com.google.devtools.build.lib.skyframe.BuildConfigurationValue$Key@2795597c false (392459051), actionIndex=1}' (requested by nodes 'antlr4/Native/_pic_objs/Native/antlr4/Native/generated.cc //antlr4/Native:Native com.google.devtools.build.lib.skyframe.BuildConfigurationValue$Key@2795597c false (392459051)')
INFO: Elapsed time: 1.025s, Critical Path: 0.75s
FAILED: Build did NOT complete successfully
java.lang.RuntimeException: Unrecoverable error while evaluating node 'ActionTemplateExpansionKey{actionLookupKey=//antlr4/Native:Native com.google.devtools.build.lib.skyframe.BuildConfigurationValue$Key@2795597c false (392459051), actionIndex=1}' (requested by nodes 'antlr4/Native/_pic_objs/Native/antlr4/Native/generated.cc //antlr4/Native:Native com.google.devtools.build.lib.skyframe.BuildConfigurationValue$Key@2795597c false (392459051)')
	at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:423)
	at com.google.devtools.build.lib.concurrent.AbstractQueueVisitor$WrappedRunnable.run(AbstractQueueVisitor.java:355)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException
	at com.google.devtools.build.lib.rules.cpp.CppCompileActionBuilder.getActionName(CppCompileActionBuilder.java:250)
	at com.google.devtools.build.lib.rules.cpp.CppCompileActionBuilder.buildAndVerify(CppCompileActionBuilder.java:327)
	at com.google.devtools.build.lib.rules.cpp.CppCompileActionTemplate.createAction(CppCompileActionTemplate.java:120)
	at com.google.devtools.build.lib.rules.cpp.CppCompileActionTemplate.generateActionForInputArtifacts(CppCompileActionTemplate.java:91)
	at com.google.devtools.build.lib.skyframe.ActionTemplateExpansionFunction.compute(ActionTemplateExpansionFunction.java:83)
	at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:346)
	... 4 more
java.lang.RuntimeException: Unrecoverable error while evaluating node 'ActionTemplateExpansionKey{actionLookupKey=//antlr4/Native:Native com.google.devtools.build.lib.skyframe.BuildConfigurationValue$Key@2795597c false (392459051), actionIndex=1}' (requested by nodes 'antlr4/Native/_pic_objs/Native/antlr4/Native/generated.cc //antlr4/Native:Native com.google.devtools.build.lib.skyframe.BuildConfigurationValue$Key@2795597c false (392459051)')
	at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:423)
	at com.google.devtools.build.lib.concurrent.AbstractQueueVisitor$WrappedRunnable.run(AbstractQueueVisitor.java:355)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException
	at com.google.devtools.build.lib.rules.cpp.CppCompileActionBuilder.getActionName(CppCompileActionBuilder.java:250)
	at com.google.devtools.build.lib.rules.cpp.CppCompileActionBuilder.buildAndVerify(CppCompileActionBuilder.java:327)
	at com.google.devtools.build.lib.rules.cpp.CppCompileActionTemplate.createAction(CppCompileActionTemplate.java:120)
	at com.google.devtools.build.lib.rules.cpp.CppCompileActionTemplate.generateActionForInputArtifacts(CppCompileActionTemplate.java:91)
	at com.google.devtools.build.lib.skyframe.ActionTemplateExpansionFunction.compute(ActionTemplateExpansionFunction.java:83)
	at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:346)
	... 4 more

I tried with --features=parse_headers and --noparse_headers_verifies_modules as well, but to no avail.

Is there anything I can do to make compilation work? Or is is not (yet?) possible to use a tree artifact with .cpp and .h files?

@hlopko
Copy link
Member

hlopko commented Apr 25, 2018

@marcohu You ask good questions, but not in a right place. We have to implement support for tree artifacts per-rule, and afaik java doesn't support them yet. Feel free to file an issue for that. Without much thinking about it I think cc_library should not accept zip files when it can accept tree artifacts. With that rules are more composable and focused.

Are there any plans to provide a truly uniform approach for the genrules use case? Can you elaborate (preferably on bazel-discuss, but here will do too, it's that only me will see it :)

Can you try running your C++ + antlr example with bazel@HEAD? We've done some improvements in this are recently.

@marcohu
Copy link
Contributor

marcohu commented Apr 25, 2018

@mhlopko Thanks for your feedback.

The use case still fails with the current HEAD. I've opened #5092 with a minimal example to reproduce.

I'm certainly fine with the tree artifact approach. I opened #5093 as an umbrella for all languages. Or are specific issues for each language preferable?

My concern with the current C++ implementation is the necessity to use a language specific extension for the tree artifact. Ideally, this should not be necessary. With my antlr use case, this would mean the user has to specify the target language in the build file (while the generator could infer the language directly from the grammar) and would be forced to use different runs in order to generate code for different languages (otherwise even different languages could be generated in just one run). Not a big deal, but maybe something to consider. Not sure whether this is a topic for bazel-discuss.

bazel-io pushed a commit that referenced this issue Aug 12, 2021
  - 3c7ec07fe0418446ffdb1a04c671a3810d74ae30 [cas] Add cas package (#300) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 28fa42989a6c2d05cddb6b42494f34ef742c3de9 [cas] Implement file reading (#302) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 69c6642c3a006636256c1d2e591899f07d4c74bf Simplify caching packages (#303) by nodirg <56001730+nodirg@users.noreply.github.com>
  - f7087af662fe5481f2e75abd652af46d9a376534 [cas] Implement presence check (#304) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 847bca232f884b1e7ee059c64317a5140f11477e Simplify caching packages further (#306) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 989513ef4a567a812f21b27f2a5d83f1a2145600 Rename singleflightcache.Cache (#310) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 7eceb37537dec7c50e52d4f1af1a5d671c267144 [cas] Fix the build (#308) by nodirg <56001730+nodirg@users.noreply.github.com>
  - fd877b05ba2ed611f6d34e711da05917b729eff9 [cas] Add retries (#311) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 5bc303584ef03ded33f03fa2976015e38da9c050 [cas] Add support for Symlinks. (#309) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 4cfed65947cba54af1b2259d9e3facf7dd3007b9 [cas] Implement batch upload (#307) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 144126c43e73aeeabdbeb8bc4ef0290fa7a91ba7 [cas] Move file IO semaphore to Client (#313) by nodirg <56001730+nodirg@users.noreply.github.com>
  - e1da041171a715b7bab3178acfe1cd774b9f5019 [cas] Reuse file read buffers (#317) by nodirg <56001730+nodirg@users.noreply.github.com>
  - e9184e44947661852a8887f3183e00c346208aaa [cas] Add UploadOptions (#314) by nodirg <56001730+nodirg@users.noreply.github.com>
  - e2bd6c8e2d6bc183ff059c688a604ba1ac18b840 [cas] Implement ServerCapabilities check (#315) by nodirg <56001730+nodirg@users.noreply.github.com>
  - b00d91e726265f23ad0a88730545831b8d5519ef [cas] Add RPCConfig (#318) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 1c678dec65b62e49840419ab777c7b6ce65cfd76 [cas] Improve error messages (#321) by nodirg <56001730+nodirg@users.noreply.github.com>
  - ad8d2cfffe1f3728469a8dd5a7531b9157280ecd [cas] Limit FindMissingBlobs concurrency (#319) by nodirg <56001730+nodirg@users.noreply.github.com>
  - b1b54ee4d55b5d5bd71ca2df4353058515581697 [cas] Increase FindMissingBlobs concurrency to 256 (#323) by nodirg <56001730+nodirg@users.noreply.github.com>
  - b4a0e12d87c946ced360d723d743be1f57a47995 [cas] Move file IO buffering deeper (#322) by nodirg <56001730+nodirg@users.noreply.github.com>
  - abb14633e09633368f06d8e4fd28bd1553509061 [cas] Add filtering/callback (#316) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 7447b28dd69e22848ee850936a1cdd28e2d0e20b Add Mtime to the file metadata cache. (#326) by ramymedhat <abdelaal@google.com>
  - 7182b476eb6260fae9ba2bd8995b97a7096e340c [cas] Implement streaming (#320) by nodirg <56001730+nodirg@users.noreply.github.com>
  - b0605647bbe2ff7d046a286c3023e7714376fb83 include file path in upload error (#327) by Takuto Ikuta <tikuta@google.com>
  - 3b602dd48f7f63a76cb1087a10355b3c668d583f [cas] Implement per-request timeouts in a stream (#325) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 395c674af7a9cd696dfd1f2b4a950f6899ccb3a0 remove unused variables (#332) by Takuto Ikuta <tikuta@google.com>
  - 45f49a9529f755fb586fe2f8bf3e78b1eae39e81 [cas] Unembed cas.Client.ClientConfig. (#333) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 2a9b29928abe867026e37833fa480ed16238df7a [cas] Rename UploadOptions.Callback to Prelude (#334) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 80ea864b211ee3d87e14f4be0ca8d17e5917062c [cas] Read files once (#335) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 0e577525a2dce2d0e7bddd80927c8901d28bf0fb [cas] PathExclude: use forward-slash-separated paths (#341) by nodirg <56001730+nodirg@users.noreply.github.com>
  - e155d015bcc4c9eb9978572422e3404f26220700 Add useful error message for uploading files. (#339) by bansalvinayak <vinayakbansal@google.com>
  - 3dfb518d390280a2ffef5a85ab1852a2a526a983 [cas] Rename UploadInput to PathSpec (#342) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 752e4efb2631b45f5c27120f83d517cc2b2846d2 google/uuid -> pborman/uuid (#344) by Rubens Farias <rubensf@google.com>
  - d94f8a8ba888d384686a7cd74d8a9d0795ba4b6d Small tweaks to appease internal import checks. (#346) by Rubens Farias <rubensf@google.com>
  - f9d52cdef1c3aa8612d9c3ed7a0b65f96e55d870 Catch another pool check (#347) by Rubens Farias <rubensf@google.com>
  - ead1458eda2b7c756138429121a3e22bd5c9aa5a Preserving symlink or not can be configured from Command.... by Yoshisato Yanagisawa <yoshisato.yanagisawa@gmail.com>
  - f831c118b9c9e1dd3e857fbe43da7c992c91b20f make (*Chunker).Reset returns error (#348) by Takuto Ikuta <tikuta@google.com>
  - 1a7d2a4198fa0eb8515593b5259f495cdacf75ab [cas] Require PathSpec.Path to be absolute (#345) by nodirg <56001730+nodirg@users.noreply.github.com>
  - dd2d3976ed7c6482f361de7d24e24d5a8683c56c Upgrade zstdpool-syncpool for DecoderWrapper.Close bugfix... by Mostyn Bramley-Moore <mostyn@antipode.se>
  - 8544bdc0f3112900675a72decdb7a978cece0be7 [cas] Clean PathSpec.Path (#352) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 882e3342509eb038dc04bf44581e5085c0320d16 [cas] Add UploadResult.Digest() (#340) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 5d4d813411299a285f113cb541f2c5750746cdfa chunker: remove unused field from Chunker (#355) by Takuto Ikuta <tikuta@google.com>
  - a5af2d4316599a3fea87a459290e5f88a022a43c Add return value names in singleflightcache (#356) by nodirg <56001730+nodirg@users.noreply.github.com>
  - e7ea26b93b496d4d30e98390682faf6f69f84cb7 [cas] Fix joinFilePathsFast (#361) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 5a8daf747858747b2bf6bdd59e7b07dedc17a244 [cas] Refactor code (#359) by nodirg <56001730+nodirg@users.noreply.github.com>
  - dd6c290b2ce791f3a3e56583a9632f7b538e8a05 [cas] Simplify UploadResult.Digest() signature (#362) by nodirg <56001730+nodirg@users.noreply.github.com>
  - 05222e7e8939959878a5798e51cf52e911feafaf Fix lint (#357) by nodirg <56001730+nodirg@users.noreply.github.com>
  - b2689fabc306d2cd20356f30b7f99eec445d9212 [cas] Refactor Digest() (#363) by nodirg <56001730+nodirg@users.noreply.github.com>
  - c672e5baca9280d181c7e2e87b3d9afd01650893 [cas] Add PathSpec.Allowlist (#360) by nodirg <56001730+nodirg@users.noreply.github.com>
  - f9e6595d5634ac4d4221ba6dca9f5c2e64114b3f add size check (#365) by Takuto Ikuta <tikuta@google.com>
  - 3d0cf1be08dd52d77204ad1be7e70fdd1e48c206 Revert "Add useful error message for uploading files. (#3... by Rubens Farias <rubensf@google.com>
  - 3ddc89f3e2b39308101060b3eeaa10a919cae13e "Wrap" gRPC error codes. (#367) by Rubens Farias <rubensf@google.com>
  - d965bf95d0af9d88d90e9723aee6b332dc3ef93e cas: fix deadlock (#368) by Takuto Ikuta <tikuta@google.com>
  - 3c4ce9170b6c5a5d64bcc4feecc5bcdf5dd1f101 allow to use streamBufSize larger than 32KiB (#369) by Takuto Ikuta <tikuta@google.com>
  - 21d6adc44e550f7aa5c4e9b3fedab838920a9632 use semaphore for large file upload (#370) by Takuto Ikuta <tikuta@google.com>
  - 1cec173a5bf76c02f435050d6fc9a02e1ccea637 update remote-apis (#371) by Takuto Ikuta <tikuta@google.com>
  - e96eb06339fb616167ee02535ab54d9c3a382232 add more log around upload (#372) by Takuto Ikuta <tikuta@google.com>
  - 3f34e744d83161ddcb602121b45b0b33185a36c5 Make glog import consistent. (#373) by Rubens Farias <rubensf@google.com>
  - 3db822c86088434a4d2d53ec2d3b889b9f8cf331 Remove typos (#374) by Rubens Farias <rubensf@google.com>

PiperOrigin-RevId: 390319167
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
P3 We're not considering working on this, but happy to review a PR. (No assignee) type: feature request
Projects
None yet
Development

No branches or pull requests

6 participants