diff options
Diffstat (limited to 'flake.nix')
| -rw-r--r-- | flake.nix | 179 |
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" + ''; + }; + }; + }; +} |
