1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
{
fdupes,
buildFHSEnv,
fetchzip,
icoutils,
imagemagick,
jdk21,
lib,
makeDesktopItem,
stdenvNoCC,
}:
let
iconame = "STM32CubeMX";
package = stdenvNoCC.mkDerivation rec {
pname = "stm32cubemx";
version = "6.14.0";
src = fetchzip {
url = "https://sw-center.st.com/packs/resource/library/stm32cube_mx_v${
builtins.replaceStrings [ "." ] [ "" ] version
}-lin.zip";
hash = "sha256-GOvoPyfPdQV/gjveuFpZjueTZD/BYuEWSHgQKBm3o3A=";
stripRoot = false;
};
nativeBuildInputs = [
fdupes
icoutils
imagemagick
];
desktopItem = makeDesktopItem {
name = "STM32CubeMX";
exec = "stm32cubemx";
desktopName = "STM32CubeMX";
categories = [ "Development" ];
icon = "stm32cubemx";
comment = meta.description;
terminal = false;
startupNotify = false;
mimeTypes = [
"x-scheme-handler/sgnl"
"x-scheme-handler/signalcaptcha"
];
};
buildCommand = ''
mkdir -p $out/{bin,opt/STM32CubeMX,share/applications}
cp -r $src/MX/. $out/opt/STM32CubeMX/
chmod +rx $out/opt/STM32CubeMX/STM32CubeMX
cat << EOF > $out/bin/${pname}
#!${stdenvNoCC.shell}
updater_xml="\$HOME/.stm32cubemx/thirdparties/db/updaterThirdParties.xml"
if [ -e "\$updater_xml" ] && [ ! -w "\$updater_xml" ]; then
echo "Warning: Unwritable \$updater_xml prevents CubeMX software packages from working correctly. Fixing that."
(set -x; chmod u+w "\$updater_xml")
fi
${jdk21}/bin/java -jar $out/opt/STM32CubeMX/STM32CubeMX "\$@"
EOF
chmod +x $out/bin/${pname}
icotool --extract $out/opt/STM32CubeMX/help/${iconame}.ico
fdupes -dN . > /dev/null
ls
for size in 16 24 32 48 64 128 256; do
mkdir -pv $out/share/icons/hicolor/"$size"x"$size"/apps
if [ $size -eq 256 ]; then
mv ${iconame}_*_"$size"x"$size"x32.png \
$out/share/icons/hicolor/"$size"x"$size"/apps/${pname}.png
else
convert -resize "$size"x"$size" ${iconame}_*_256x256x32.png \
$out/share/icons/hicolor/"$size"x"$size"/apps/${pname}.png
fi
done;
cp ${desktopItem}/share/applications/*.desktop $out/share/applications
if ! grep -q StartupWMClass= "$out"/share/applications/*.desktop; then
chmod +w "$out"/share/applications/*.desktop
echo "StartupWMClass=com-st-microxplorer-maingui-STM32CubeMX" >> "$out"/share/applications/*.desktop
else
echo "error: upstream already provides StartupWMClass= in desktop file -- please update package expr" >&2
exit 1
fi
'';
meta = with lib; {
description = "A graphical tool for configuring STM32 microcontrollers and microprocessors";
longDescription = ''
A graphical tool that allows a very easy configuration of STM32
microcontrollers and microprocessors, as well as the generation of the
corresponding initialization C code for the Arm® Cortex®-M core or a
partial Linux® Device Tree for Arm® Cortex®-A core), through a
step-by-step process.
'';
homepage = "https://www.st.com/en/development-tools/stm32cubemx.html";
sourceProvenance = with sourceTypes; [ binaryBytecode ];
license = licenses.unfree;
maintainers = with maintainers; [
angaz
wucke13
];
platforms = [ "x86_64-linux" ];
};
};
in
buildFHSEnv {
inherit (package) pname version meta;
runScript = "${package.outPath}/bin/stm32cubemx";
extraInstallCommands = ''
mkdir -p $out/share/{applications,icons}
ln -sf ${package.outPath}/share/applications/* $out/share/applications/
ln -sf ${package.outPath}/share/icons/* $out/share/icons/
'';
targetPkgs =
pkgs: with pkgs; [
alsa-lib
at-spi2-atk
cairo
cups
dbus
expat
glib
gtk3
libdrm
libGL
libudev0-shim
libxkbcommon
libgbm
nspr
nss
pango
xorg.libX11
xorg.libxcb
xorg.libXcomposite
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXrandr
libgcrypt
openssl
udev
];
}
|