Browse Source

define custom target, use with cargo-xbuild

requires nixpkgs master now
smoltcp
Astro 6 months ago
parent
commit
f0f9603657
5 changed files with 64 additions and 18 deletions
  1. 3
    3
      .cargo/config
  2. 28
    0
      armv7-none-eabihf.json
  3. 9
    4
      default.nix
  4. 21
    11
      link.x
  5. 3
    0
      shell.nix

+ 3
- 3
.cargo/config View File

@@ -1,11 +1,11 @@
[target.armv7-unknown-linux-gnueabihf]
[target.armv7-none-eabihf]
runner = "./runner.sh"
linker = "arm-none-eabihf-gcc"
rustflags = [
"-C", "link-arg=-Wl,-Tlink.x,-N",
"-C", "link-arg=-Tlink.x",
"-C", "target-feature=a9,armv7-a,neon",
"-C", "target-cpu=cortex-a9",
]

[build]
target = "armv7-unknown-linux-gnueabihf"
target = "armv7-none-eabihf.json"

+ 28
- 0
armv7-none-eabihf.json View File

@@ -0,0 +1,28 @@
{
"abi-blacklist": [
"stdcall",
"fastcall",
"vectorcall",
"thiscall",
"win64",
"sysv64"
],
"arch": "arm",
"data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64",
"emit-debug-gdb-scripts": false,
"env": "",
"executables": true,
"features": "+v7,+vfp3,-d32,+thumb2,-neon",
"is-builtin": false,
"linker": "rust-lld",
"linker-flavor": "ld.lld",
"llvm-target": "armv7-unknown-none-eabihf",
"max-atomic-width": 32,
"os": "none",
"panic-strategy": "abort",
"relocation-model": "static",
"target-c-int-width": "32",
"target-endian": "little",
"target-pointer-width": "32",
"vendor": ""
}

+ 9
- 4
default.nix View File

@@ -1,6 +1,5 @@
{ # Use master branch of the overlay by default
mozillaOverlay ? import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz),
rustSrc ? https://github.com/rustlang/rust/archive/master.tar.gz,
}:

let
@@ -8,15 +7,21 @@ let
in
with pkgs;
let
rustcSrc = fetchgit {
url = https://github.com/rust-lang/rust.git;
# master of 2019-08-06
rev = "8996328ebf34aa73e83a1db326767c11041f811d";
sha256 = "1daz0y97dm35nfy7ip0wqvyax0g36szm25n77rcg20k6wab4fqi7";
fetchSubmodules = true;
};
targets = [
"armv7-unknown-linux-gnueabihf"
];
rust =
rustChannelOfTargets "nightly" null targets;
rustPlatform = recurseIntoAttrs (makeRustPlatform {
rustc = rust // { src = rustSrc; };
rustc = rust // { src = rustcSrc; };
cargo = rust;
});
in {
inherit pkgs rustPlatform;
inherit pkgs rustPlatform rustcSrc;
}

+ 21
- 11
link.x View File

@@ -20,36 +20,45 @@ MEMORY

SECTIONS
{
.exceptions (0x0) :
.exceptions ORIGIN(OCM) :
{
KEEP(*(.text.exceptions));
} > OCM
.text (0x8000) :

.__fill (NOLOAD) : {
. = ORIGIN(OCM) + 0x8000;
} > OCM

.text (ORIGIN(OCM) + 0x8000) :
{
KEEP(*(.text.boot))
*(.text .text.*)
*(.text.boot);
*(.text .text.*);
. = ALIGN(4);
} > OCM
.rodata ALIGN(0x1000) :
.rodata : ALIGN(4)
{
*(.rodata)
*(.rodata .rodata.*);
. = ALIGN(4);
} > OCM
.data ALIGN(0x1000) :
.data : ALIGN(4)
{
*(.data)
*(.data .data.*);
. = ALIGN(4);
} > OCM
.bss ALIGN(0x4000) (NOLOAD) :
.bss (NOLOAD) : ALIGN(0x4000)
{
/* Aligned to 16 kB */
KEEP(*(.bss.l1_table));
*(.bss)
*(.bss .bss.*);
. = ALIGN(4);
} > OCM
__bss_start = ADDR(.bss);
__bss_end = ADDR(.bss) + SIZEOF(.bss);

.stack ALIGN(0x1000) (NOLOAD) : {
.stack (NOLOAD) : ALIGN(0x1000) {
. += STACK_SIZE;
} > OCM
__stack_end = ADDR(.stack);
@@ -58,6 +67,7 @@ SECTIONS
/DISCARD/ :
{
/* Unused exception related info that only wastes space */
*(.ARM.exidx);
*(.ARM.exidx.*);
*(.ARM.extab.*);
}

+ 3
- 0
shell.nix View File

@@ -11,6 +11,7 @@ stdenv.mkDerivation {
name = "adc2tcp-env";
buildInputs = with rustPlatform.rust; [
rustc cargo
cargo-xbuild rustcSrc
pkgsCross.armhf-embedded.buildPackages.gcc
#pkgsCross.armv7l-hf-multiplatform.buildPackages.gcc
#pkgsCross.armhf-embedded.buildPackages.binutils
@@ -18,7 +19,9 @@ stdenv.mkDerivation {

# Set Environment Variables
RUST_BACKTRACE = 1;
XARGO_RUST_SRC = "${rustcSrc}/src";

shellHook = ''
echo "Run 'cargo xbuild --release' to build."
'';
}

Loading…
Cancel
Save