Skip to content

Instantly share code, notes, and snippets.

@Abdillah
Last active April 8, 2020 01:34
Show Gist options
  • Save Abdillah/dd2e2697b253e0be384d07dd8ee90280 to your computer and use it in GitHub Desktop.
Save Abdillah/dd2e2697b253e0be384d07dd8ee90280 to your computer and use it in GitHub Desktop.
Building rust-xtensa from source
# Quick start to compile
#
# 0. nix-shell --pure xtensa-shell.nix
# 1. Clone git@github.com:MabezDev/rust-xtensa.git
# 2. $ cd rust-xtensa/
# 3. $ ./configure $configureFlags
# 4. $ python ./x.py --help
# 5. $ python ./x.py build
#
# The rest of the guide, please refer to [MabezDev's](https://github.com/MabezDev/xtensa-rust-quickstart).
let
pkgs = import <nixpkgs> {};
name = "xtensa-devenv";
stdenv = pkgs.stdenv;
lib = stdenv.lib;
pkgsBuildBuild = { targetPackages.stdenv = pkgs.gcc8Stdenv; };
pkgsBuildHost = { targetPackages.stdenv = pkgs.gcc8Stdenv; };
pkgsBuildTarget = { targetPackages.stdenv = pkgs.gcc8Stdenv; };
rust = pkgs.rustc;
toRustTarget = platform: with platform.parsed; let
cpu_ = {
"armv7a" = "armv7";
"armv7l" = "armv7";
"armv6l" = "arm";
}.${cpu.name} or platform.rustc.arch or cpu.name;
in platform.rustc.config
or "${cpu_}-${vendor.name}-${kernel.name}${lib.optionalString (abi.name != "unknown") "-${abi.name}"}";
in pkgs.stdenv.mkDerivation {
buildInputs = [
pkgs.python
pkgs.python27Packages.setuptools
pkgs.python27Packages.click
pkgs.python27Packages.pyserial
pkgs.python27Packages.future
pkgs.python27Packages.cryptography
pkgs.python27Packages.pyparsing
pkgs.python27Packages.pyelftools
# RustC
pkgs.curl
pkgs.rustc
pkgs.cargo
pkgs.git
pkgs.gcc8Stdenv
pkgs.gcc
pkgs.gcc-unwrapped
pkgs.llvm_6
pkgs.ninja
pkgs.cmake
pkgs.libxml2
pkgs.autoconf
pkgs.automake
pkgs.gperf
pkgs.bison
pkgs.flex
pkgs.gawk
pkgs.ncurses
pkgs.zlib
pkgs.libtool
pkgs.help2man
pkgs.unzip
pkgs.bzip2
pkgs.pkg-config
pkgs.libstdcxx5
pkgs.ncurses
];
inherit name;
configureFlags = let
setBuild = "--set=target.${toRustTarget stdenv.buildPlatform}";
setHost = "--set=target.${toRustTarget stdenv.hostPlatform}";
setTarget = "--set=target.${toRustTarget stdenv.targetPlatform}";
ccForBuild = "${pkgsBuildBuild.targetPackages.stdenv.cc}/bin/${pkgsBuildBuild.targetPackages.stdenv.cc.targetPrefix}cc";
cxxForBuild = "${pkgsBuildBuild.targetPackages.stdenv.cc}/bin/${pkgsBuildBuild.targetPackages.stdenv.cc.targetPrefix}c++";
ccForHost = "${pkgsBuildHost.targetPackages.stdenv.cc}/bin/${pkgsBuildHost.targetPackages.stdenv.cc.targetPrefix}cc";
cxxForHost = "${pkgsBuildHost.targetPackages.stdenv.cc}/bin/${pkgsBuildHost.targetPackages.stdenv.cc.targetPrefix}c++";
ccForTarget = "${pkgsBuildTarget.targetPackages.stdenv.cc}/bin/${pkgsBuildTarget.targetPackages.stdenv.cc.targetPrefix}cc";
cxxForTarget = "${pkgsBuildTarget.targetPackages.stdenv.cc}/bin/${pkgsBuildTarget.targetPackages.stdenv.cc.targetPrefix}c++";
in [
"--release-channel=stable"
"--enable-rpath"
"--enable-vendor"
"--build=${toRustTarget stdenv.buildPlatform}"
"--host=${toRustTarget stdenv.hostPlatform}"
"--target=${toRustTarget stdenv.targetPlatform}"
"${setBuild}.cc=${ccForBuild}"
"${setHost}.cc=${ccForHost}"
"${setTarget}.cc=${ccForTarget}"
"${setBuild}.linker=${ccForBuild}"
"${setHost}.linker=${ccForHost}"
"${setTarget}.linker=${ccForTarget}"
"${setBuild}.cxx=${cxxForBuild}"
"${setHost}.cxx=${cxxForHost}"
"${setTarget}.cxx=${cxxForTarget}"
"--enable-profiler" # build libprofiler_builtins
];
shellHook = ''
XTENSA_ROOT=$HOME/.xtensa
export IDF_PATH=$XTENSA_ROOT/rtos
# export PATH=$XTENSA_ROOT/sdk/bin:$PATH
export LD_LIBRARY_PATH=${pkgs.gcc-unwrapped.lib}/lib
export SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt
'';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment