diff --git a/shared/pkgs/default.nix b/shared/pkgs/default.nix index 0cf4299..528b302 100644 --- a/shared/pkgs/default.nix +++ b/shared/pkgs/default.nix @@ -2,8 +2,10 @@ inputs, pkgs, ... -}: { - mcuxpresso = import ./mcuxpresso pkgs; +}: let + mcuxpressoPkgs = inputs.nixpkgs-mcuxpresso.legacyPackages.${pkgs.system}; +in { + mcuxpresso = pkgs.callPackage ./mcuxpresso.nix mcuxpressoPkgs; # this is unfortunately needed since bolt-launcher makes use of openssl-1.1.1w, and since it is not part of hosts, we have to add it this way bolt-launcher = (import inputs.nixpkgs { diff --git a/shared/pkgs/mcuxpresso/ide.nix b/shared/pkgs/mcuxpresso.nix similarity index 69% rename from shared/pkgs/mcuxpresso/ide.nix rename to shared/pkgs/mcuxpresso.nix index 6d30c92..2ef261d 100644 --- a/shared/pkgs/mcuxpresso/ide.nix +++ b/shared/pkgs/mcuxpresso.nix @@ -1,4 +1,8 @@ -{pkgs, ...}: let +{ + lib, + pkgs, + ... +}: let name = "mcuxpressoide"; version = "24.9.25"; description = "MCUXpresso IDE"; @@ -6,13 +10,72 @@ mcuxpressoideSrc = pkgs.stdenv.mkDerivation { inherit version description; name = "${name}-src"; + src = pkgs.requireFile { + url = "https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE"; + name = "${filename}.bin"; + hash = "sha256-e3g7rzZQ1WFLcUakkjaufpHMtw3qkw5lwxJuCKs6L+k="; + }; + nativeBuildInputs = [pkgs.makeWrapper]; - nativeBuildInputs = [pkgs.autoPatchelfHook]; + buildCommand = '' + # Unpack tarball. + mkdir -p deb + sh $src --target deb || true + ar -xv deb/${filename} + tar xfvz data.tar.gz -C . - dontUnpack = true; - dontAutoPatchelf = true; + # Unpack LinkServer. + mkdir -p linkserver + sh deb/LinkServer_24.9.75.x86_64.deb.bin --target deb/linkserver || true + ar -xv deb/linkserver/LPCScrypt.deb + tar xfvz data.tar.gz -C linkserver + ar -xv deb/linkserver/MCU-Link.deb + tar xfvz data.tar.gz -C linkserver + ar -xv deb/linkserver/LinkServer_24.9.75.x86_64.deb + tar xfvz data.tar.gz -C linkserver - buildInputs = [ + mkdir -p ./final/eclipse + mv ./usr/local/${name}-${version}/ide/* ./usr/local/${name}-${version}/ide/.* final/eclipse + mv final/eclipse/mcuxpressoide final/eclipse/eclipse + mv final/eclipse/mcuxpressoide.ini final/eclipse/eclipse.ini + + # Create custom .eclipseproduct file + rm final/eclipse/.eclipseproduct + echo "name=${name} + id=com.nxp.${name} + version=${version} + " > final/eclipse/.eclipseproduct + # Install udev rules + mkdir -p final/lib/udev/rules.d + mv ./lib/udev/rules.d/56-pemicro.rules ./lib/udev/rules.d/85-mcuxpresso.rules final/lib/udev/rules.d/ + + # Additional files + mv ./usr/local/${name}-${version}/mcu_data final/mcu_data + + # Place LinkServer, lpcscrypt, and MCU-LINK_installer in /usr/local + mkdir -p ./final/usr/local + mv ./linkserver/usr/local/LinkServer_24.9.75 ./final/usr/local + mv ./linkserver/usr/local/lpcscrypt-2.1.3_83 ./final/usr/local + mv ./linkserver/usr/local/MCU-LINK_installer_3.148 ./final/usr/local + + # Install LinkServer udev rules + mv ./linkserver/lib/udev/rules.d/{85-linkserver_24.9.75.rules,85-mcu-link_3.148.rules,99-lpcscrypt.rules} final/lib/udev/rules.d + + cd ./final + + tar -czf $out ./ + ''; + }; + mcuxpressoide = pkgs.eclipses.buildEclipse { + name = "mcuxpresso-eclipse"; + inherit description; + src = mcuxpressoideSrc; + }; + + # needed because of the integrated toolchain + mcuxpressoFhsEnv = pkgs.buildFHSEnv { + name = "mcuxpresso-env"; + targetPkgs = pkgs: [ pkgs.dfu-util pkgs.stdenv.cc.cc.lib pkgs.gcc @@ -35,86 +98,32 @@ pkgs.libxcrypt-legacy pkgs.libusb-compat-0_1 pkgs.xorg.libxcb + pkgs.python3 pkgs.usbutils pkgs.libuuid pkgs.libudev-zero - - pkgs.python39 - pkgs.libz ]; - - src = pkgs.requireFile { - url = "https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE"; - name = "${filename}.bin"; - hash = "sha256-e3g7rzZQ1WFLcUakkjaufpHMtw3qkw5lwxJuCKs6L+k="; - }; - - buildPhase = '' - # Unpack tarball - mkdir -p deb - sh $src --target deb || true - ar -xv deb/${filename} - tar xfvz data.tar.gz -C . - - # Unpack LinkServer - mkdir -p linkserver - sh deb/LinkServer_24.9.75.x86_64.deb.bin --target deb/linkserver || true - ar -xv deb/linkserver/LPCScrypt.deb - tar xfvz data.tar.gz -C linkserver - ar -xv deb/linkserver/MCU-Link.deb - tar xfvz data.tar.gz -C linkserver - ar -xv deb/linkserver/LinkServer_24.9.75.x86_64.deb - tar xfvz data.tar.gz -C linkserver - - # Prepare Eclipse files - mkdir -p ./final/eclipse - mv ./usr/local/${name}-${version}/ide/* ./usr/local/${name}-${version}/ide/.* final/eclipse - mv final/eclipse/mcuxpressoide final/eclipse/eclipse - mv final/eclipse/mcuxpressoide.ini final/eclipse/eclipse.ini - - # Create custom .eclipseproduct file - rm final/eclipse/.eclipseproduct - echo "name=${name} - id=com.nxp.${name} - version=${version}" > final/eclipse/.eclipseproduct - - # Install udev rules - mkdir -p final/lib/udev/rules.d - mv ./lib/udev/rules.d/56-pemicro.rules ./lib/udev/rules.d/85-mcuxpresso.rules final/lib/udev/rules.d/ - - # Additional files - mv ./usr/local/${name}-${version}/mcu_data final/mcu_data - - # Place LinkServer, lpcscrypt, and MCU-LINK_installer in /usr/local - mkdir -p ./final/usr/local - mv ./linkserver/usr/local/LinkServer_24.9.75 ./final/usr/local - mv ./linkserver/usr/local/lpcscrypt-2.1.3_83 ./final/usr/local - mv ./linkserver/usr/local/MCU-LINK_installer_3.148 ./final/usr/local - - # Install LinkServer udev rules - mv ./linkserver/lib/udev/rules.d/{85-linkserver_24.9.75.rules,85-mcu-link_3.148.rules,99-lpcscrypt.rules} final/lib/udev/rules.d + profile = '' + export LD_LIBRARY_PATH=${lib.makeLibraryPath [pkgs.ncurses5 pkgs.ncurses]}:$LD_LIBRARY_PATH ''; - fixupPhase = '' - # Tarball creation in postFixup - echo "Creating tarball from ./final..." - autoPatchelf ./final - cd ./final - tar -czf $out . + extraBuildCommands = '' + # Ensure necessary directories exist + mkdir -p $out/usr/local/LinkServer_24.9.75/lpcscrypt $out/usr/local/LinkServer_24.9.75/MCU-LINK_installer + + cp -r ${mcuxpressoide}/usr/local/LinkServer_24.9.75/* $out/usr/local/LinkServer_24.9.75 + cp -r ${mcuxpressoide}/usr/local/lpcscrypt-2.1.3_83/* $out/usr/local/LinkServer_24.9.75/lpcscrypt + cp -r ${mcuxpressoide}/usr/local/MCU-LINK_installer_3.148/* $out/usr/local/LinkServer_24.9.75/MCU-LINK_installer ''; - }; - mcuxpresso = pkgs.eclipses.buildEclipse { - name = "mcuxpresso-eclipse"; - inherit description; - src = mcuxpressoideSrc; + runScript = "${mcuxpressoide}/bin/eclipse"; }; in pkgs.stdenv.mkDerivation { inherit name version description; dontUnpack = true; dontConfigure = true; + dontBuild = true; nativeBuildInputs = [pkgs.copyDesktopItems]; - buildInputs = [pkgs.zlib]; desktopItems = [ (pkgs.makeDesktopItem { inherit name; @@ -124,19 +133,23 @@ in }) ]; - buildPhase = '' - # Ensure necessary directories exist - mkdir -p $out/usr/local/LinkServer_24.9.75/lpcscrypt $out/usr/local/LinkServer_24.9.75/MCU-LINK_installer - - cp -r ${mcuxpresso}/usr/local/LinkServer_24.9.75/* $out/usr/local/LinkServer_24.9.75 - cp -r ${mcuxpresso}/usr/local/lpcscrypt-2.1.3_83/* $out/usr/local/LinkServer_24.9.75/lpcscrypt - cp -r ${mcuxpresso}/usr/local/MCU-LINK_installer_3.148/* $out/usr/local/LinkServer_24.9.75/MCU-LINK_installer - ''; - installPhase = '' - runHook preInstall - mkdir -p $out/bin - ln -s ${mcuxpresso}/bin/eclipse $out/bin/mcuxpresso + runHook preInstall + + # Create necessary directories + mkdir -p $out/lib/udev/rules.d + mkdir -p $out/bin $out/eclipse $out/mcu_data + + # Copy udev rules + cp ${mcuxpressoide}/lib/udev/rules.d/85-mcuxpresso.rules ${mcuxpressoide}/lib/udev/rules.d/56-pemicro.rules $out/lib/udev/rules.d/ + + # Copy full installation + cp -r ${mcuxpressoide}/eclipse $out/eclipse + cp -r ${mcuxpressoide}/mcu_data $out/mcu_data + + # Create symlink for the environment + ln -s ${mcuxpressoFhsEnv}/bin/mcuxpresso-env $out/bin/mcuxpresso + runHook postInstall ''; } diff --git a/shared/pkgs/mcuxpresso/config-tools.nix b/shared/pkgs/mcuxpresso/config-tools.nix deleted file mode 100644 index 7ea094f..0000000 --- a/shared/pkgs/mcuxpresso/config-tools.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - eclipses, - stdenv, - requireFile, - ... -}: let - name = "mcuxpressotools"; - version = "v16-1"; - description = "MCUXpresso Config Tools"; - filename = "mcuxpresso-config-tools-${version}_amd64.deb"; - - src = stdenv.mkDerivation { - inherit version description; - name = "${name}-src"; - src = requireFile { - url = "https://www.nxp.com/design/software/development-software/mcuxpresso-config-tools-pins-clocks-and-peripherals:MCUXpresso-Config-Tools"; - name = "${filename}.bin"; - sha256 = "sha256-BbEwxm1urV2IrgUiTiMBEAPvonQGwdL4fpqFftGgRxI="; - }; - - buildCommand = '' - # Unpack tarball. - mkdir -p deb - sh $src --target deb || true - ar -xv deb/${filename} - tar xfvz data.tar.gz -C . - - mkdir -p ./final/eclipse - mv ./opt/nxp/MCUX_CFG_v13/bin/.* final/eclipse - mv ./usr final/ - mv final/eclipse/tools final/eclipse/eclipse - mv final/eclipse/tools.ini final/eclipse/eclipse.ini - - # Create custom .eclipseproduct file - echo "name=${name} - id=com.nxp.${name} - version=${version} - " > final/eclipse/.eclipseproduct - - # Additional files - mkdir -p final/usr/share/mime - mv ./opt/nxp/MCUX_CFG_v13/mcu_data final/mcu_data - - cd ./final - tar -czf $out ./ - ''; - }; -in - eclipses.buildEclipse {inherit description name src;} diff --git a/shared/pkgs/mcuxpresso/default.nix b/shared/pkgs/mcuxpresso/default.nix deleted file mode 100644 index 4ec6d46..0000000 --- a/shared/pkgs/mcuxpresso/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -pkgs: { - ide = pkgs.callPackage ./ide.nix {}; -}