diff --git a/examples/trivial/default.nix b/examples/trivial/default.nix new file mode 100644 index 000000000..3ee30ecb6 --- /dev/null +++ b/examples/trivial/default.nix @@ -0,0 +1,8 @@ +let { + + inherit (import ../../lib) compileC link; + + hello = link {objects = compileC {main = ./hello.c;};}; + + body = [hello]; +} \ No newline at end of file diff --git a/examples/trivial/hello.c b/examples/trivial/hello.c new file mode 100644 index 000000000..237ad8ffe --- /dev/null +++ b/examples/trivial/hello.c @@ -0,0 +1,7 @@ +#include + +int main(int argc, char * * argv) +{ + printf("Hello World\n"); + return 0; +} diff --git a/lib/compile-c.sh b/lib/compile-c.sh new file mode 100644 index 000000000..0b7ffaad5 --- /dev/null +++ b/lib/compile-c.sh @@ -0,0 +1,3 @@ +. $stdenv/setup +mkdir $out +gcc -Wall -c $main -o $out/$(basename $main).o diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 000000000..0cbe0367e --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,17 @@ +rec { + + inherit (import /home/eelco/nixpkgs/pkgs/system/i686-linux.nix) stdenv; + + compileC = {main}: stdenv.mkDerivation { + name = "compile-c"; + builder = ./compile-c.sh; + inherit main; + }; + + link = {objects}: stdenv.mkDerivation { + name = "link"; + builder = ./link.sh; + inherit objects; + }; + +} diff --git a/lib/link.sh b/lib/link.sh new file mode 100644 index 000000000..6dc762ad4 --- /dev/null +++ b/lib/link.sh @@ -0,0 +1,10 @@ +. $stdenv/setup + +objs= +for i in "$objects"; do + obj=$i/*.o + objs="$objs $obj" +done + +mkdir $out +gcc -o $out/program $objs