01-Dec-2014 16:59, Martin Nowak пишет:
On Thursday, 27 November 2014 at 20:17:55 UTC, Dmitry Olshansky wrote:
What I know(?) so far:
1. First we build library in one go - trivial to reproduce.
2. Then we compile each unittest with -c and -deps to dump actual
dependencies.
Yes, we compile one object file per module because memory doesn't
suffice to build everything at once.
That's okay...
3. Then we run a bunch of sed/sort/uniq to extract module names from
verbose output of compiler (red flag IMHO, but anyway).
https://github.com/D-Programming-Language/phobos/blob/master/posix.mak#L325
Converting DMD deps output to makefile dependency rules, what's the
problem with that?
Eh-m now I see. Makes sense I guess, though it looks like some
makedepend-ish hack. What happens if the compiler was stopped half-way
during writing a deps file?
However now I understand it and can re-write it as a SCons builder that
emits sources for tests/xyz binary as it parses deps file.
5. We build a unittester from Druntime (pulling sources out of tree -
omg) with ALL of object files:
https://github.com/D-Programming-Language/phobos/blob/master/posix.mak#L334
That's the test runner, didn't make to copy the sources, because Phobos
already depends on druntime anyhow
Gotta test it, might work as is.
Typically SCons would copy over all sources to stage directory and build
there.
6. Run it passing a specific module to unittest:
https://github.com/D-Programming-Language/phobos/blob/master/posix.mak#L355
Yep, this is so because all unit tests live in a shared library.
Mmm. Why pack unittests into a shared library?
So we need a special test runner to run only a single module, allowing
us to still parallelize testing.
Does it work the same way if Phobos is a static library?
--
Dmitry Olshansky