Age | Commit message (Collapse) | Author |
|
|
|
This also fixed a bug where every dependency would get pulled into the Haskell
target while searching for transitive dependencies.
|
|
This is prototype quality. For some reason I think it breaks when doing
`build **/*.hs`, which isn't good. But also it's working, and the code feels
good. Next I'd like to get Python builds working, as hopefully that will force
me to improve the existing code to support a second language.
|
|
|
|
Only fully implemented for Haskell at the moment but that is okay.
|
|
There are some limitations to this implementation:
1. Using `runCommand` means this will re-run any time anything changes in the
repo. The solution is to use the existing import detection to make a list of
source files, and put that into a `stdenv.mkDerivation`, which I'll do next.
2. The `NeatInterpolation` usage is ugly. The templated nix code should be
extracted into its own file, such as `Biz/Bild/Builder.nix`.
3. I'm not actually calling it yet. The ideal thing would be to call
`nix-instantiate`, get the output drv path, and then call `nix-store --realise`
on that. To do that I need to refactor my `proc` function to return stdout to
the calling function, and I should probably just make helper functions like
`nixInstatiate :: Target -> IO DrvPath` and `nixStoreRealise :: DrvPath ->
NixStorePath`, or something like that.
|
|
|
|
|
|
|
|
I need to guard on the existence of `out`. This should properly be a `Maybe
FilePath`, but to make that change requires a lot of refactoring that I don't
want to do right now. Instead, I added it to my todo list for later.
|
|
I need to use the absPath, and the `makeAbsolute` function doesn't actually
verify that the path is correct, it just prepends the CWD to the given path.
|
|
|
|
The code was becoming repetitive and messy, with functions like 'metaDep' and so
on. So that's an indication that they just need to have their own home.
|
|
As a byproduct this also (sorta) generalizes how I pass flags to the C compiler
using pkg-config, instead of using the guile-config. Now the 'lib' metadata will
be added with 'pkg-config --libs', and the 'sys' metadata will be added with
'pkg-config --cflags'. I'm not *really* sure what the difference is, but if it
works it works.
|
|
|
|
I don't like TODOs in my codebase, I'd rather keep them in org files. Eventually
I need a linter that prevents all TODOs from getting into code.
|
|
Asdf is required in order to load any third-party packages.
|
|
Reduced duplication of out and sysdeps detection. Some other readibility cleanups.
|
|
|
|
|
|
|
|
|
|
Bild.nix relies on output name when setting the output path, which is gonna be
different than the dev build cabdir output path.
|
|
|
|
Namespace is unique, whereas FilePath could be relative or absolute, or have a
leading . or trailing / or not.
|
|
|
|
This moves logic into the analysis step, and allows better auditing because you
can see exactly what flags and command bild will use to compile the target.
|
|
|
|
|
|
In order to write Guile code against C, I need to distiguish between libs and
bins, so I did that, then I got the flags that gcc needs from `guile-config` and
put them in the args for any C lib build. I tested this with Bessel.c and
Bessel.scm (not in this patch, because I don't really want that code in my
tree, I'll come up with another way to test it later).
|
|
|
|
Before:
ϟ time bild Biz/Dragons.hs
good: bild: Biz/Dragons.hs
real 0m31.587s
user 0m25.073s
sys 0m6.446s
After:
ϟ time bild Biz/Dragons.hs
good: bild: Biz/Dragons.hs
real 0m17.111s
user 0m39.719s
sys 0m9.145s
So yeah this is a good speedup.
|
|
|
|
|
|
I don't care about ghcjs anymore, the most javascript I want to do is jQuery.
|
|
I had thought that I needed some unmerged commits to nixpkgs that enable Guile
3.0, but turns out I just needed to use a different target name :P
|
|
asdf seems to always be necessary for any other packages to work, so I just
include that in the call to nix-shell, and swank is included because it's just
useful to start a repl server.
|
|
I ended up deleting miso, and consequently all files under Hero/ and Miso/,
because I couldn't get miso to build with GHC 9.2.
Other things:
- Niv has been wrapped by Biz/Bild/Deps.hs, so I can extend it to my liking.
- Apply-refact is gone because I couldn't get it to build.
- Disabled python stuff.
|
|
Support for packages and third-party imports will need to come later once I
figure out how to lookup rust packages by their import statements. Until then,
this works to compile "hello world".
|
|
|
|
|
|
|
|
|
|
|
|
This is basically building on top of bild's analysis, which is great becuase it
means that bild is becoming a useful tool rather than a monolithic do-everything
job runner. The eventual goal is for the bild analysis to be much more useful,
maybe even provide data to remote repls or language-server or whatever.
|
|
|
|
This means my call to ghc-pkg will look at the full package set from Hoogle.
|
|
|
|
|
|
Still need to add this to the CLI, and there should be other features like
delete and so on, but this works for now.
|