-
Notifications
You must be signed in to change notification settings - Fork 48
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 for closed source tools #106
Comments
I'm totally okay with them. Part of the reason we went with such a scorched earth hermetic strategy was because it is/was a bit difficult to install all the open source tools as individual units. As long as we keep the end user in mind when it comes to error messages and usability, the proprietary tools are a welcome addition. I have limited experience using them though, and testing is going to be difficult for me, but not impossible. I'll have to check on our CI options at Google as well. |
Great, so I'll make myself familiar with current implementation before starting anything. I'm not quit sure I've understood the meaning of your comment about usability and limited experience though. The best conclusion I had regarding this is to review / survey workflows in a number of open projects which use closed source tool, and maybe colab / reuse existing frameworks to use them. Regarding testing, let's see how things goes. To be real, it would probably take some time to mature as I haven't done something like this before, and have limited free time to work on this. Nevertheless, your thoughts on this are very much appreciated. Please let me know if I understand you correctly. |
You have it about correct. I was just implying that I have never used the closed source tools, so it will be difficult to offer you any guidance about specifics, we'd have to work together on that. In terms of usability I just mean that whatever implementation we come up with should require minimal setup and configuration. "It should be an enjoyable experience for the user" |
I have some Bazel rules I made for compiling Clash to VHDL and turning that into a bitstream with Xilinx Vivado. The rules are available here: https://github.com/rickwebiii/bazel_fpga_rules. Do you have have any interest in having them merged here then I'll obsolete my project? |
@rickwebiii - I think we would be very supportive of that! |
Agreed! I think that would be very cool. |
Cool, I'll hopefully have some time in a few weeks to send out a PR. |
Any update on this? I also have a bazel rules repo for using Vitis/Vivado and xsim tests that I was intending to port. But if there is an existing solution I will integrate with that. One complication is how to give access to the license. I chose to include a shell script
There are a number of features not implemented in my rules currently too. In particular, parsing the logs/reports for timing failure. Currently it silently passes if timing fails. Is it ok to merge this partial solution? |
I'd merge your solution. Mine was a personal project that I don't know even works with the latest version of Bazel. |
@stridge-cruxml We can merge your partial solution. For the license file we might want to move to a configuration flag with the license file location. Then the user could just add the license flag to their .bazelrc We could also implement a toolchain config that the user would need to fill out. |
Sounds good thanks! I had a look at yours and there is some structure/ideas in yours that I like better than mine. I am currently implementing something between both. |
Toolchain config sounds like it would be the right thing but I need to look into it. Currently I am sourcing a shell script before I run the command. This is an example of what's in there atm:
In our usage, we have a single license server (probably common?) but multiple versions of vivado. So perhaps a global default in |
Manually built the bitstream in the test. Dicussed in hdl#106. TESTED=Manual
Manually built the bitstream in the test. Discussed in hdl#106. Thanks @rickwebiii for bazel_fpga_rules Thanks @agoessling for rules_vivado TESTED=Manual
Manually built the bitstream in the test. Discussed in hdl#106. Thanks @rickwebiii for bazel_fpga_rules Thanks @agoessling for rules_vivado TESTED=Manual
I have added xsim test support here. I will make a new PR after the other is merged. |
FYI There is also the https://github.com/Lightelligence/rules_verilog repository. There is an open issue @ Lightelligence/rules_verilog#19 to suggest they merge their work into this repository too. |
FYI - @jmlemay99, @ciglass, @justin371 as people sending pull requests to https://github.com/Lightelligence/rules_verilog repository. |
I'm definitely open to reviewing pull requests to rules_verilog. |
Manually built the bitstream in the test. Discussed in hdl#106. Thanks @rickwebiii for bazel_fpga_rules Thanks @agoessling for rules_vivado TESTED=Manual
Manually built the bitstream in the test. Discussed in #106. Thanks @rickwebiii for bazel_fpga_rules Thanks @agoessling for rules_vivado TESTED=Manual
Drive-by comment: I foresee a lot of challenges to integrating closed-source commercial EDA tools in a public-facing ruleset, having done this exact thing for a couple tools before. Besides the obvious challenges of dealing with non-hermeticity (i.e. tools' reliance on hard-coded paths for caches, license-via-network, etc.), there are also huge differences in what tools do what tasks, and therefore what action graphs would look like in Bazel. An obvious example of this is FPGA vs ASIC flows: ASIC tool vendors split different "tasks" like logic synthesis, CTS, placement, routing, STA etc into different products, whereas FPGA vendors bake them all into the same binary activated through various Tcl commands. |
Those are good points. The non-hermeticity of ASIC tools is annoying and we've tried to overcome that with a script to wrap 3rd-party tool invocation called runmod. We haven't tried to encapsulate all external workflow dependencies (like license files) into bazel, but I'm not sure I follow your concerns about the ASIC vs FPGA flows however. Would there be an issue making individual custom rules for different back-end steps (e.g. synthesis, PnR, STA, parasitic extraction, etc.) then have a single macro to call all steps in the correct sequence? |
Hi,
I want to discuss if support for closed source vendor tools like Vivado is welcome or not, as it seems the focus here is on FOSS. In my opinion it basically comes down to practicality vs hermeticity (or maybe philosophy), and wanted the opinion of this repo's maintainers and community on this direction before taking a shot at it.
The text was updated successfully, but these errors were encountered: