Merge pull request #58330 from AerialX/msp430
TI MSP430 cross compiling
This commit is contained in:
commit
842b14ba98
|
@ -34,6 +34,7 @@ rec {
|
||||||
else if final.isUClibc then "uclibc"
|
else if final.isUClibc then "uclibc"
|
||||||
else if final.isAndroid then "bionic"
|
else if final.isAndroid then "bionic"
|
||||||
else if final.isLinux /* default */ then "glibc"
|
else if final.isLinux /* default */ then "glibc"
|
||||||
|
else if final.isMsp430 then "newlib"
|
||||||
else if final.isAvr then "avrlibc"
|
else if final.isAvr then "avrlibc"
|
||||||
# TODO(@Ericson2314) think more about other operating systems
|
# TODO(@Ericson2314) think more about other operating systems
|
||||||
else "native/impure";
|
else "native/impure";
|
||||||
|
|
|
@ -102,6 +102,11 @@ rec {
|
||||||
riscv64 = riscv "64";
|
riscv64 = riscv "64";
|
||||||
riscv32 = riscv "32";
|
riscv32 = riscv "32";
|
||||||
|
|
||||||
|
msp430 = {
|
||||||
|
config = "msp430-elf";
|
||||||
|
libc = "newlib";
|
||||||
|
};
|
||||||
|
|
||||||
avr = {
|
avr = {
|
||||||
config = "avr";
|
config = "avr";
|
||||||
};
|
};
|
||||||
|
|
|
@ -20,6 +20,7 @@ rec {
|
||||||
isRiscV = { cpu = { family = "riscv"; }; };
|
isRiscV = { cpu = { family = "riscv"; }; };
|
||||||
isSparc = { cpu = { family = "sparc"; }; };
|
isSparc = { cpu = { family = "sparc"; }; };
|
||||||
isWasm = { cpu = { family = "wasm"; }; };
|
isWasm = { cpu = { family = "wasm"; }; };
|
||||||
|
isMsp430 = { cpu = { family = "msp430"; }; };
|
||||||
isAvr = { cpu = { family = "avr"; }; };
|
isAvr = { cpu = { family = "avr"; }; };
|
||||||
isAlpha = { cpu = { family = "alpha"; }; };
|
isAlpha = { cpu = { family = "alpha"; }; };
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,7 @@ rec {
|
||||||
|
|
||||||
alpha = { bits = 64; significantByte = littleEndian; family = "alpha"; };
|
alpha = { bits = 64; significantByte = littleEndian; family = "alpha"; };
|
||||||
|
|
||||||
|
msp430 = { bits = 16; significantByte = littleEndian; family = "msp430"; };
|
||||||
avr = { bits = 8; family = "avr"; };
|
avr = { bits = 8; family = "avr"; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,11 @@
|
||||||
github = "aepsil0n";
|
github = "aepsil0n";
|
||||||
name = "Eduard Bopp";
|
name = "Eduard Bopp";
|
||||||
};
|
};
|
||||||
|
aerialx = {
|
||||||
|
email = "aaron+nixos@aaronlindsay.com";
|
||||||
|
github = "AerialX";
|
||||||
|
name = "Aaron Lindsay";
|
||||||
|
};
|
||||||
aespinosa = {
|
aespinosa = {
|
||||||
email = "allan.espinosa@outlook.com";
|
email = "allan.espinosa@outlook.com";
|
||||||
github = "aespinosa";
|
github = "aespinosa";
|
||||||
|
|
|
@ -186,6 +186,7 @@ stdenv.mkDerivation {
|
||||||
}.${targetPlatform.parsed.cpu.name}
|
}.${targetPlatform.parsed.cpu.name}
|
||||||
else if targetPlatform.isPower then if targetPlatform.isBigEndian then "ppc" else "lppc"
|
else if targetPlatform.isPower then if targetPlatform.isBigEndian then "ppc" else "lppc"
|
||||||
else if targetPlatform.isSparc then "sparc"
|
else if targetPlatform.isSparc then "sparc"
|
||||||
|
else if targetPlatform.isMsp430 then "msp430"
|
||||||
else if targetPlatform.isAvr then "avr"
|
else if targetPlatform.isAvr then "avr"
|
||||||
else if targetPlatform.isAlpha then "alpha"
|
else if targetPlatform.isAlpha then "alpha"
|
||||||
else throw "unknown emulation for platform: " + targetPlatform.config;
|
else throw "unknown emulation for platform: " + targetPlatform.config;
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
{ stdenvNoCC, fetchzip }:
|
||||||
|
|
||||||
|
let
|
||||||
|
mspgccVersion = "6_1_0_0";
|
||||||
|
version = "1.206";
|
||||||
|
in stdenvNoCC.mkDerivation {
|
||||||
|
name = "msp430-gcc-support-files-${version}";
|
||||||
|
src = fetchzip {
|
||||||
|
url = "http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/${mspgccVersion}/exports/msp430-gcc-support-files-${version}.zip";
|
||||||
|
sha256 = "0h297jms3gkmdcqmfpr3cg6v9wxnms34qbwvwl2fkmrz20vk766q";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildCommand = ''
|
||||||
|
find $src/include -name '*.ld' | xargs install -Dm0644 -t $out/lib
|
||||||
|
find $src/include -name '*.h' | xargs install -Dm0644 -t $out/include
|
||||||
|
install -Dm0644 -t $out/include $src/include/devices.csv
|
||||||
|
|
||||||
|
# appease bintoolsWrapper_addLDVars, search path needed for ld scripts
|
||||||
|
touch $out/lib/lib
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with stdenvNoCC.lib; {
|
||||||
|
description = ''
|
||||||
|
Development headers and linker scripts for TI MSP430 microcontrollers
|
||||||
|
'';
|
||||||
|
homepage = https://www.ti.com/tool/msp430-gcc-opensource;
|
||||||
|
license = licenses.bsd3;
|
||||||
|
platforms = [ "msp430-none" ];
|
||||||
|
maintainers = with maintainers; [ aerialx ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
{ stdenv, fetchFromGitHub, libusb, readline ? null }:
|
||||||
|
|
||||||
|
let
|
||||||
|
version = "0.25";
|
||||||
|
in stdenv.mkDerivation {
|
||||||
|
name = "mspdebug-${version}";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "dlbeer";
|
||||||
|
repo = "mspdebug";
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "0prgwb5vx6fd4bj12ss1bbb6axj2kjyriyjxqrzd58s5jyyy8d3c";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [ libusb readline ];
|
||||||
|
makeFlags = [ "PREFIX=$(out)" "INSTALL=install" ] ++
|
||||||
|
(if readline == null then [ "WITHOUT_READLINE=1" ] else []);
|
||||||
|
|
||||||
|
meta = with stdenv.lib; {
|
||||||
|
description = "A free programmer, debugger, and gdb proxy for MSP430 MCUs";
|
||||||
|
homepage = https://dlbeer.co.nz/mspdebug/;
|
||||||
|
license = licenses.gpl2;
|
||||||
|
platforms = platforms.all;
|
||||||
|
maintainers = with maintainers; [ aerialx ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
{ stdenvNoCC, lndir, newlib, msp430GccSupport }:
|
||||||
|
|
||||||
|
stdenvNoCC.mkDerivation {
|
||||||
|
name = "msp430-${newlib.name}";
|
||||||
|
inherit newlib;
|
||||||
|
inherit msp430GccSupport;
|
||||||
|
|
||||||
|
preferLocalBuild = true;
|
||||||
|
allowSubstitutes = false;
|
||||||
|
|
||||||
|
buildCommand = ''
|
||||||
|
mkdir $out
|
||||||
|
${lndir}/bin/lndir -silent $newlib $out
|
||||||
|
${lndir}/bin/lndir -silent $msp430GccSupport/include $out/${newlib.incdir}
|
||||||
|
${lndir}/bin/lndir -silent $msp430GccSupport/lib $out/${newlib.libdir}
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit (newlib) incdir libdir;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
platforms = [ "msp430-none" ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -8373,6 +8373,16 @@ in
|
||||||
binutils-arm-embedded = pkgsCross.arm-embedded.buildPackages.binutils;
|
binutils-arm-embedded = pkgsCross.arm-embedded.buildPackages.binutils;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
msp430GccSupport = callPackage ../development/misc/msp430/gcc-support.nix { };
|
||||||
|
|
||||||
|
msp430Newlib = callPackage ../development/misc/msp430/newlib.nix { };
|
||||||
|
msp430NewlibCross = callPackage ../development/misc/msp430/newlib.nix {
|
||||||
|
inherit (buildPackages.xorg) lndir;
|
||||||
|
newlib = newlibCross;
|
||||||
|
};
|
||||||
|
|
||||||
|
mspdebug = callPackage ../development/misc/msp430/mspdebug.nix { };
|
||||||
|
|
||||||
pharo-vms = callPackage ../development/pharo/vm { };
|
pharo-vms = callPackage ../development/pharo/vm { };
|
||||||
pharo = pharo-vms.multi-vm-wrapper;
|
pharo = pharo-vms.multi-vm-wrapper;
|
||||||
pharo-cog32 = pharo-vms.cog32;
|
pharo-cog32 = pharo-vms.cog32;
|
||||||
|
@ -10141,6 +10151,7 @@ in
|
||||||
else if name == "bionic" then targetPackages.bionic or bionic
|
else if name == "bionic" then targetPackages.bionic or bionic
|
||||||
else if name == "uclibc" then targetPackages.uclibcCross or uclibcCross
|
else if name == "uclibc" then targetPackages.uclibcCross or uclibcCross
|
||||||
else if name == "avrlibc" then targetPackages.avrlibcCross or avrlibcCross
|
else if name == "avrlibc" then targetPackages.avrlibcCross or avrlibcCross
|
||||||
|
else if name == "newlib" && stdenv.targetPlatform.isMsp430 then targetPackages.msp430NewlibCross or msp430NewlibCross
|
||||||
else if name == "newlib" then targetPackages.newlibCross or newlibCross
|
else if name == "newlib" then targetPackages.newlibCross or newlibCross
|
||||||
else if name == "musl" then targetPackages.muslCross or muslCross
|
else if name == "musl" then targetPackages.muslCross or muslCross
|
||||||
else if name == "msvcrt" then targetPackages.windows.mingw_w64 or windows.mingw_w64
|
else if name == "msvcrt" then targetPackages.windows.mingw_w64 or windows.mingw_w64
|
||||||
|
|
|
@ -140,6 +140,7 @@ in
|
||||||
android64 = mapTestOnCross lib.systems.examples.aarch64-android-prebuilt (linuxCommon // {
|
android64 = mapTestOnCross lib.systems.examples.aarch64-android-prebuilt (linuxCommon // {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
msp430 = mapTestOnCross lib.systems.examples.msp430 embedded;
|
||||||
avr = mapTestOnCross lib.systems.examples.avr embedded;
|
avr = mapTestOnCross lib.systems.examples.avr embedded;
|
||||||
arm-embedded = mapTestOnCross lib.systems.examples.arm-embedded embedded;
|
arm-embedded = mapTestOnCross lib.systems.examples.arm-embedded embedded;
|
||||||
powerpc-embedded = mapTestOnCross lib.systems.examples.ppc-embedded embedded;
|
powerpc-embedded = mapTestOnCross lib.systems.examples.ppc-embedded embedded;
|
||||||
|
|
Loading…
Reference in New Issue