aboutsummaryrefslogtreecommitdiffhomepage
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix63
1 files changed, 63 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 000000000..9116fd2df
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,63 @@
+# A Nix flake file, mainly intended for developing TinyGo.
+# You can download Nix here, for use on your Linux or macOS system:
+# https://nixos.org/download.html
+# After you have installed Nix, you can enter the development environment as
+# follows:
+#
+# nix develop
+#
+# This drops you into a bash shell, where you can install TinyGo simply using
+# the following command:
+#
+# go install
+#
+# That's all! Assuming you've set up your $PATH correctly, you can now use the
+# tinygo command as usual:
+#
+# tinygo version
+#
+# You can also do many other things from this environment. Building and flashing
+# should work as you're used to: it's not a VM or container so there are no
+# access restrictions and you're running in the same host environment - just
+# with a slightly different set of tools available.
+{
+ inputs = {
+ # Use a recent stable release, but fix the version to make it reproducible.
+ # This version should be updated from time to time.
+ nixpkgs.url = "nixpkgs/nixos-23.05";
+ flake-utils.url = "github:numtide/flake-utils";
+ };
+ outputs = { self, nixpkgs, flake-utils }:
+ flake-utils.lib.eachDefaultSystem (system:
+ let
+ pkgs = nixpkgs.legacyPackages.${system};
+ in
+ with pkgs;
+ {
+ devShells.default = mkShell {
+ buildInputs = [
+ # These dependencies are required for building tinygo (go install).
+ go
+ llvmPackages_16.llvm
+ llvmPackages_16.libclang
+ # Additional dependencies needed at runtime, for building and/or
+ # flashing.
+ llvmPackages_16.lld
+ avrdude
+ binaryen
+ # Additional dependencies needed for on-chip debugging.
+ # These tools are rather big (especially GDB) and not frequently
+ # used, so are commented out. On-chip debugging is still possible if
+ # these tools are available in the host environment.
+ #gdb
+ #openocd
+ ];
+ shellHook= ''
+ # Ugly hack to make the Clang resources directory available.
+ # Perhaps there is a cleaner way to do it, but this works.
+ export GOFLAGS="\"-ldflags=-X github.com/tinygo-org/tinygo/goenv.clangResourceDir=${llvmPackages_16.clang.cc.lib}/lib/clang/16"\"
+ '';
+ };
+ }
+ );
+}