CyberShadow / Digger

A tool to build D and bisect old D versions
Other
57 stars 9 forks source link

Few questions on enhancements #6

Closed snosov1 closed 9 years ago

snosov1 commented 9 years ago

Hi!

I find that Digger does a great job automating the build process of dmd, which is quite bothersome on its own - setting up three (or more) repos, setting up environment variables for testing and etc.

However, it lacks few features to be more usable in that regard. Namely,

Is it something you can consider implementing? If you don't feel like implementing these yourself, but, generally, you agree that it would be nice to have them, I can help with a PR. I just need a pointer regarding the second (incremental build) feature: what would be a good approach to implementing this?

CyberShadow commented 9 years ago

Option to skip repositories updates. As I understand, it can be easily implemented, you just have to pass false to DManager.initialize function.

An --offline switch exists, although I don't think it's currently documented anywhere.

Option to perform incremental build. Right now make rebuilds everything and it takes much longer than it should to rebuild after a small change. I don't see a simple solution for this at the moment.

Yes. The problem is compounded by that the DMD Makefile does not support incremental builds either (it only works for simple modifications, such as function body edits in .c files).

CyberShadow commented 9 years ago

Is it something you can consider implementing? If you don't feel like implementing these yourself, but, generally, you agree that it would be nice to have them, I can help with a PR. I just need a pointer regarding the second (incremental build) feature: what would be a good approach to implementing this?

Not sure. I think it would be quite difficult, actually. Currently, Digger goes to great lengths to ensure that the builds are as close to bit-identical as possible regardless of the environment. This includes downloading and using specific versions of the tools used to build D, spawning processes with a clean, minimal enviroment, and eradicating all unversioned, ignored and edited files in the git repositories between rebuilds. Incremental builds go in the opposite direction, and although there is the opportunity for reusing code, it would probably need to use a different approach.

snosov1 commented 9 years ago

Not sure. I think it would be quite difficult, actually.

That's too bad. It could really lower the entry barrier for contributing to dmd.

Do you know of any other (half-)automatic solution for setting up dmd build environment?

CyberShadow commented 9 years ago

I think DVM can do it:

http://wiki.dlang.org/Building_DMD#Existing_tools

People have posted scripts to do it a few times in the forums, but I don't think there is a list of those somewhere.

snosov1 commented 9 years ago

It seems like it does, but I guess it's not that straightforward. You still have to clone the repos manually.

Thanks, anyway!

CyberShadow commented 9 years ago

Not sure. I think it would be quite difficult, actually.

I've thought some more about this. I think it would be feasible as a separate Digger command which does an incremental build - you'd run this after making a clean build and changed some files. This means it would take a very different code path, and won't go through all the requirements / dependency / cleanliness checks, and could reuse the existing code to build D.

The relevant code is in ae, specifically ae.sys.d.builder.