summaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-10-04 16:35:45 -0600
committerAlejandro Soto <alejandro@34project.org>2023-10-04 16:35:45 -0600
commit972678950297ab158541a8afec2cbcd01a996959 (patch)
treef2ea3c11924a755550fa2a8bf852185daa707448 /flake.nix
parent084e7b290bd625e5d090410bf887bf81749a266f (diff)
nix: move flake to top-level dir
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix179
1 files changed, 179 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..3fcb236
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,179 @@
+{
+ inputs.nixpkgs.url = "github:nixos/nixpkgs/release-23.05";
+
+ outputs = { self, nixpkgs }:
+ let
+ system = "x86_64-linux";
+ pkgs = import nixpkgs { inherit system; config.allowUnfree = true; };
+
+ crossSystem = "arm-linux";
+ cross = import nixpkgs {
+ inherit system;
+
+ config.allowUnsupportedSystem = true;
+
+ crossSystem = {
+ config = "arm-unknown-linux-gnueabi";
+
+ gcc = {
+ # > Switch "--with-arch" may not be used with switch "--with-cpu"
+ # > make[1]: *** [Makefile:4315: configure-gcc] Error 1
+ #arch = "armv4";
+
+ # Ver SA110 en arch/arm/mm/Kconfig, es parecido
+ cpu = "arm810";
+ };
+
+ linux-kernel = {
+ name = "taller";
+ target = "uImage";
+ makeFlags = [ "LOADADDR=0x8000" ];
+ autoModules = false;
+ baseConfig = "taller_defconfig";
+ };
+ };
+
+ # Tomó mucho conseguir esta expresión: horas de leer nixpkgs, prueba y error
+ crossOverlays = [
+ (final: prev: {
+ stdenv = prev.stdenvAdapters.overrideCC prev.stdenv (prev.stdenv.cc.override {
+ bintools = prev.stdenv.cc.bintools.override {
+ bintools = prev.stdenv.cc.bintools.bintools.overrideAttrs (prev: {
+ patches = prev.patches ++ [
+ ./nix/gas-config-tc-arm-disable-instruction-support-check.patch
+ ];
+ });
+ };
+ });
+ })
+ ];
+ };
+ in
+ {
+ formatter.${system} = pkgs.nixpkgs-fmt;
+
+ # Tomado de pkgs/build-support/vm/default.nix
+ packages."${crossSystem}".proof-of-concept = cross.makeInitrd {
+ contents = [
+ {
+ symlink = "/init";
+
+ object = with cross; let
+ initrdUtils = runCommand "initrd-utils"
+ {
+ nativeBuildInputs = [ buildPackages.nukeReferences ];
+ allowedReferences = [ "out" ]; # prevent accidents like glibc being included in the initrd
+ }
+ ''
+ mkdir -p $out/bin
+ mkdir -p $out/lib
+
+ # Copy what we need from Glibc.
+ cp -p ${cross.glibc.out}/lib/ld-linux*.so.? $out/lib
+ cp -p ${cross.glibc.out}/lib/libc.so.* $out/lib
+ cp -p ${cross.glibc.out}/lib/libm.so.* $out/lib
+ cp -p ${cross.glibc.out}/lib/libresolv.so.* $out/lib
+
+ # Copy BusyBox.
+ cp -pd ${cross.busybox}/bin/* $out/bin
+
+ # Run patchelf to make the programs refer to the copied libraries.
+ for i in $out/bin/* $out/lib/*; do if ! test -L $i; then nuke-refs $i; fi; done
+
+ for i in $out/bin/*; do
+ if [ -f "$i" -a ! -L "$i" ]; then
+ echo "patching $i..."
+ patchelf --set-interpreter $out/lib/ld-linux*.so.? --set-rpath $out/lib $i || true
+ fi
+ done
+ '';
+
+
+ path = lib.makeSearchPath "bin" [
+ #bashInteractive
+ #coreutils-full
+ #gnugrep
+ #neofetch
+ #util-linux
+ ];
+ in
+ writeScript "init" ''
+ #!${initrdUtils}/bin/ash
+
+ export PATH=${initrdUtils}/bin
+
+ mkdir -p /dev /etc /proc /sys
+ echo -n > /etc/fstab
+
+ mount -t devtmpfs devtmpfs /dev
+ mount -t proc none /proc
+ mount -t sysfs none /sys
+
+ exec ash
+ '';
+ }
+ ];
+ };
+
+ devShells."${system}" = with pkgs; {
+ default = mkShell {
+ buildInputs = [
+ ncurses
+ openssl
+ SDL2
+ ];
+
+ nativeBuildInputs = [
+ binutils
+ gcc
+ cross.stdenv.cc.cc
+ cross.stdenv.cc.bintools
+ gcc-arm-embedded
+ gdb
+ gnumake
+ gtkwave
+ kermit
+ lcov
+ pkg-config
+ (python3.withPackages (py: [ py.numpy py.pillow py.matplotlib ]))
+ (quartus-prime-lite.override { supportedDevices = [ "Cyclone V" ]; })
+ verilator
+ ];
+
+ shellHook = ''
+ export CROSS_COMPILE=arm-unknown-linux-gnueabi-
+ export MAKEFLAGS="AR=gcc-ar"
+ export CXXFLAGS="$(pkg-config --cflags sdl2 ncursesw)"
+ export LDFLAGS="$(pkg-config --libs sdl2 ncursesw)"
+
+ # <https://discourse.nixos.org/t/fonts-in-nix-installed-packages-on-a-non-nixos-system/5871/7>
+ export LOCALE_ARCHIVE="${glibcLocales}/lib/locale/locale-archive"
+ export FONTCONFIG_FILE="${fontconfig.out}/etc/fonts/fonts.conf"
+ '';
+ };
+
+ kbuild = mkShell {
+ buildInputs = [
+ ncurses
+ ];
+
+ nativeBuildInputs = [
+ bc
+ bison
+ flex
+ gcc
+ cross.stdenv.cc.cc
+ cross.stdenv.cc.bintools
+ gnumake
+ openssl # Splash de u-boot
+ ubootTools
+ ];
+
+ shellHook = ''
+ export CROSS_COMPILE=arm-unknown-linux-gnueabi-
+ export MAKEFLAGS="ARCH=arm O=build/taller LOADADDR=0x8000"
+ '';
+ };
+ };
+ };
+}