shared/pkgs: move mcuxpresso to its own file

This commit is contained in:
Anthony Rodriguez 2025-01-04 22:35:34 +01:00
parent 4ccd29cb9d
commit 065266ee3a
Signed by: nezia
GPG key ID: EE3BE97C040A86CE
4 changed files with 100 additions and 137 deletions

View file

@ -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 {

View file

@ -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
'';
}

View file

@ -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;}

View file

@ -1,3 +0,0 @@
pkgs: {
ide = pkgs.callPackage ./ide.nix {};
}