move dmath, dsafe and nixctor to snippets/ directory
This commit is contained in:
parent
43b30424b1
commit
625968bef3
13 changed files with 0 additions and 0 deletions
30
snippets/nixctor/README.md
Normal file
30
snippets/nixctor/README.md
Normal file
|
@ -0,0 +1,30 @@
|
|||
## ctor.nix - C/C++/D buildsystem written in Nixlang
|
||||
|
||||
Here is a buildsystem I made that incrementally compiles a program and
|
||||
then links it together at the end. The file default.nix shows an
|
||||
example on how to use this code in a real derivation, it's as simple
|
||||
as just adding your source files into the `sourceFiles` array and
|
||||
ctor.nix will generate a build phase and an install phase for you. It
|
||||
just calls `stdenv.mkDerivation` so you'll have to supply the required
|
||||
arguments to that too.
|
||||
|
||||
To test:
|
||||
|
||||
nix-build
|
||||
|
||||
To use a different compiler or flags, you can use the `compiler` and
|
||||
`cflags` arguments:
|
||||
|
||||
```nix
|
||||
# Example for a D program
|
||||
constructProgram {
|
||||
pname = "hello-world";
|
||||
version = "1.0.0";
|
||||
|
||||
src = fetchFromWhatever {};
|
||||
|
||||
compiler = "ldc2";
|
||||
cflags = "-O -wi";
|
||||
sourceFiles = [ "main.d" "lib.d" ];
|
||||
}
|
||||
```
|
54
snippets/nixctor/ctor.nix
Normal file
54
snippets/nixctor/ctor.nix
Normal file
|
@ -0,0 +1,54 @@
|
|||
# ctor.nix: simple buildsystem written in Nix
|
||||
# It can be adapted for any language, just substitute the default arguments
|
||||
args @
|
||||
{ pkgs ? import <nixpkgs> { }
|
||||
, lib ? pkgs.lib
|
||||
, stdenv ? pkgs.stdenv
|
||||
|
||||
# Name of the compiler to use when compiling source code
|
||||
, compiler ? "cc"
|
||||
# Flags passed to the compiler during compilation stages.
|
||||
, cflags ? "-O2 -c"
|
||||
# Flags passed to the compiler at link time
|
||||
, ldflags ? ""
|
||||
# Flag passed to the compiler to specify the output file
|
||||
, outFlag ? "-o"
|
||||
# Source code files to compile
|
||||
, sourceFiles ? [ "main.c" ]
|
||||
# Suffix of source code files
|
||||
, suffix ? ".c"
|
||||
# Name of the binary file to produce
|
||||
, programName ? "main"
|
||||
|
||||
, ...
|
||||
}:
|
||||
|
||||
with builtins;
|
||||
let
|
||||
newline = "
|
||||
";
|
||||
run = command: ''
|
||||
printf '%s\n' "${command}"
|
||||
${command}
|
||||
'';
|
||||
objify = sourceFile: replaceStrings [ suffix ] [ ".o" ] sourceFile;
|
||||
compile = sourceFile:
|
||||
"${compiler} ${cflags} ${outFlag} ${objify sourceFile} ${sourceFile}";
|
||||
link = objs:
|
||||
"${compiler} ${outFlag} ${programName} ${concatStringsSep " " objs} ${ldflags}";
|
||||
in
|
||||
stdenv.mkDerivation ({
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
${concatStringsSep newline (map
|
||||
(source: run (compile source)) sourceFiles)}
|
||||
${run "${link (map objify sourceFiles)}"}
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
install -Dm755 ${programName} $out/bin/${programName}
|
||||
runHook postInstall
|
||||
'';
|
||||
} // args)
|
9
snippets/nixctor/default.nix
Normal file
9
snippets/nixctor/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
|||
{ constructProgram ? import ./ctor.nix }:
|
||||
constructProgram {
|
||||
pname = "hello-world";
|
||||
version = "1.0.0";
|
||||
|
||||
src = ./.; # use the current directory
|
||||
|
||||
sourceFiles = [ "main.c" "lib.c" ];
|
||||
}
|
7
snippets/nixctor/lib.c
Normal file
7
snippets/nixctor/lib.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
#include <stdio.h>
|
||||
|
||||
void
|
||||
libfunc(void)
|
||||
{
|
||||
puts("hello, world!");
|
||||
}
|
7
snippets/nixctor/main.c
Normal file
7
snippets/nixctor/main.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
void libfunc(void);
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
libfunc();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue