Last active
April 8, 2020 01:34
-
-
Save Abdillah/dd2e2697b253e0be384d07dd8ee90280 to your computer and use it in GitHub Desktop.
Building rust-xtensa from source
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Quick start to compile | |
# | |
# 0. nix-shell --pure xtensa-shell.nix | |
# 1. Clone [email protected]: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