343 Commits

Author SHA1 Message Date
Steven Walter
458ab61bef Merge pull request #393 from ColinFinck/feature/rust-1.64.0
Add Rust 1.64.0, remove 1.54.0 and 1.58.1
2022-10-02 21:34:18 -04:00
Colin Finck
681204147c Add Rust 1.64.0, remove 1.54.0 and 1.58.1 2022-09-30 14:23:49 +02:00
Steven Walter
59c4377bdb Merge pull request #385 from mlilien/1.61.0
rust 1.61.0
2022-09-23 14:29:55 -04:00
Marcel Lilienthal
f1c1a586cd correct LLVM_RELEASE 2022-09-23 18:09:44 +02:00
Marcel Lilienthal
52dbb6731b added rust 1.61.0 2022-09-23 18:09:44 +02:00
Steven Walter
b67791b753 Merge pull request #391 from meta-rust/fix-ci
Fix github CI
2022-09-08 20:56:35 -04:00
Steven Walter
24c3e2016d main.yml: disable broken SDK test
The SDK fails to build with a dependency error:

Problem: package packagegroup-rust-cross-canadian-qemux86 requires rust-cross-canadian-x86-64, but none of the providers can be installed
 - conflicting requests
 - nothing provides libc.so.6(GLIBC_2.34)(64bit)
 - nothing provides libstdc++.so.6(GLIBCXX_3.4.29)(64bit)
2022-09-08 20:45:58 -04:00
Steven Walter
c92db6c0a0 main.yml: disable uninative
uninative causes build errors on Ubuntu 22.04
2022-09-08 20:45:32 -04:00
Colin Finck
c654f5cb92 Merge pull request #376 from ColinFinck/rust-1.58.1
Import Rust 1.58.1 from openembedded-core, remove Rust 1.51.0
2022-02-21 13:30:51 +01:00
Colin Finck
297dbb9d1a Fix building cargo 1.54.0 after the refactoring. 2022-02-09 09:45:05 +01:00
Colin Finck
d0044639fe Import Rust 1.58.1 recipes from openembedded-core, remove Rust 1.51.0. 2022-02-09 09:44:48 +01:00
Doug Goldstein
4bde33e1fc Merge pull request #373 from astrolabe-coop/sandbox/rzr/review/master
docs: Fix typo for corresponds
2022-02-08 17:05:11 -06:00
Philippe Coval
af6d045ac3 docs: Fix typo for corresponds
Signed-off-by: Philippe Coval <philippe.coval@astrolabe.coop>
2022-02-03 10:51:36 +01:00
Ralf Anton Beier
d4384db8c3 Remove unused patch file (#363)
Rust 1.49.0 needed the 0001-rustc_target-Fix-dash-vs-underscore-mismatches-in-op.patch
patch and newer versions not.

Signed-off-by: Ralf Anton Beier <ralf_beier@me.com>
2021-09-19 16:24:09 -04:00
Ralf Anton Beier
448047c7e4 Upgrade to 1.54.0 (#359)
The rust patches for riscv64 have been upstreamed
and are not needed anymore.

The riscv64 patches for libstd-rs need to be
applied to libc-0.2.93 to work. Some slight
modifications are necessary.

Signed-off-by: Ralf Anton Beier <ralf_beier@me.com>
2021-08-09 14:10:00 -04:00
Martin 'JaMa' Jansa
bf6705fb7f Convert to new override syntax (#357)
* Convert to new override syntax

This is the result of automated script (0.9.0) conversion:

oe-core/scripts/contrib/convert-overrides.py .

converting the metadata to use ":" as the override character instead of "_".

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>

* Manually fix the conversion

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>

* layer.conf: Update layer compatibility with only dunfell and newer.

Add honister to mark the layers as compatible with honister now that it uses
the new override syntax.

Drop zeus and older which are missing a support for newer override syntax which
was backported only to 1.46 branch (used by dunfell) and newer, e.g.:
https://git.openembedded.org/bitbake/commit/?h=1.46&id=c5418eae56cc50dbae7951c055434a0c456c53a4

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>

* CI: use YOCTO_BRANCH instead of yocto-${YOCTO_VERSION} for poky checkout

* using latest revision in branch is often better than sticking to
  some point releases

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>

* CI: switch to hardknott branch

* gatesgarth is already EOL, better to use something supported

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-08-05 17:37:51 -04:00
Khem Raj
1b59fd4590 rust-common.inc: Use == operator instead of 'is'
literal is being checked here therefore == and != should be used instead
of 'is' or 'is not'

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-07-07 01:57:32 +02:00
Drew Reed
09605d2ea5 Added hashes for aarch64 binary snapshot packages 2021-06-25 12:02:21 +02:00
Anatol Belski
ab86e0a068 nativesdk: Add some tools in a separate recipe (#345)
* nativesdk: Add some tools in a separate recipe

This brings ATM:
- clippy
- rustfmt

Another approach might be to include these into the existing rust recipe,
but as we can't really use PACKAGECONFIG here it might just overload it.
This way, the tools will be built in parallel and still can be excluded
from the packgae group, if desired.

Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2021-06-05 13:42:18 -04:00
Anatol Belski
494d879a1d Merge pull request #344 from weltling/nativesk_std_src
nativesdk: Package rust sources
2021-05-06 18:09:00 +02:00
Anatol Belski
b4877e0be0 nativesdk: Fix rust-std source copy command
Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2021-05-05 11:53:28 +00:00
Anatol Belski
3773dbcebd nativesdk: Package rust sources
This mimics what rustup packages into the toolchain contents. The
presence of the sources for the exact std lib can be useful for the
development and IDE integration.

Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2021-05-04 21:46:00 +02:00
Cody Schafer
02db606a96 Merge pull request #338 from aj-bagwell/armv4-alignement
rust.inc: add strict-align when target is ARMv4
2021-04-26 21:37:33 -04:00
Reto Schneider
25ee517ae2 rust: Add support for ARMv5 (#342)
At GARDENA, we are running our Rust based web interface and
overlayfs-purge tool successfully on our ARMv5, Atmel SAM9G25 SoC based
IoT gateway.
2021-04-24 16:54:42 -04:00
AJ Bagwell
031fc5406e rust.inc: add strict-align when target is ARMv4 2021-04-21 14:59:37 +01:00
Anatol Belski
920db7b045 workflows: Refactor yml to improve build time (#335)
* workflows: Refactor yml to improve build time and reduce size

- Split out the build configuration job
- Use the official sstate mirror
- Disable more of unnecessary features

Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2021-04-04 20:53:28 -04:00
Steven Walter
0048ea8253 Merge pull request #333 from weltling/sdk_ci
workflows: Build and test SDK
2021-04-03 19:20:26 -04:00
Anatol Belski
e0180c565e workflows: Further reduce SDK size
Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2021-04-03 14:33:11 +02:00
Anatol Belski
b637307219 workflows: Install SDK under the workspace path
Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2021-04-03 14:14:04 +02:00
Steven Walter
742cd5c095 Merge pull request #334 from meta-rust/progress
cargo.bbclass: support cargo's progress indicator
2021-04-02 18:04:11 -04:00
Steven Walter
53cbdb566d cargo.bbclass: support cargo's progress indicator
Recent versions of cargo support always showing the progress indicator.
By default the progress indicator is hidden if the output is not a tty.
For bitbake builds, the output is redirected to a file and not a tty.
However, if we tell cargo to always show the progress indicator, bitbake
can parse it and will show the user how the rust build is progressing.
2021-04-02 16:21:43 -04:00
Anatol Belski
2a9ee78d08 workflows: Check to reduce size
Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2021-04-02 19:50:49 +02:00
Anatol Belski
3638b7da88 workflows: Ensure project dir doesn't exist 2021-04-02 19:20:35 +02:00
Anatol Belski
08c385c922 workflows: Build and test SDK
Closes #332.

Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2021-04-02 16:59:41 +02:00
Steven Walter
2c89770123 Merge pull request #331 from YoeDistro/yoe/mut
rust-llvm: Update LLVM_RELEASE to accurate versions
2021-04-01 16:52:34 -04:00
Khem Raj
d9e32f6288 rust-llvm: Update LLVM_RELEASE to accurate versions
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-04-01 08:44:46 -07:00
Anatol Belski
250230e292 Merge pull request #313 from weltling/nativesdk_0
nativesdk: Implement cross canadian support
2021-04-01 14:38:54 +02:00
Anatol Belski
c06069fdaa cross-canadian: Sync with 1.51.0 addition for rustc and cargo
Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2021-03-30 15:13:28 +00:00
Anatol Belski
e492b2d86f ident: Fix more WS issues 2021-03-30 15:11:59 +00:00
Anatol Belski
2932b399a5 packagegroup-rust-cross-canadian: Remove trailing WS 2021-03-30 15:11:59 +00:00
Anatol Belski
ae08e553b8 rustc-cross-canadian: Remove obsolete comment 2021-03-30 15:11:59 +00:00
Anatol Belski
439dea8664 nativesdk: Implement cross canadian support
This addition closes #236 requesting the SDK support. The implementation
consists on a yet minimum set of worky functionality;

- Includes rustc, rustdoc and cargo.
- Includes libstd and accompanying lib archives for host and for target.
- Integrates with the standard environment setup script.
- Integrates configurations automatically build for target.

The supported build host is still AMD64 only.

Note that there's no need on introducing crosssdk package as the
official snapshot package serves same way as a non SDK build.

Possible future directions:

- Offline build:
	- Support pre-cached set of crates that can be vendored.
	- Support pre-filled cargo registry.
- Support further tools like cargo-fmt, cargo-clippy, GDB support and so
on.

Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
2021-03-30 15:11:59 +00:00
Steven Walter
a4302679bb Merge pull request #330 from YoeDistro/yoe/mut
Update rust to 1.51
2021-03-28 20:35:24 -04:00
Khem Raj
64c625f119 cargo/libstd-rs: Forward port musl/riscv support
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-03-28 15:55:12 -07:00
Colin Finck
191cd91817 Update to Rust 1.51.0 and remove 1.47.0
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-03-28 15:55:12 -07:00
Steven Walter
da00d57cda Merge pull request #329 from srwalter/workflow
Enable a workflow to build rust-hello-world
2021-03-28 17:16:44 -04:00
Steven Walter
57a202ac53 workflows/main.yml: use bitbake-layers command instead of sed 2021-03-28 15:25:44 -04:00
Cody Schafer
51eba75155 Merge pull request #325 from janderholm/enable-profiler-runtime
rust.inc: Build the profiler runtime
2021-03-28 15:05:51 -04:00
Steven Walter
33904e6514 Enable a workflow to build rust-hello-world
Verify that rust-hello-world build (which in turn ensures that
rust-native, cargo-native, etc all build)
2021-03-27 23:47:07 -04:00
Khem Raj
0fffd992ee Merge pull request #326 from YoeDistro/yoe/mut
layer.conf: add hardknott to compatible release branches
2021-03-18 11:52:23 -07:00
Khem Raj
7a8876558b layer.conf: add hardknott to compatible release branches
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-03-17 23:16:15 -07:00
Johan Anderholm
cb5a599f02 rust.inc: Build the profiler runtime
Needed when compiling with options such as "-C profile-generate" or
"-Z instrument-coverage", e.g. when generating coverage reports or doing
profile guided optimization.
2021-03-16 14:15:32 +01:00
Cody Schafer
9a035fe272 Merge pull request #324 from YoeDistro/yoe/mut
rust-llvm: Fix build with gcc11
2021-03-02 20:19:55 -05:00
Khem Raj
013b210033 rust-llvm: Fix build with gcc11
Backport a patch from upstream llvm

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-03-02 11:09:06 -08:00
Khem Raj
3f3aa9a6bb Merge pull request #318 from YoeDistro/kraj/riscv-musl
add riscv musl support
2021-03-01 08:42:09 -08:00
Cody Schafer
f31b044c53 Merge pull request #317 from YoeDistro/kraj/ppc64le
rust: Enable ppc64le target
2021-02-28 13:36:22 -05:00
Cody Schafer
30dcb2d61f Merge pull request #323 from jwinarske/example-install
install example executables
2021-02-27 13:11:05 -05:00
Colin Finck
6f399bbd90 Merge pull request #319 from ColinFinck/fix/llvm-cpu
Revamp llvm_cpu to select the closest CPU for optimization.
2021-02-26 14:07:40 +01:00
Colin Finck
81f9357b58 Remove mips/mipsel translation to mips32, which is the same as "generic" 2021-02-24 12:13:18 +01:00
Colin Finck
7a261d5d14 Merge pull request #320 from ColinFinck/remove-old-rust-version-checks
Remove checks for Rust versions we don't build anymore.
2021-02-24 09:37:43 +01:00
Joel Winarske
81a4d79c06 install example executables 2021-02-23 20:03:59 -08:00
Colin Finck
f8b9103477 Remove checks for Rust versions we don't build anymore. 2021-02-23 17:54:26 +01:00
Colin Finck
83ad3d415f Revamp llvm_cpu to select the closest CPU for optimization. 2021-02-23 16:32:55 +01:00
Khem Raj
38a017d9de rust: Enable ppc64le target
this helps building the compiler, work is still needed for libstd-rs and
other pieces

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-02-20 13:04:07 -08:00
Khem Raj
4434790fc2 libstd-rs/libc: Backport riscv64/musl support
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-02-17 21:56:19 -08:00
Khem Raj
c1e1921e03 rust/cargo/libstd-rs: Add riscv/musl support
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-02-17 21:56:19 -08:00
Cody Schafer
029f1ea6a6 Merge pull request #312 from janderholm/no-target-in-rust-native
rust-native shouldn't depend on TARGET variables
2021-02-18 03:22:47 +00:00
Cody Schafer
9937659804 Merge pull request #310 from BeneSim/fix-cargo-src-dir
Factor in `CARGO_SRC_DIR` when setting `MANIFEST_PATH`.
2021-02-18 03:21:53 +00:00
Johan Anderholm
920328c8d8 rust-native shouldn't depend on TARGET variables
Similar to 3b783652cc, this makes sure
rust-native does not depend on target variables. This allow one
rust-native to be shared between machines of different architectures
again.

For the record, the following guide was used to find out why
do_rust_gen_targets differed between different machines.
https://wiki.yoctoproject.org/wiki/TipsAndTricks/Understanding_what_changed_(diffsigs_etc)
2021-02-16 19:49:46 +01:00
Benjamin Isbarn
4e96013677 Factor in CARGO_SRC_DIR when setting MANIFEST_PATH. 2021-02-15 14:36:46 +01:00
Cody Schafer
341a3c77bb Merge pull request #305 from akiernan/master
rust: Drop v8.1a tune for aarch64
2021-02-09 16:04:19 +00:00
Cody Schafer
d59c590245 Merge pull request #306 from ColinFinck/remove-old-versions
Keep only the most recent two Rust versions.
2021-02-09 16:01:42 +00:00
Colin Finck
87e8d50abd Keep only the most recent two Rust versions.
Older ones are already unbuildable and nobody misses them, see https://github.com/meta-rust/meta-rust/issues/298
2021-02-09 15:09:14 +01:00
Alex Kiernan
53c9aabda3 rust: Drop v8.1a tune for aarch64
Building for "+v8.1a"  breaks on (at least) Cortex A53 (Armv8-A) on
startup with `Illegal instruction`.

Fixes: 26609f46d9 ("rust.inc: use 'v8.1a' feature when building for aarch64 instead of 'v8'")
2021-02-09 03:13:25 +00:00
Cody Schafer
b53374d793 Merge pull request #304 from meta-rust/jmesmon-patch-readme
readme: fix url and link issue number
2021-02-08 21:47:40 -05:00
Cody P Schafer
7feed5d36c recipes-example/rust-hello-world: move to new url in meta-rust org 2021-02-08 19:38:12 -05:00
Cody Schafer
1b944013b8 readme: fix url and link issue number 2021-02-08 19:37:18 -05:00
Cody Schafer
81d4b4c820 Merge pull request #301 from shr-project/jansa/lic-1.49.0
Cleanups with 1.49.0 version.
2021-02-08 11:06:09 -05:00
Martin Jansa
26609f46d9 rust.inc: use 'v8.1a' feature when building for aarch64 instead of 'v8'
* get rid of annoying
  '+v8' is not a recognized feature for this target (ignoring feature)
  messages in aarch64 builds, they are shown in the log very often:

  $ grep -c 'is not a recognized feature for this target (ignoring feature)' cargo/1.49.0-r0/temp/log.do_compile.76960
  3824

  and sometimes the formatting looks strange as well e.g.:
  | ''+v8' is not a recognized feature for this target (ignoring feature)
  | +v8' is not a recognized feature for this target (ignoring feature)
  | '+v8' is not a recognized feature for this target (ignoring feature)
  | '+v8' is not a recognized feature for this target (ignoring feature)
  | '+v8' is not a recognized feature for this target (ignoring feature)
  | ''+v8+v8' is not a recognized feature for this target' is not a recognized feature for this target (ignoring feature)
  |  (ignoring feature)
  | '+v8' is not a recognized feature for this target (ignoring feature)
  | '+v8' is not a recognized feature for this target (ignoring feature)
  | '+v8' is not a recognized feature for this target (ignoring feature)
  | '+v8' is not a recognized feature for this target (ignoring feature)
  | ''''''+v8+v8+v8+v8+v8' is not a recognized feature for this target' is not a recognized feature for this target' is not a recognized feature for this target' is not a recognized feature for this target' is not a recognized feature for this target+v8 (ignoring feature)
  |  (ignoring feature)
  |  (ignoring feature)
  |  (ignoring feature)
  |  (ignoring feature)
  | ' is not a recognized feature for this target (ignoring feature)
  | '+v8' is not a recognized feature for this target (ignoring feature)
  | '+v8' is not a recognized feature for this target (ignoring feature)
  | ''+v8+v8' is not a recognized feature for this target' is not a recognized feature for this target (ignoring feature)
  |  (ignoring feature)

* not sure when it was changed (if 'v8' ever was valid feature for aarch64)
  but with 1.49.0 rustc (from gentoo) I see following cpu and feature options
  for arm and aarch64 (and v8 is listed only for arm, for aarch64 only v8.[123456]a)

  # rustc --target=arm-unknown-linux-gnueabihf --print target-cpus
  Available CPUs for this target:
    arm1020e
    arm1020t
    arm1022e
    arm10e
    arm10tdmi
    arm1136j-s
    arm1136jf-s
    arm1156t2-s
    arm1156t2f-s
    arm1176j-s
    arm1176jz-s
    arm1176jzf-s
    arm710t
    arm720t
    arm7tdmi
    arm7tdmi-s
    arm8
    arm810
    arm9
    arm920
    arm920t
    arm922t
    arm926ej-s
    arm940t
    arm946e-s
    arm966e-s
    arm968e-s
    arm9e
    arm9tdmi
    cortex-a12
    cortex-a15
    cortex-a17
    cortex-a32
    cortex-a35
    cortex-a5
    cortex-a53
    cortex-a55
    cortex-a57
    cortex-a7
    cortex-a72
    cortex-a73
    cortex-a75
    cortex-a76
    cortex-a76ae
    cortex-a77
    cortex-a78
    cortex-a8
    cortex-a9
    cortex-m0
    cortex-m0plus
    cortex-m1
    cortex-m23
    cortex-m3
    cortex-m33
    cortex-m35p
    cortex-m4
    cortex-m55
    cortex-m7
    cortex-r4
    cortex-r4f
    cortex-r5
    cortex-r52
    cortex-r7
    cortex-r8
    cortex-x1
    cyclone
    ep9312
    exynos-m3
    exynos-m4
    exynos-m5
    generic
    iwmmxt
    krait
    kryo
    mpcore
    mpcorenovfp
    neoverse-n1
    sc000
    sc300
    strongarm
    strongarm110
    strongarm1100
    strongarm1110
    swift
    xscale

  # rustc --target=aarch64-unknown-linux-gnu --print target-cpus
  Available CPUs for this target:
    a64fx
    apple-a10
    apple-a11
    apple-a12
    apple-a13
    apple-a7
    apple-a8
    apple-a9
    apple-latest
    apple-s4
    apple-s5
    carmel
    cortex-a34
    cortex-a35
    cortex-a53
    cortex-a55
    cortex-a57
    cortex-a65
    cortex-a65ae
    cortex-a72
    cortex-a73
    cortex-a75
    cortex-a76
    cortex-a76ae
    cortex-a77
    cortex-a78
    cortex-x1
    cyclone
    exynos-m3
    exynos-m4
    exynos-m5
    falkor
    generic
    kryo
    neoverse-e1
    neoverse-n1
    saphira
    thunderx
    thunderx2t99
    thunderx3t110
    thunderxt81
    thunderxt83
    thunderxt88
    tsv110

  # rustc --target=arm-unknown-linux-gnueabihf --print target-features
  Available features for this target:
    32bit                    - Prefer 32-bit Thumb instrs.
    8msecext                 - Enable support for ARMv8-M Security Extensions.
    a12                      - Cortex-A12 ARM processors.
    a15                      - Cortex-A15 ARM processors.
    a17                      - Cortex-A17 ARM processors.
    a32                      - Cortex-A32 ARM processors.
    a35                      - Cortex-A35 ARM processors.
    a5                       - Cortex-A5 ARM processors.
    a53                      - Cortex-A53 ARM processors.
    a55                      - Cortex-A55 ARM processors.
    a57                      - Cortex-A57 ARM processors.
    a7                       - Cortex-A7 ARM processors.
    a72                      - Cortex-A72 ARM processors.
    a73                      - Cortex-A73 ARM processors.
    a75                      - Cortex-A75 ARM processors.
    a76                      - Cortex-A76 ARM processors.
    a77                      - Cortex-A77 ARM processors.
    a8                       - Cortex-A8 ARM processors.
    a9                       - Cortex-A9 ARM processors.
    aclass                   - Is application profile ('A' series).
    acquire-release          - Has v8 acquire/release (lda/ldaex  etc) instructions.
    aes                      - Enable AES support.
    armv2                    - ARMv2 architecture.
    armv2a                   - ARMv2a architecture.
    armv3                    - ARMv3 architecture.
    armv3m                   - ARMv3m architecture.
    armv4                    - ARMv4 architecture.
    armv4t                   - ARMv4t architecture.
    armv5t                   - ARMv5t architecture.
    armv5te                  - ARMv5te architecture.
    armv5tej                 - ARMv5tej architecture.
    armv6                    - ARMv6 architecture.
    armv6-m                  - ARMv6m architecture.
    armv6j                   - ARMv7a architecture.
    armv6k                   - ARMv6k architecture.
    armv6kz                  - ARMv6kz architecture.
    armv6s-m                 - ARMv6sm architecture.
    armv6t2                  - ARMv6t2 architecture.
    armv7-a                  - ARMv7a architecture.
    armv7-m                  - ARMv7m architecture.
    armv7-r                  - ARMv7r architecture.
    armv7e-m                 - ARMv7em architecture.
    armv7k                   - ARMv7a architecture.
    armv7s                   - ARMv7a architecture.
    armv7ve                  - ARMv7ve architecture.
    armv8-a                  - ARMv8a architecture.
    armv8-m.base             - ARMv8mBaseline architecture.
    armv8-m.main             - ARMv8mMainline architecture.
    armv8-r                  - ARMv8r architecture.
    armv8.1-a                - ARMv81a architecture.
    armv8.1-m.main           - ARMv81mMainline architecture.
    armv8.2-a                - ARMv82a architecture.
    armv8.3-a                - ARMv83a architecture.
    armv8.4-a                - ARMv84a architecture.
    armv8.5-a                - ARMv85a architecture.
    armv8.6-a                - ARMv86a architecture.
    avoid-movs-shop          - Avoid movs instructions with shifter operand.
    avoid-partial-cpsr       - Avoid CPSR partial update for OOO execution.
    bf16                     - Enable support for BFloat16 instructions.
    cde                      - Support CDE instructions.
    cdecp0                   - Coprocessor 0 ISA is CDEv1.
    cdecp1                   - Coprocessor 1 ISA is CDEv1.
    cdecp2                   - Coprocessor 2 ISA is CDEv1.
    cdecp3                   - Coprocessor 3 ISA is CDEv1.
    cdecp4                   - Coprocessor 4 ISA is CDEv1.
    cdecp5                   - Coprocessor 5 ISA is CDEv1.
    cdecp6                   - Coprocessor 6 ISA is CDEv1.
    cdecp7                   - Coprocessor 7 ISA is CDEv1.
    cheap-predicable-cpsr    - Disable +1 predication cost for instructions updating CPSR.
    cortex-a78               - Cortex-A78 ARM processors.
    cortex-x1                - Cortex-X1 ARM processors.
    crc                      - Enable support for CRC instructions.
    crypto                   - Enable support for Cryptography extensions.
    d32                      - Extend FP to 32 double registers.
    db                       - Has data barrier (dmb/dsb) instructions.
    dfb                      - Has full data barrier (dfb) instruction.
    disable-postra-scheduler - Don't schedule again after register allocation.
    dont-widen-vmovs         - Don't widen VMOVS to VMOVD.
    dotprod                  - Enable support for dot product instructions.
    dsp                      - Supports DSP instructions in ARM and/or Thumb2.
    execute-only             - Enable the generation of execute only code..
    expand-fp-mlx            - Expand VFP/NEON MLA/MLS instructions.
    exynos                   - Samsung Exynos processors.
    fp-armv8                 - Enable ARMv8 FP.
    fp-armv8d16              - Enable ARMv8 FP with only 16 d-registers.
    fp-armv8d16sp            - Enable ARMv8 FP with only 16 d-registers and no double precision.
    fp-armv8sp               - Enable ARMv8 FP with no double precision.
    fp16                     - Enable half-precision floating point.
    fp16fml                  - Enable full half-precision floating point fml instructions.
    fp64                     - Floating point unit supports double precision.
    fpao                     - Enable fast computation of positive address offsets.
    fpregs                   - Enable FP registers.
    fpregs16                 - Enable 16-bit FP registers.
    fpregs64                 - Enable 64-bit FP registers.
    fullfp16                 - Enable full half-precision floating point.
    fuse-aes                 - CPU fuses AES crypto operations.
    fuse-literals            - CPU fuses literal generation operations.
    hwdiv                    - Enable divide instructions in Thumb.
    hwdiv-arm                - Enable divide instructions in ARM mode.
    i8mm                     - Enable Matrix Multiply Int8 Extension.
    iwmmxt                   - ARMv5te architecture.
    iwmmxt2                  - ARMv5te architecture.
    krait                    - Qualcomm Krait processors.
    kryo                     - Qualcomm Kryo processors.
    lob                      - Enable Low Overhead Branch extensions.
    long-calls               - Generate calls via indirect call instructions.
    loop-align               - Prefer 32-bit alignment for loops.
    m3                       - Cortex-M3 ARM processors.
    mclass                   - Is microcontroller profile ('M' series).
    mp                       - Supports Multiprocessing extension.
    muxed-units              - Has muxed AGU and NEON/FPU.
    mve                      - Support M-Class Vector Extension with integer ops.
    mve.fp                   - Support M-Class Vector Extension with integer and floating ops.
    mve1beat                 - Model MVE instructions as a 1 beat per tick architecture.
    mve2beat                 - Model MVE instructions as a 2 beats per tick architecture.
    mve4beat                 - Model MVE instructions as a 4 beats per tick architecture.
    nacl-trap                - NaCl trap.
    neon                     - Enable NEON instructions.
    neon-fpmovs              - Convert VMOVSR, VMOVRS, VMOVS to NEON.
    neonfp                   - Use NEON for single precision FP.
    no-branch-predictor      - Has no branch predictor.
    no-movt                  - Don't use movt/movw pairs for 32-bit imms.
    no-neg-immediates        - Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding..
    noarm                    - Does not support ARM mode execution.
    nonpipelined-vfp         - VFP instructions are not pipelined.
    perfmon                  - Enable support for Performance Monitor extensions.
    prefer-ishst             - Prefer ISHST barriers.
    prefer-vmovsr            - Prefer VMOVSR.
    prof-unpr                - Is profitable to unpredicate.
    r4                       - Cortex-R4 ARM processors.
    r5                       - Cortex-R5 ARM processors.
    r52                      - Cortex-R52 ARM processors.
    r7                       - Cortex-R7 ARM processors.
    ras                      - Enable Reliability, Availability and Serviceability extensions.
    rclass                   - Is realtime profile ('R' series).
    read-tp-hard             - Reading thread pointer from register.
    reserve-r9               - Reserve R9, making it unavailable as GPR.
    ret-addr-stack           - Has return address stack.
    sb                       - Enable v8.5a Speculation Barrier.
    sha2                     - Enable SHA1 and SHA256 support.
    slow-fp-brcc             - FP compare + branch is slow.
    slow-load-D-subreg       - Loading into D subregs is slow.
    slow-odd-reg             - VLDM/VSTM starting with an odd register is slow.
    slow-vdup32              - Has slow VDUP32 - prefer VMOV.
    slow-vgetlni32           - Has slow VGETLNi32 - prefer VMOV.
    slowfpvfmx               - Disable VFP / NEON FMA instructions.
    slowfpvmlx               - Disable VFP / NEON MAC instructions.
    soft-float               - Use software floating point features..
    splat-vfp-neon           - Splat register from VFP to NEON.
    strict-align             - Disallow all unaligned memory access.
    swift                    - Swift ARM processors.
    thumb-mode               - Thumb mode.
    thumb2                   - Enable Thumb2 instructions.
    trustzone                - Enable support for TrustZone security extensions.
    use-misched              - Use the MachineScheduler.
    v4t                      - Support ARM v4T instructions.
    v5t                      - Support ARM v5T instructions.
    v5te                     - Support ARM v5TE, v5TEj, and v5TExp instructions.
    v6                       - Support ARM v6 instructions.
    v6k                      - Support ARM v6k instructions.
    v6m                      - Support ARM v6M instructions.
    v6t2                     - Support ARM v6t2 instructions.
    v7                       - Support ARM v7 instructions.
    v7clrex                  - Has v7 clrex instruction.
    v8                       - Support ARM v8 instructions.
    v8.1a                    - Support ARM v8.1a instructions.
    v8.1m.main               - Support ARM v8-1M Mainline instructions.
    v8.2a                    - Support ARM v8.2a instructions.
    v8.3a                    - Support ARM v8.3a instructions.
    v8.4a                    - Support ARM v8.4a instructions.
    v8.5a                    - Support ARM v8.5a instructions.
    v8.6a                    - Support ARM v8.6a instructions.
    v8m                      - Support ARM v8M Baseline instructions.
    v8m.main                 - Support ARM v8M Mainline instructions.
    vfp2                     - Enable VFP2 instructions.
    vfp2sp                   - Enable VFP2 instructions with no double precision.
    vfp3                     - Enable VFP3 instructions.
    vfp3d16                  - Enable VFP3 instructions with only 16 d-registers.
    vfp3d16sp                - Enable VFP3 instructions with only 16 d-registers and no double precision.
    vfp3sp                   - Enable VFP3 instructions with no double precision.
    vfp4                     - Enable VFP4 instructions.
    vfp4d16                  - Enable VFP4 instructions with only 16 d-registers.
    vfp4d16sp                - Enable VFP4 instructions with only 16 d-registers and no double precision.
    vfp4sp                   - Enable VFP4 instructions with no double precision.
    virtualization           - Supports Virtualization extension.
    vldn-align               - Check for VLDn unaligned access.
    vmlx-forwarding          - Has multiplier accumulator forwarding.
    vmlx-hazards             - Has VMLx hazards.
    wide-stride-vfp          - Use a wide stride when allocating VFP registers.
    xscale                   - ARMv5te architecture.
    zcz                      - Has zero-cycle zeroing instructions.

  Rust-specific features:
    crt-static               - Enables libraries with C Run-time Libraries(CRT) to be statically linked.

  Use +feature to enable a feature, or -feature to disable it.
  For example, rustc -C -target-cpu=mycpu -C target-feature=+feature1,-feature2

  # rustc --target=aarch64-unknown-linux-gnu --print target-features
  Available features for this target:
    a35                                - Cortex-A35 ARM processors.
    a53                                - Cortex-A53 ARM processors.
    a55                                - Cortex-A55 ARM processors.
    a57                                - Cortex-A57 ARM processors.
    a64fx                              - Fujitsu A64FX processors.
    a65                                - Cortex-A65 ARM processors.
    a72                                - Cortex-A72 ARM processors.
    a73                                - Cortex-A73 ARM processors.
    a75                                - Cortex-A75 ARM processors.
    a76                                - Cortex-A76 ARM processors.
    a77                                - Cortex-A77 ARM processors.
    aes                                - Enable AES support.
    aggressive-fma                     - Enable Aggressive FMA for floating-point..
    alternate-sextload-cvt-f32-pattern - Use alternative pattern for sextload convert to f32.
    altnzcv                            - Enable alternative NZCV format for floating point comparisons.
    am                                 - Enable v8.4-A Activity Monitors extension.
    amvs                               - Enable v8.6-A Activity Monitors Virtualization support.
    apple-a10                          - Apple A10.
    apple-a11                          - Apple A11.
    apple-a12                          - Apple A12.
    apple-a13                          - Apple A13.
    apple-a7                           - Apple A7 (the CPU formerly known as Cyclone).
    arith-bcc-fusion                   - CPU fuses arithmetic+bcc operations.
    arith-cbz-fusion                   - CPU fuses arithmetic + cbz/cbnz operations.
    balance-fp-ops                     - balance mix of odd and even D-registers for fp multiply(-accumulate) ops.
    bf16                               - Enable BFloat16 Extension.
    bti                                - Enable Branch Target Identification.
    call-saved-x10                     - Make X10 callee saved..
    call-saved-x11                     - Make X11 callee saved..
    call-saved-x12                     - Make X12 callee saved..
    call-saved-x13                     - Make X13 callee saved..
    call-saved-x14                     - Make X14 callee saved..
    call-saved-x15                     - Make X15 callee saved..
    call-saved-x18                     - Make X18 callee saved..
    call-saved-x8                      - Make X8 callee saved..
    call-saved-x9                      - Make X9 callee saved..
    carmel                             - Nvidia Carmel processors.
    ccdp                               - Enable v8.5 Cache Clean to Point of Deep Persistence.
    ccidx                              - Enable v8.3-A Extend of the CCSIDR number of sets.
    ccpp                               - Enable v8.2 data Cache Clean to Point of Persistence.
    complxnum                          - Enable v8.3-A Floating-point complex number support.
    cortex-a78                         - Cortex-A78 ARM processors.
    cortex-x1                          - Cortex-X1 ARM processors.
    crc                                - Enable ARMv8 CRC-32 checksum instructions.
    crypto                             - Enable cryptographic instructions.
    custom-cheap-as-move               - Use custom handling of cheap instructions.
    disable-latency-sched-heuristic    - Disable latency scheduling heuristic.
    dit                                - Enable v8.4-A Data Independent Timing instructions.
    dotprod                            - Enable dot product support.
    ecv                                - Enable enhanced counter virtualization extension.
    ete                                - Enable Embedded Trace Extension.
    exynos-cheap-as-move               - Use Exynos specific handling of cheap instructions.
    exynosm3                           - Samsung Exynos-M3 processors.
    exynosm4                           - Samsung Exynos-M4 processors.
    f32mm                              - Enable Matrix Multiply FP32 Extension.
    f64mm                              - Enable Matrix Multiply FP64 Extension.
    falkor                             - Qualcomm Falkor processors.
    fgt                                - Enable fine grained virtualization traps extension.
    fmi                                - Enable v8.4-A Flag Manipulation Instructions.
    force-32bit-jump-tables            - Force jump table entries to be 32-bits wide except at MinSize.
    fp-armv8                           - Enable ARMv8 FP.
    fp16fml                            - Enable FP16 FML instructions.
    fptoint                            - Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int.
    fullfp16                           - Full FP16.
    fuse-address                       - CPU fuses address generation and memory operations.
    fuse-aes                           - CPU fuses AES crypto operations.
    fuse-arith-logic                   - CPU fuses arithmetic and logic operations.
    fuse-crypto-eor                    - CPU fuses AES/PMULL and EOR operations.
    fuse-csel                          - CPU fuses conditional select operations.
    fuse-literals                      - CPU fuses literal generation operations.
    harden-sls-blr                     - Harden against straight line speculation across BLR instructions.
    harden-sls-retbr                   - Harden against straight line speculation across RET and BR instructions.
    i8mm                               - Enable Matrix Multiply Int8 Extension.
    jsconv                             - Enable v8.3-A JavaScript FP conversion instructions.
    kryo                               - Qualcomm Kryo processors.
    lor                                - Enables ARM v8.1 Limited Ordering Regions extension.
    lse                                - Enable ARMv8.1 Large System Extension (LSE) atomic instructions.
    lsl-fast                           - CPU has a fastpath logical shift of up to 3 places.
    mpam                               - Enable v8.4-A Memory system Partitioning and Monitoring extension.
    mte                                - Enable Memory Tagging Extension.
    neon                               - Enable Advanced SIMD instructions.
    neoversee1                         - Neoverse E1 ARM processors.
    neoversen1                         - Neoverse N1 ARM processors.
    no-neg-immediates                  - Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding..
    nv                                 - Enable v8.4-A Nested Virtualization Enchancement.
    pa                                 - Enable v8.3-A Pointer Authentication extension.
    pan                                - Enables ARM v8.1 Privileged Access-Never extension.
    pan-rwv                            - Enable v8.2 PAN s1e1R and s1e1W Variants.
    perfmon                            - Enable ARMv8 PMUv3 Performance Monitors extension.
    pmu                                - Enable v8.4-A PMU extension.
    predictable-select-expensive       - Prefer likely predicted branches over selects.
    predres                            - Enable v8.5a execution and data prediction invalidation instructions.
    rand                               - Enable Random Number generation instructions.
    ras                                - Enable ARMv8 Reliability, Availability and Serviceability Extensions.
    rasv8_4                            - Enable v8.4-A Reliability, Availability and Serviceability extension.
    rcpc                               - Enable support for RCPC extension.
    rcpc-immo                          - Enable v8.4-A RCPC instructions with Immediate Offsets.
    rdm                                - Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions.
    reserve-x1                         - Reserve X1, making it unavailable as a GPR.
    reserve-x10                        - Reserve X10, making it unavailable as a GPR.
    reserve-x11                        - Reserve X11, making it unavailable as a GPR.
    reserve-x12                        - Reserve X12, making it unavailable as a GPR.
    reserve-x13                        - Reserve X13, making it unavailable as a GPR.
    reserve-x14                        - Reserve X14, making it unavailable as a GPR.
    reserve-x15                        - Reserve X15, making it unavailable as a GPR.
    reserve-x18                        - Reserve X18, making it unavailable as a GPR.
    reserve-x2                         - Reserve X2, making it unavailable as a GPR.
    reserve-x20                        - Reserve X20, making it unavailable as a GPR.
    reserve-x21                        - Reserve X21, making it unavailable as a GPR.
    reserve-x22                        - Reserve X22, making it unavailable as a GPR.
    reserve-x23                        - Reserve X23, making it unavailable as a GPR.
    reserve-x24                        - Reserve X24, making it unavailable as a GPR.
    reserve-x25                        - Reserve X25, making it unavailable as a GPR.
    reserve-x26                        - Reserve X26, making it unavailable as a GPR.
    reserve-x27                        - Reserve X27, making it unavailable as a GPR.
    reserve-x28                        - Reserve X28, making it unavailable as a GPR.
    reserve-x3                         - Reserve X3, making it unavailable as a GPR.
    reserve-x30                        - Reserve X30, making it unavailable as a GPR.
    reserve-x4                         - Reserve X4, making it unavailable as a GPR.
    reserve-x5                         - Reserve X5, making it unavailable as a GPR.
    reserve-x6                         - Reserve X6, making it unavailable as a GPR.
    reserve-x7                         - Reserve X7, making it unavailable as a GPR.
    reserve-x9                         - Reserve X9, making it unavailable as a GPR.
    saphira                            - Qualcomm Saphira processors.
    sb                                 - Enable v8.5 Speculation Barrier.
    sel2                               - Enable v8.4-A Secure Exception Level 2 extension.
    sha2                               - Enable SHA1 and SHA256 support.
    sha3                               - Enable SHA512 and SHA3 support.
    slow-misaligned-128store           - Misaligned 128 bit stores are slow.
    slow-paired-128                    - Paired 128 bit loads and stores are slow.
    slow-strqro-store                  - STR of Q register with register offset is slow.
    sm4                                - Enable SM3 and SM4 support.
    spe                                - Enable Statistical Profiling extension.
    specrestrict                       - Enable architectural speculation restriction.
    ssbs                               - Enable Speculative Store Bypass Safe bit.
    strict-align                       - Disallow all unaligned memory access.
    sve                                - Enable Scalable Vector Extension (SVE) instructions.
    sve2                               - Enable Scalable Vector Extension 2 (SVE2) instructions.
    sve2-aes                           - Enable AES SVE2 instructions.
    sve2-bitperm                       - Enable bit permutation SVE2 instructions.
    sve2-sha3                          - Enable SHA3 SVE2 instructions.
    sve2-sm4                           - Enable SM4 SVE2 instructions.
    tagged-globals                     - Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits.
    thunderx                           - Cavium ThunderX processors.
    thunderx2t99                       - Cavium ThunderX2 processors.
    thunderx3t110                      - Marvell ThunderX3 processors.
    thunderxt81                        - Cavium ThunderX processors.
    thunderxt83                        - Cavium ThunderX processors.
    thunderxt88                        - Cavium ThunderX processors.
    tlb-rmi                            - Enable v8.4-A TLB Range and Maintenance Instructions.
    tme                                - Enable Transactional Memory Extension.
    tpidr-el1                          - Permit use of TPIDR_EL1 for the TLS base.
    tpidr-el2                          - Permit use of TPIDR_EL2 for the TLS base.
    tpidr-el3                          - Permit use of TPIDR_EL3 for the TLS base.
    tracev8.4                          - Enable v8.4-A Trace extension.
    trbe                               - Enable Trace Buffer Extension.
    tsv110                             - HiSilicon TS-V110 processors.
    uaops                              - Enable v8.2 UAO PState.
    use-aa                             - Use alias analysis during codegen.
    use-experimental-zeroing-pseudos   - Hint to the compiler that the MOVPRFX instruction is merged with destructive operations.
    use-postra-scheduler               - Schedule again after register allocation.
    use-reciprocal-square-root         - Use the reciprocal square root approximation.
    v8.1a                              - Support ARM v8.1a instructions.
    v8.2a                              - Support ARM v8.2a instructions.
    v8.3a                              - Support ARM v8.3a instructions.
    v8.4a                              - Support ARM v8.4a instructions.
    v8.5a                              - Support ARM v8.5a instructions.
    v8.6a                              - Support ARM v8.6a instructions.
    vh                                 - Enables ARM v8.1 Virtual Host extension.
    zcm                                - Has zero-cycle register moves.
    zcz                                - Has zero-cycle zeroing instructions.
    zcz-fp                             - Has zero-cycle zeroing instructions for FP registers.
    zcz-fp-workaround                  - The zero-cycle floating-point zeroing instruction has a bug.
    zcz-gp                             - Has zero-cycle zeroing instructions for generic registers.

  Rust-specific features:
    crt-static                         - Enables libraries with C Run-time Libraries(CRT) to be statically linked.

  Use +feature to enable a feature, or -feature to disable it.
  For example, rustc -C -target-cpu=mycpu -C target-feature=+feature1,-feature2

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-08 17:04:11 +01:00
Martin Jansa
71538c8762 rust_versions.inc: switch the default version to 1.49.0
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-08 17:04:06 +01:00
Martin Jansa
c976184935 {cargo,rust}-1.49.0: simplify as in https://github.com/meta-rust/meta-rust/pull/299
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-08 17:04:06 +01:00
Cody Schafer
d15e66ae93 Merge pull request #303 from janderholm/nativebuilds
Fix *-native cargo builds
2021-02-08 10:14:12 -05:00
Cody Schafer
2c34da11f0 Merge pull request #293 from danc86/add-rust-1.49
add rust 1.49.0
2021-02-08 10:10:26 -05:00
Cody Schafer
dd7aa2e952 Merge pull request #300 from shr-project/jansa/lic
Few more cleanups
2021-02-08 10:09:34 -05:00
Johan Anderholm
0025cebb12 Fix *-native cargo builds
Normally all *-native packages needs to depend on cargo-native in order
to be able to use cargo. When building cargo-native however, this is not
available and we use a snapshot.

Fixes #302.
2021-02-08 16:04:39 +01:00
Martin Jansa
3ab7542844 rust-source, rust-snaphost: drop md5sums
* for consistency as 1.43.0 and 1.47.0 already use only sha256sum

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-08 01:11:13 +01:00
Martin Jansa
b163a89399 rust-source, rust-snapshot: simplify as well
* move common stuff from rust-source to rust.inc and from rust-snapshot to rust-target.inc

* 1.34.2 checksums were changed because unified SRC_URI is using tar.xz
  for this version as well (instead of tar.gz used before here)

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-08 01:09:52 +01:00
Dan Callaghan
0ee328aa26 add rust 1.49.0
Now it seems `./x.py install` is the only way to assemble a fully
working stage 2 cross-built compiler. See rust-lang/rust#81702.
2021-02-08 08:04:30 +10:00
Cody Schafer
c90c9b071a Merge pull request #299 from shr-project/jansa/lic
Further simplify LIC_FILES_CHKSUM
2021-02-07 14:32:55 -05:00
Martin Jansa
3e73030c51 rust-target.inc: add new include file to simplify all rust_*.bb
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-07 19:50:58 +01:00
Martin Jansa
9c0a1059be rust_versions.inc: add include for easy switching between versions
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-07 19:36:00 +01:00
Martin Jansa
a31a4070d3 cargo: move LIC_FILES_CHKSUM from cargo_*.bb to cargo.inc where LICENSE is set
* only the oldest 1.34.2 is the exception with different value, so
  stop duplicating it

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-07 19:23:09 +01:00
Martin Jansa
1d64f9075a rust: move LIC_FILES_CHKSUM from rust-source-*.inc to rust.inc where LICENSE is set
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-07 19:18:00 +01:00
Cody Schafer
433b7214ad Merge pull request #297 from shr-project/jansa/lic
Fix https://github.com/meta-rust/meta-rust/pull/289
2021-02-07 13:14:42 -05:00
Martin Jansa
80c30c3017 rust-llvm-ncsa.inc: reorder to actually set LICENSE and LIC_FILES_CHKSUM
* rust-llvm.inc sets LICENSE and corresponding LIC_FILES_CHKSUM
  for Apache-2.0-with-LLVM-exception, but the recipes which include
  rust-llvm-ncsa.inc need to change it to NCSA.

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-07 19:03:28 +01:00
Martin Jansa
1cb40bd3c2 Revert "rust-llvm: Use early variable assignment for the license checksum in rust-llvm.inc"
This reverts commit 5dda6c427a.

This breaks rust-llvm builds with:
ERROR: QA Issue: rust-llvm-native: LIC_FILES_CHKSUM points to an invalid file: TOPDIR/BUILD/work/x86_64-linux/rust-llvm-native/1.47.0-r0/rustc-1.47.0-src/src/llvm-project/llvm/COPYRIGHT [license-checksum]

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2021-02-07 19:03:28 +01:00
Cody Schafer
805503686f Merge pull request #289 from floion/correct_license_file_assignment
rust-llvm: Use early variable assignment for the license checksum in …
2021-02-07 00:30:47 -05:00
Cody Schafer
a6c629733c Merge pull request #290 from YoeDistro/yoe/mut
cargo: Mark the cargo-native dependency specific to target
2021-02-07 00:28:51 -05:00
Cody Schafer
1c18023894 Merge pull request #295 from danc86/fix-lto
libstd-rs: embed bitcode for LTO
2021-02-07 00:27:42 -05:00
Dan Callaghan
d5ab20d23b rust-hello-world: enable LTO in the build
If the libstd-rs recipe is not correctly embedding LVM bitcode in its
output, then it can produce a toolchain that appears to work until you
try building a project that requests LTO:

    error: failed to get bitcode from object file for LTO (Bitcode section not found in object file)

Enable LTO for rust-hello-world to give us an easy watch to catch such
problems.
2021-02-05 11:41:47 +10:00
Dan Callaghan
b7eacc0996 libstd-rs: embed bitcode for LTO
Fixes #294.
2021-02-05 11:41:47 +10:00
Khem Raj
1936904ad3 cargo: Mark the cargo-native dependency specific to target
Fixes dependency loop

These are usually caused by circular dependencies and any circular dependency chains found will be printed below. Increase the debug level to see a list of unbuildable tasks.

Identifying dependency loops (this may take a short while)...

ERROR:
Dependency loop #1 found:
  Task virtual:native:/mnt/b/yoe/master/sources/meta-rust/recipes-devtools/cargo/cargo_1.47.0.bb:do_compile (dependent Tasks ['cargo_1.47.0.bb:do_configure'])
  Task virtual:native:/mnt/b/yoe/master/sources/meta-rust/recipes-devtools/cargo/cargo_1.47.0.bb:do_install (dependent Tasks ['cargo_1.47.0.bb:do_compile'])
  Task virtual:native:/mnt/b/yoe/master/sources/meta-rust/recipes-devtools/cargo/cargo_1.47.0.bb:do_populate_sysroot (dependent Tasks ['cargo_1.47.0.bb:do_install'])
  Task virtual:native:/mnt/b/yoe/master/sources/meta-rust/recipes-devtools/cargo/cargo_1.47.0.bb:do_prepare_recipe_sysroot (dependent Tasks ['cargo_1.47.0.bb:do_populate_sysroot', 'openssl_1.1.1i.bb:do_populate_sysroot', 'curl_7.74.0.bb:do_populate_sysroot', 'rust_1.47.0.bb:do_populate_sysroot', 'zlib_1.2.11.bb:do_populate_sysroot', 'ca-certificates_20210119.bb:do_populate_sysroot', 'libssh2_1.9.0.bb:do_populate_sysroot', 'cargo_1.47.0.bb:do_fetch'])
  Task virtual:native:/mnt/b/yoe/master/sources/meta-rust/recipes-devtools/cargo/cargo_1.47.0.bb:do_configure (dependent Tasks ['cargo_1.47.0.bb:do_prepare_recipe_sysroot', 'cargo_1.47.0.bb:do_patch', 'cargo_1.47.0.bb:do_rust_create_wrappers', 'cargo_1.47.0.bb:do_cargo_setup_snapshot'])

ERROR: Command execution failed: 1

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-01-29 10:18:30 -08:00
Florin Sarbu
5dda6c427a rust-llvm: Use early variable assignment for the license checksum in rust-llvm.inc
Because rust-llvm-ncsa.inc requires rust-llvm.inc we do not want that
the latter overrides the license checksum set in the former.

Signed-off-by: Florin Sarbu <florin@balena.io>
2021-01-28 10:36:54 +01:00
Steven Walter
c72b2dda3a Merge pull request #288 from YoeDistro/yoe/mut
Add riscv32/riscv64 support
2021-01-12 10:09:33 -05:00
Khem Raj
47de35e153 libstd-rs: Remove libunwind on riscv
riscv port of libunwind is not available yet

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-01-12 00:32:38 -08:00
Khem Raj
e2979482dc rust: Add riscv32/riscv64 support
Set the cpu, features, and abi correctly

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-01-12 00:31:16 -08:00
Khem Raj
a679b6f4c2 rust: Build rust backend
In llvm11 we have both riscv32 or riscv64 backends so enable them

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-01-12 00:30:18 -08:00
Steven Walter
8da0936aa8 Merge pull request #287 from YoeDistro/yoe/mut
rust: Correct the data layout for riscv32
2021-01-09 20:10:53 -05:00
Khem Raj
a59ddd90d2 rust: Correct the data layout for riscv32
This now matches with llvm target backend in llvm 11

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2021-01-09 12:53:13 -08:00
Steven Walter
fa5cdb0de4 Merge pull request #286 from janderholm/buildseparation
Build separation
2021-01-08 16:43:31 -05:00
Johan Anderholm
e5ee880894 cargo_common: Make output more readable 2021-01-08 16:48:36 +01:00
Johan Anderholm
a673320995 cargo: Enable build separation
Place generated artifacts in the directory suggested by bitbake (${B})
instead of directly in the source directory. This has multiple
advantages such as the ability to share source directory between
multiple machine types without risking cross contamination.
2021-01-08 16:47:40 +01:00
Steven Walter
2a4bb8966a Merge pull request #285 from janderholm/armv7
Use proper llvm-target for armv7
2021-01-08 08:57:56 -05:00
Johan Anderholm
cb4f8294d4 Use proper llvm-target for armv7
arm-unknown-linux-gnueabihf was incorrectly used as llvm-target instead
of armv7-unknown-linux-gnueabihf when building for some Cortex A SoCs.
This may cause segfaults in non trivial rust applications on ARMv7
when e.g. +a7 is passed to LLVM. It seems to differ between different
versions of the compiler and LLVM versions.
2021-01-08 10:37:34 +01:00
Steven Walter
7ff669d8ce Merge pull request #284 from danc86/add-rust-1.47
add rust 1.47
2020-12-22 13:26:33 -05:00
Steven Walter
25a20987fb Merge pull request #283 from danc86/add-cargo-1.46
cargo: add missing version 1.46.0
2020-12-22 13:25:04 -05:00
Dan Callaghan
4b151fa804 add rust 1.47.0 2020-12-18 21:05:13 +10:00
Dan Callaghan
8cfc3c9826 clean up some common definitions across rust versions
These bits and pieces had evidently been copy-pasted forward into each
new recipe version, but now they are all identical and can be tidied up.
2020-12-18 21:05:06 +10:00
Dan Callaghan
aec6519e23 cargo: add missing version 1.46.0
Rust version 1.46.0 was added to the layer a while back, but the
corresponding cargo recipe seems to have been missed.
2020-12-18 21:04:02 +10:00
Tyler Hall
f56fd4ec68 Merge pull request #281 from YoeDistro/yoe/mut
rust-bin.bbclass: Do not use append and += together
2020-11-14 16:44:44 -05:00
Khem Raj
7afffa083c rust-bin.bbclass: Do not use append and += together
this is undefined behavior in bitbake, prepend space instead

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2020-11-14 08:56:18 -08:00
Steven Walter
53bfa32489 Merge pull request #280 from YoeDistro/yoe/mut
layer.conf: Add gatesgarth to LAYERSERIES_COMPAT
2020-10-15 20:05:42 -04:00
Khem Raj
2822b50c04 layer.conf: Add gatesgarth to LAYERSERIES_COMPAT
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2020-10-15 09:28:23 -07:00
Steven Walter
2e085dda43 Merge pull request #279 from ColinFinck/fix/cargo-libgit2-pkgconfig
Disable LIBGIT2_SYS_USE_PKG_CONFIG due to incompatibility with libgit2 0.28.x
2020-10-09 16:23:57 -04:00
Colin Finck
8a44baed44 Disable LIBGIT2_SYS_USE_PKG_CONFIG due to incompatibility with 0.28.x
libgit2 0.28.x is shipped by latest Yocto Dunfell.
According to https://github.com/rust-lang/git2-rs/issues/458#issuecomment-522567539, there are no compatibility guarantees between libgit2-sys and arbitrary system libgit2 versions, so better keep this turned off.

Fixes "invalid version 3 on git_proxy_options" during build.

Further references:
* https://github.com/rust-lang/git2-rs/issues/458
* https://bugs.gentoo.org/707746#c1
2020-10-06 17:35:54 +02:00
Steven Walter
318fb46863 Merge pull request #278 from srwalter/rust-1.46
Add rust 1.46.0
2020-09-02 12:54:14 -04:00
Steven Walter
b7f9c1d0d7 Add rust 1.46.0 2020-08-31 14:47:11 -04:00
Steven Walter
7f235b6f89 Merge pull request #277 from shr-project/jansa/parallel
rust: use PARALLEL_MAKE instead of BB_NUMBER_THREADS
2020-05-28 13:56:20 -04:00
Martin Jansa
647b976da2 rust: use PARALLEL_MAKE instead of BB_NUMBER_THREADS
* BB_NUMBER_THREADS is number of bitbake tasks running in
  parallel, not parallelization inside individual tasks
* use oe.utils.parallel_make_argument to make sure it
  works even when people add e.g. "-l 10" in PARALLEL_MAKE
* with the recent improvements for rust-native build time, I wanted
  to rerun some build time tests from
  https://github.com/shr-project/test-oe-build-time
  here are the results on AMD Threadripper 3970x with 128GB ram:

  BB is BB_NUMBER_THREADS
  PM is PARALLEL_MAKE

  TIME   BB        PM   Description
  20:50   *         *   zeus based build with 1.37 rust (BB/PM has no impact)
  14:50   8  32,48,64   dunfell, 1.43 as in d2ff87ca55 (PM has no impact, because bootstrap uses BB)
   9:50   8  32,48,64   dunfell, 1.43 with this patch applied, it doesn't get faster after some threashold of PM
  13:32   8        64   dunfell, 1.43 with this patch applied and "rust.inc: cut build time in half" (afcb58e5b9) reverted
  13:30   8        64   dunfell, 1.43 with "rust.inc: cut build time in half" (afcb58e5b9) as well as "rust.inc: run bootstrap.py in parallel" (40a6bd8a8d) reverted to see if 1.43 builds faster without any meta-rust improvements compared to 1.37
  94:47   1        64   dunfell, 1.43 as in d2ff87ca55 (either something went wrong or explicit "-j 1" disables some parallelism done by default already
  13:40   *         *   zeus based build with 1.39 rust (BB/PM has no impact)
  10:50   8        64   zeus based build with 1.39 rust as proposed in jansa/new-zeus-branch
  80:51   8         1   zeus based build with 1.39 rust as proposed in jansa/new-zeus-branch with "-j 1" PARALLEL_MAKE

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2020-05-28 18:36:04 +02:00
Steven Walter
d2ff87ca55 Merge pull request #276 from tylerwhall/bb-num-threads
rust.inc: whitelist BB_NUMBER_THREADS in do_compile
2020-05-18 23:03:57 -04:00
Tyler Hall
8d3f79f217 rust.inc: whitelist BB_NUMBER_THREADS in do_compile
d55cce6b8b6b510bf4905f19b949f7995af57a4d added a use of
BB_NUMBER_THREADS which is not whitelisted in Poky. This caused machines
with a different number of CPUs to have different sstate for
rust-native.
2020-05-18 19:10:04 -04:00
Steven Walter
be88d857a6 Merge pull request #275 from alistair23/alistair/rust-update
Bump to Rust version 1.43
2020-05-17 20:04:00 -04:00
Alistair Francis
2c7321dac6 Bump to Rust version 1.43
Signed-off-by: Alistair Francis <alistair@alistair23.me>
2020-05-13 22:52:39 -07:00
Steven Walter
b84c61eb85 Revert "cargo: fix progress output"
This reverts commit dd0fc89389.
2020-05-12 10:22:06 -04:00
Steven Walter
dd0fc89389 cargo: fix progress output
This patch got dropped from the new cargo version
2020-05-11 22:18:35 -04:00
Steven Walter
afcb58e5b9 rust.inc: cut build time in half
Don't tar everything up just to untar it again.  This literally takes
longer than actually building the rust compiler
2020-05-11 22:18:35 -04:00
Steven Walter
40a6bd8a8d rust.inc: run bootstrap.py in parallel
Allow bootstrap.py to use as many cores as bitbake normally uses
2020-05-11 22:18:35 -04:00
Steven Walter
c023edd985 rust.inc: make max-atomic-width an integer
As a string this was actually being ignored.  It mostly didn't matter
because max-atomic-width falls back to target-pointer-size, and they are
usually the same.  However, at least on i586, 64-bit atomics are
supported with a 32-bit pointer size.
2020-05-11 22:18:35 -04:00
Steven Walter
6ed6a09a99 Merge pull request #273 from meta-rust/common-rust-native
rust-native shouldn't depend on TARGET variables
2020-05-11 18:27:34 -04:00
Steven Walter
3b783652cc rust-native shouldn't depend on TARGET variables
The whole point of rust-native is that it should be common for all
targets.  If we reference TARGET variables during the build of
rust-native, then bitbake will build a different version for different
TARGETS.
2020-05-11 16:26:48 -04:00
Steven Walter
a012a1027d Merge pull request #270 from YoeDistro/yoe/mut
rustfmt: Upgrade to 1.4.2
2020-04-06 18:01:13 -04:00
Khem Raj
8ef8b39681 rustfmt: Upgrade to 1.4.2
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2020-04-02 08:58:50 -07:00
Steven Walter
646fecee8a Merge pull request #268 from YoeDistro/yoe/mut
layer.conf: Mark it 3.1 release compatible
2020-03-24 10:30:47 -04:00
Khem Raj
e4d25b9808 layer.conf: Mark it 3.1 release compatible
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2020-03-24 07:18:22 -07:00
Steven Walter
1a3625364c Merge pull request #267 from anguslees/patch-1
Avoid extra sh process from shell wrapper
2020-03-17 11:09:28 -04:00
Angus Lees
ea97549161 Avoid extra sh process from shell wrapper
`exec` from shell wrapper to avoid persistent sh process
2020-03-15 12:23:52 +11:00
Steven Walter
d0dc19aa78 Merge pull request #263 from ColinFinck/update-to-rust-1.41.0
Update to Rust 1.41.0
2020-03-06 11:36:59 -05:00
Colin Finck
4a763a2301 Update 0001-Disable-http2.patch for cargo 1.41.0 2020-02-11 17:11:14 +01:00
Colin Finck
5c7f51b6ad Update to Rust 1.41.0 2020-02-10 11:17:51 +01:00
Steven Walter
d8d77be129 Merge pull request #259 from ColinFinck/update-to-rust-1.40.0
Update to Rust 1.40.0
2020-02-08 12:25:27 -05:00
Steven Walter
dbf68d40b3 Merge pull request #257 from alistair23/alistair/python3-update
rust: Use Python3 native for build
2020-02-08 11:36:06 -05:00
Steven Walter
a754e6c5d6 Merge pull request #260 from akiernan/us-cargo-fuzz
cargo: Refresh http2 disable patch
2020-02-08 11:33:40 -05:00
Alex Kiernan
837b63596d cargo: Refresh http2 disable patch
Fixes:

  WARNING: Fuzz detected:

  checking file Cargo.toml
  Hunk #1 succeeded at 24 with fuzz 1.

Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
2020-01-12 20:38:18 +00:00
Colin Finck
2668f6afd3 Update 0001-Disable-http2.patch for Cargo shipped with Rust 1.40.0 2020-01-06 10:55:39 +01:00
Colin Finck
e5c2a4085f Update to Rust and Cargo 1.40.0. 2020-01-06 10:03:13 +01:00
Alistair Francis
72aa4ef3ab rust: Use Python3 native for build
Use Python3 as the native Python instead of Python2.

Signed-off-by: Alistair Francis <alistair@alistair23.me>
2019-12-26 18:46:53 -08:00
Steven Walter
0f950f5e33 Merge pull request #255 from rettichschnidi/update-to-rust-1.39.0
Update to Rust 1.39.0
2019-12-15 18:23:50 -05:00
Steven Walter
10fb698a79 Merge pull request #242 from ZubairLK/zlk/improve_tune_feature_parsing
rust: Improve TUNE_FEATURE parsing
2019-12-15 14:03:48 -05:00
Zubair Lutfullah Kakakhel
186ec59085 rust: Improve TUNE_FEATURE parsing
Since ac83d22eb5

The armvX arch definition is not present in TUNE_FEATURES but is now in
MACHINEOVERRIDES. Improve parsing so that MACHINEOVERRIDES is also checked.

Fixes #240

Tested on raspberrypi3 with balenaOS which uses rust.

Signed-off-by: Zubair Lutfullah Kakakhel <zubair@balena.io>
2019-11-12 10:39:41 +00:00
Reto Schneider
71895ec5a4 Update to Rust and Cargo 1.39.0 2019-11-08 18:00:16 +01:00
Steven Walter
5cda04c7c2 Merge pull request #253 from YoeDistro/yoe/mut
layer.conf: Mark compatible with zeus release
2019-10-09 16:29:31 -04:00
Khem Raj
5d1ada0c97 layer.conf: Mark compatible with zeus release
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2019-10-08 15:46:24 -07:00
Steven Walter
11aed43748 cargo-1.37.0: fix patch fuzz
Regenerate context lines with devtool.  This fixes a patch-fuzz warning
2019-08-31 13:58:55 -04:00
Steven Walter
1cb2ad5543 Merge pull request #249 from ColinFinck/update-to-rust-1.37.0
Update to Rust and Cargo 1.37.0.
2019-08-31 13:58:45 -04:00
Steven Walter
0b5ea8beb0 Merge pull request #247 from janderholm/master
Set cainfo to certificates in sysroot-native
2019-08-31 13:12:59 -04:00
Steven Walter
412987892c Merge pull request #248 from alistair23/alistair/riscv32
rust-cross: Add riscv32 data layout information
2019-08-31 12:40:03 -04:00
Colin Finck
afccedc43c Update to Rust and Cargo 1.37.0. 2019-08-29 11:31:28 +02:00
Alistair Francis
150b1591d6 rust-cross: Add riscv32 data layout information
This was generated with:
    clang --target=riscv32  -emit-llvm -S -x c /dev/null -o aaa |  cat aaa | grep "target datalayout"

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
2019-08-23 15:57:29 -07:00
Johan Anderholm
2c4a666b68 Set cainfo to certificates in sysroot-native
This solves SSL CA cert errors.

When a sstate-cache is used sometimes the certificates are not available
at the compile time path anymore. The required certificates are
available in sysroot-native and can be selected with the cainfo
configuration.
2019-08-06 12:16:10 +00:00
Steven Walter
c5ff05d1e9 Merge pull request #245 from janderholm/master
Update to rust and cargo version 1.36.0
2019-08-02 18:56:06 -04:00
Johan Anderholm
2f323e1e9e Update to rust and cargo version 1.36.0 2019-08-02 09:35:31 +00:00
Steven Walter
9487b089ea Merge pull request #243 from akiernan/checksums-and-fuzz
Fix checksums and patch fuzz from 1.34.2
2019-06-09 10:31:46 +08:00
Alex Kiernan
bcbe02f6ac cargo: Fix patch fuzz
Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
2019-06-07 12:10:04 +01:00
Alex Kiernan
2afc6ecef2 rust-llvm: Update LICENSE.TXT checksum
License-Update: copyright years refreshed
Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
2019-06-07 12:10:04 +01:00
Alex Kiernan
4ca5b781dc rust-source: Update COPYRIGHT checksum
License-Update: path names updated (src/llvm => src/llvm-project)
Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
2019-06-07 12:10:04 +01:00
Steven Walter
164bc5f20a Merge pull request #241 from webdino/update-to-1.34.2
Update to rust version 1.34.2
2019-06-06 21:24:11 +08:00
Takuro Ashie
03f492ab35 Update to rust version 1.34.2 2019-06-06 17:56:39 +09:00
Tyler Hall
84710b341b Merge pull request #239 from agherzan/ag/patchfix
cargo: Refresh patch to avoid build warning
2019-04-24 13:32:56 -04:00
Andrei Gherzan
4a88247046 cargo: Refresh patch to avoid build warning
Signed-off-by: Andrei Gherzan <andrei@balena.io>
2019-04-17 16:44:58 +01:00
Derek Straka
0d03c206c3 Merge pull request #238 from YoeDistro/yoe/mut
layer.conf: Add warrior to compatible release series
2019-04-04 21:17:14 -05:00
Khem Raj
9a077b21d0 layer.conf: Add warrior to compatible release series
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2019-04-01 19:04:45 -07:00
Steven Walter
0621067c56 Merge pull request #235 from janderholm/update-to-1.33.0
Update to rust version 1.33.0
2019-03-05 10:05:34 -05:00
Johan Anderholm
723e24bd9d Update to rust version 1.33.0 2019-03-02 07:28:09 +00:00
Steven Walter
f2f17c58b0 Merge pull request #234 from janderholm/master
Correct proxy variable
2019-02-28 11:39:42 -05:00
Johan Anderholm
68046d42b8 Correct proxy variable 2019-02-19 14:52:16 +00:00
Steven Walter
f4517aaba8 Merge pull request #232 from janderholm/update-to-1.32.0
Update to 1.32.0
2019-02-15 19:57:29 -05:00
Johan Anderholm
fa0aebc070 Disable http2 in cargo
Since 1.31.0 cargo requires curl to support http2. Enabling http2 in
curl results in a dependency loop. This commit disables the use of
multiplexing and http2.
2019-02-15 12:34:37 +00:00
Johan Anderholm
b3d1b589ee Update to rust version 1.32.0 2019-02-14 15:29:17 +00:00
Johan Anderholm
cb383b0d90 Remove rust 1.27.1 2019-02-14 15:29:17 +00:00
Johan Anderholm
9952633163 Use cargo version shipped with rust source
The source of cargo used in a release is shipped with the rust source.
Use this instead of the source from github to make sure cargo and rust
are always kept in sync.

This also makes updating rust version a bit easier.
2019-02-14 15:29:17 +00:00
Steven Walter
d537c62b4e Merge pull request #233 from YoeDistro/yoe/mut
rust-llvm: Update the sysroot patch to latest from meta-clang
2019-02-13 16:55:10 -05:00
Khem Raj
16d015a481 rust-llvm: Update the sysroot patch to latest from meta-clang
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2019-02-13 13:24:23 -08:00
Steven Walter
8b7d6201b6 Merge pull request #228 from dandedrick/thumb-fix
rust: don't configure thumb if not in TUNE_FEATURES
2019-01-16 11:48:54 -05:00
Dan Dedrick
e7c10de555 rust: don't configure thumb if not in TUNE_FEATURES
ARM_INSTRUCTION_SET, and therefore ARM_THUMB_OPT also, expect to only be
used in conjunction with the thumb TUNE_FEATURES. So thumb-mode should only
be added if thumb is in TUNE_FEATURES and ARM_THUMB_OPT is thumb.

The commit https://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/meta/conf/machine/include/arm/arch-armv7a.inc?id=3e7d26e31a724009e69788460737e07163a14051
caused armv7a.inc to set ARM_INSTRUCTION_SET to thumb and the commit
message explicitly states that the change should have no effect unless
TUNE_FEATURES also includes thumb. This change to rust will allow that
assumption to continue to be true.
2019-01-14 15:58:54 -05:00
Steven Walter
e357f4e5d5 Merge pull request #227 from janderholm/master
Set proxy in cargo if available
2019-01-13 12:59:58 -05:00
Johan Anderholm
9ecc36acb5 Set proxy in cargo if available
This is needed for cargo to use proxies set by bitbake. It is important
for devtooled builds which does not use vendored sources.
2019-01-13 10:45:01 +01:00
Steven Walter
4110f1d92a Merge pull request #226 from Fulkerson/master
Update to rust version 1.31.1
2019-01-03 14:37:45 -05:00
Johan Anderholm
496b75fa1f Update to rust version 1.31.1
Also make use of the sources vendored in the rustc package instead of
letting bitbake download the sources.
2019-01-03 17:31:46 +01:00
Steven Walter
e4fdc0e8f7 Merge pull request #225 from YoeDistro/yoe/mut
rust-cross: Add ppc support
2018-12-27 21:02:39 -05:00
Khem Raj
bf01840f5b rust-cross: Add riscv64 data layout information
clang --target=riscv64  -emit-llvm -S -x c /dev/null -o aaa |  cat aaa | grep "target datalayout"

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2018-12-26 14:52:22 -08:00
Khem Raj
1b00814593 rust-cross: Add mips64 data layout llvm specifications
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2018-12-26 14:52:22 -08:00
Khem Raj
68d6bce609 rust-cross: Add ppc support
This ensures that rust-cross can be compiled for ppc arch

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2018-12-26 14:52:18 -08:00
Steven Walter
969467c029 Merge pull request #222 from YoeDistro/yoe/mut
libstd-rs: Depend on libunwind on musl builds
2018-12-17 13:05:37 -05:00
Khem Raj
665213a13d libstd-rs: Depend on libunwind on musl builds
musl builds need libunwind.a to be in sysroot for libstd-rs to build
unwinding support into it. This also means we need to compile libunwind
with --enable-static in oe-core

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2018-12-05 16:13:21 -08:00
Doug Goldstein
4c9068bd09 Merge pull request #216 from hongxu-jia/master
cargo_common.bbclass: fix bashism
2018-11-23 16:46:58 -06:00
Hongxu Jia
3b9251e732 cargo_common.bbclass: fix bashism
While /bin/sh -> dash, var-EXTERNALSRC didn't work

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
2018-11-20 22:10:18 +08:00
Derek Straka
ea613e2ae2 Merge pull request #212 from OSSystems/master
Use libssh2 from system and upgrade cargo to 0.31.0
2018-11-13 08:46:41 -05:00
Derek Straka
e660179c55 Merge branch 'master' into master 2018-11-12 21:30:03 -05:00
Derek Straka
318a4c6f25 Merge pull request #215 from myagley/miyagley/cxxflags
Fix TARGET_CXXFLAGS in cargo_common
2018-11-12 21:29:47 -05:00
Mike Yagley
c7fc7986c2 Fix TARGET_CXXFLAGS in cargo_common 2018-11-12 13:44:02 -08:00
Derek Straka
50828f8af2 Merge branch 'master' into master 2018-11-12 10:11:32 -05:00
Derek Straka
adf3f10036 Merge pull request #214 from YoeDistro/yoe/mut
Fix building llvm (inspirations from meta-clang)
2018-11-12 10:11:11 -05:00
Khem Raj
446d28d6e1 rust: Use llvm-rust-native and env variables to configure llvm-config
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2018-11-09 22:53:49 -08:00
Khem Raj
b15ba05ea8 rust-llvm: Make llvm-config cross compile friendly
Import patches from clang layer to ensure that llvm-config
can be provided configs from environment

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2018-11-09 22:52:05 -08:00
Otavio Salvador
f54025fed9 cargo: Add 0.31.0 recipe
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2018-11-09 08:06:29 -02:00
Otavio Salvador
f317737fae cargo: Ensure libssh2 from system is used
This forces the use of libssh2 by exporting the
LIBSSH2_SYS_USE_PKG_CONFIG environment variable.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2018-11-05 14:33:01 -02:00
Khem Raj
e04d99bf38 rust-llvm: Fix build with OE-core master
Disable libxml2 explicitly
Disable building hosttools on target build

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2018-11-02 15:05:17 -07:00
Derek Straka
6b060617cd Merge pull request #210 from alimon/master
conf/layer.conf: Add thud to the LAYERSERIES_COMPAT
2018-10-20 13:35:39 -04:00
Aníbal Limón
99ec7396f6 conf/layer.conf: Add thud to the LAYERSERIES_COMPAT
To support current master builds.

Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
2018-10-19 19:48:18 -05:00
Derek Straka
f81fbebaeb Merge pull request #206 from srwalter/disable-llvm-assertions
rust-llvm: correctly disable assertions
2018-08-11 07:42:08 -04:00
Steven Walter
5a9933dd46 rust-llvm: correctly disable assertions
We were already trying to disable assertions, but it wasn't working.
rust-llvm now configures assertions based on the CMAKE_BUILD_TYPE.
Setting that to "Release" causes assertions to be disabled, which is
what we want.
2018-08-08 12:37:17 -04:00
Derek Straka
badf251873 Merge pull request #205 from tylerwhall/remap-path-prefix
rust-common: fix remap-path-prefix for 1.26
2018-07-23 11:59:53 -04:00
Tyler Hall
060e033df9 rust-common: fix remap-path-prefix for 1.26
Before the flag was stabilized, it required two arguments of the form
"from=<from_path>" and "to=<to_path>" respectively. The stabilized
version uses one argument of the form "<from_path>=<to_path>".

Unfortunately the old format is still parsed successfully, but results
in attempting to replace the literal paths "from" and "to".

https://github.com/rust-lang/rust/issues/41555#issuecomment-320951103
2018-07-22 15:48:46 -04:00
Derek Straka
6d3f61e5ce Merge pull request #202 from Fulkerson/1.27.1
Bump to Rust 1.27.1
2018-07-18 12:34:17 -04:00
Johan Anderholm
bbf4f77f98 Bump to Rust 1.27.1 2018-07-18 08:15:34 +02:00
Steven Walter
b7380307d0 Merge pull request #204 from meta-rust/allow-overriding-libstd-features
libstd-rs: use a separate variable for --features
2018-07-16 12:04:30 -04:00
Steven Walter
8b471a1bdc libstd-rs: use a separate variable for --features
This will allow features to be easily modified through a bbappend file
in another layer.
2018-07-16 09:09:10 -04:00
Derek Straka
b82e450b5a Merge pull request #201 from meta-rust/fix-debug
libstd-rs: support debug builds
2018-07-12 17:09:33 -04:00
Steven Walter
cef09a5551 libstd-rs: support debug builds 2018-07-12 11:03:16 -04:00
Derek Straka
6052c90ca8 Merge pull request #199 from Fulkerson/fixes
Various fixes, Clang, TCLIBC, DEBUG_BUILD, rocko
2018-07-07 11:46:53 -04:00
Johan Anderholm
8e6c6271fc Handle env and llvm-target for musl
Further changes needed for musl to work.
env needs to be set to "musl" for unwinding work properly.
Also the llvm target should end with "-musl" and not "-gnu".
2018-07-06 19:34:33 +02:00
Johan Anderholm
6066f1d2df Corrected target-c-int-width
The correct value for x86_64 and aarch64 is 32
2018-07-06 19:34:33 +02:00
Johan Anderholm
d3bdd55c03 Add rocko as compatible version
The master branch is still compatible with rocko.
2018-07-06 19:34:33 +02:00
Johan Anderholm
6a0d148968 Make it possible to build with TCLIBC="musl" (musl as libc) 2018-07-06 19:34:33 +02:00
Johan Anderholm
e1fa6d39ce Don't install rust-llvm system-wide
Put rust-llvm into a directory of it's own. This avoids conflicts
between the official llvm and rusts temporary one. It solves
interoperability issues with meta-clang.

Use /usr/lib/llvm-rust/ as prefix because that matches what llvm does
themselves on debian and ubuntu.
2018-07-06 19:30:36 +02:00
Johan Anderholm
de42179513 cargo.bbclass: Make release mode optional
Use DEBUG_BUILD to determine if cargo should build with --release or
not. Set DEBUG_BUILD="1" in a recipe to build it without --release.
2018-07-06 19:30:36 +02:00
Derek Straka
9b1b4db8b0 Merge pull request #192 from Fulkerson/master
Bump to Rust 1.26.2
2018-07-06 10:14:47 -04:00
Johan Anderholm
03d8fb472c Bump to Rust 1.26.2
Remove old versions because they are not compatible with the changes in
rust-common.bbclass
2018-06-16 09:50:47 +02:00
Derek Straka
b117a311ef Merge pull request #198 from cardoe/remove-recipes-core
remove recipes-core & recipes-graphics
2018-05-31 16:45:34 -04:00
Doug Goldstein
55e9c18a37 remove recipes-core & recipes-graphics
Remove these recipes as I do not believe they are functional since the
fixes for #126 were done (removing the modifications to the compiler to
allow them to be used). #197 additionally points out that rand-rs has
not had a valid commit hash and most of these in some way depend on that
so these cannot possibly work in their current form. Removing per #102.
Fixes #102.
2018-05-30 13:38:21 -05:00
Derek Straka
7cfa3db4f6 Merge pull request #194 from agherzan/ag_compat
layer.conf: Define LAYERSERIES_COMPAT to fix build warning
2018-05-22 09:41:30 -04:00
Derek Straka
63aa6db53a Merge pull request #196 from srwalter/devtool
cargo_common.bbclass: improve operation with devtool
2018-05-20 11:21:49 -04:00
Steven Walter
48e2a7db25 cargo_common.bbclass: improve operation with devtool
Because devtool inhibits all the normal bitbake fetchers, we can't mask crates.io.
Use EXTERNALSRC to detect if we're being built with devtool, and only mask
crates.io if we're not.

Fixes #195
2018-05-19 10:16:55 -04:00
Andrei Gherzan
ab62d9cdbf layer.conf: Define LAYERSERIES_COMPAT to fix build warning
Signed-off-by: Andrei Gherzan <andrei@resin.io>
2018-05-14 18:24:55 +01:00
Derek Straka
22d72b3be6 Merge pull request #190 from jcreekmore/add-rust-1.24.1
Remove Rust 1.24.0 in favor of 1.24.1
2018-03-05 08:32:00 -05:00
Jonathan Creekmore
575016d11d Remove Rust 1.24.0 in favor of 1.24.1
The Rust maintainers released 1.24.1 because several minor regressions
were found in the 1.24.0 release that collectively merited an updated
release.
2018-03-02 12:59:28 -06:00
Derek Straka
8203dce091 Merge pull request #188 from jcreekmore/rust-1.24.0-rocko
Add rust version 1.24.0
2018-03-01 08:07:49 -05:00
Adam Schwalm
0639277e4c Add 1.24.0 for rocko 2018-02-27 16:19:12 -06:00
Derek Straka
5a9c23fac4 Merge pull request #189 from agherzan/fix-soname
libstd-rs: Set SONAME for libstd.so
2018-02-27 07:54:03 -05:00
Andrei Gherzan
69ae1df12e libstd-rs: Set SONAME for libstd.so
When yocto is searching for lib dependencies it uses SONAMES and RPATHS to find
the right one. When we compile a rust package which dynamically links to rust's
libstd, yocto will not be able to find the matching dependency in shlib and
will complain with a warning. Even worse, if you have compiled go-runtime, the
build will find go-runtime as provider of libstd and will complain that you
missed a RDEPENDS to go-runtime - this is completely wrong obviously.

This patch adds SONAME to rust's stdlib. In this way yocto will create the
required provider and packages dynamically linking to it will be able to find
libstd-rs as a provider of stdlib.

Signed-off-by: Andrei Gherzan <andrei@resin.io>
2018-02-26 17:43:09 +00:00
Derek Straka
17cc34c9c8 Merge pull request #185 from tylerwhall/panic-strategy
rust: allow configuring panic-strategy
2018-01-27 09:46:35 -05:00
Derek Straka
a19993c804 Merge branch 'master' into panic-strategy 2018-01-26 08:28:06 -05:00
Tyler Hall
03c0338cab Merge pull request #184 from bkylerussell/rm-do-compile
rust-llvm: remove custom do_compile
2018-01-24 13:45:24 -05:00
Tyler Hall
52ea673a8f rust: allow configuring panic-strategy
This defaults to "unwind" if not set, so this alone has no effect.

Signed-off-by: Tyler Hall <tylerwhall@gmail.com>
2018-01-23 17:54:15 -05:00
Kyle Russell
4c7cbf6a60 rust-llvm: remove custom do_compile
This works out in recent poky releases because cmake_do_compile ends up
in oe_runmake via base_do_compile, but this changed recently to allow
cmake's generic `cmake --build` feature to call the appropriate
generator instead of always assuming make.

http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit?id=579d17ba5f722edb9fe79682480c4a9508ad0ed4
2018-01-23 17:31:43 -05:00
Derek Straka
8f46fe3e97 Merge pull request #182 from Fulkerson/master
Add support for the mips32 architecture
2017-12-03 14:43:32 -05:00
Johan Anderholm
c65375f14f Jenkinsfile: Add qemumips machine 2017-12-02 08:39:09 +01:00
Johan Anderholm
f02df59eea Add support for the mips32 architecture
Support for mips32 big (mips) and little endian (mipsel) for mips32
and mips32r2 cpus. The big endian target can be verified with the
qemumips machine.
2017-12-01 19:36:15 +01:00
Johan Anderholm
141177fbf9 rust: specify target-c-int-width
The "target_c_int_width field is added to librustc_back since rust
1.22.0 because not all rust targets (e.g. msp430-none-elf, avr)
have 32-bit int types any more.
2017-11-27 15:48:54 -06:00
Steven Walter
fa4f4f9c1a Merge pull request #180 from srwalter/stable-sstate-hashes
Make rustc output reproducible
2017-11-08 10:17:21 -05:00
Steven Walter
7f7156b664 Merge branch 'master' into stable-sstate-hashes 2017-11-08 09:42:06 -05:00
Derek Straka
af5491692e Merge pull request #179 from meta-rust/add-debug-to-build-script
Add debug information to troubleshoot jenkins issues
2017-11-03 16:00:43 -04:00
Derek Straka
ab57e94e2c Don't bother erroring out if the rsync fails
Signed-off-by: Derek Straka <derek@asterius.io>
2017-11-03 13:50:12 -04:00
Derek Straka
6965038dee Add debug information to troubleshoot jenkins issues
Signed-off-by: Derek Straka <derek@asterius.io>
2017-11-03 13:50:12 -04:00
Tyler Hall
e5230147f6 Remap source paths
This is needed for reproducible builds.
2017-11-03 12:41:51 -04:00
Tyler Hall
528a34206b rustc: always allow unstable options 2017-11-03 12:41:51 -04:00
Tyler Hall
434f7851f5 Fix path substitution 2017-11-03 12:41:51 -04:00
Steven Walter
5b1b95772e Merge pull request #178 from srwalter/rust-bin-fixes
rust-bin.bbclass fixes
2017-11-03 12:41:31 -04:00
Tyler Hall
81ea9f2d2c bitflags: update to 0.8.2 and Rust 1.20 compat
0.8.2 is the last version before the breaking "flags" keyword change.

For now, no_std crates need to be rlibs because rustc complains about
missing lang items on dylibs even though it would eventually be resolved
in the final link.

Ignore pub_use_of_private_extern_crate as there exists no version with
this fixed that uses the old API.
2017-11-03 09:57:21 -04:00
Tyler Hall
d4755fc065 time-rs: update 0.1.26 -> 0.1.38
This version does not need the C helpers.
2017-11-03 09:57:21 -04:00
Tyler Hall
533507b25b libc-rs: update to 0.2.21
Signed-off-by: Tyler Hall <tyler.hall@lexmark.com>
Signed-off-by: Steven Walter <swalter@lexmark.com>
2017-11-03 09:57:21 -04:00
Steven Walter
ad9f280e6c Allow various recipes to build -native 2017-11-03 09:57:19 -04:00
Steven Walter
c60b799c11 Allow native variants of rust recipes to build 2017-11-02 16:41:58 -04:00
Tyler Hall
463622c0c6 rust-bin: use linker to set rpath
Patchelf should be reserved for when the ELF cannot be generated
correctly in the first place. This is not the case here because we have
control over the linker flags. The limitation is that -C link-args can
only be specified once, so consolidate the generation of link-args. Also
introduce some new intermediate variables in link-args generation for
customization.

Patchelf was running only in ${PKGD} because patching the ELF in ${D}
would cause objcopy to fail when splitting the debug sections. This is
not a problem when setting it correctly in the linker. The benefit is
that the rpath is correct in the sysroot as well.

This also switches the rpaths to be relative so that they work in both
the sysroot and the target in the same way.

Signed-off-by: Tyler Hall <tyler.hall@lexmark.com>
Signed-off-by: Steven Walter <swalter@lexmark.com>
2017-11-02 16:41:58 -04:00
Tyler Hall
172a226259 rust-bin: use linker wrapper
Commit 864fe95 ("classes: create proper compiler and linker wrappers")
introduced wrapper scripts for the OE toolchain. Specifying the sysroot
manually ceased to function in rust-bin, so use the wrapper where rustc
is called directly.

This should be more reliable than trying to repeat what OE puts in the
$CC variable.
2017-11-02 16:41:58 -04:00
Tyler Hall
c83864ce19 rust-bin: get RUST_TARGET_PATH from rust-common
Since commit 06a138a ("rust: drop custom target finding patch"), rustc
is no longer self-sufficient in finding its target specifications. Any
usage of rustc needs RUST_TARGET_PATH set in the environment.

Move the declaration to rust-common.bbclass and add the export to
rust-bin where rustc is invoked.
2017-11-02 16:41:58 -04:00
Derek Straka
bd80824ddf Merge pull request #177 from jcreekmore/rust-1.21.0
support Rust 1.21.0 and Cargo 0.22.0
2017-11-02 10:46:30 -04:00
Jonathan Creekmore
b28674a452 support Rust 1.21.0 and Cargo 0.22.0 2017-10-31 16:45:30 -05:00
Derek Straka
9383b2d572 Merge pull request #174 from cardoe/drop-1.15
drop Rust 1.15.1 / Cargo 0.16
2017-10-23 10:39:17 -04:00
Doug Goldstein
d231fcb708 drop Rust 1.15.1 / Cargo 0.16 2017-10-10 11:22:26 -05:00
Will Newton
7f80e6d68b cargo.bbclass: Avoid bashism in cargo_do_install
The double square brackets are an extension to POSIX so are not
available in some shells. Use a case statement instead.
2017-10-03 22:28:24 -05:00
Doug Goldstein
a1cd215131 Merge pull request #167 from meta-rust/add-correct-layer-config
layer.conf: add the openembedded-layer to the depends since we use libgit2 from there
2017-10-03 22:00:31 -05:00
Derek Straka
34941a25e9 Always allow the clean-up to succeed
Signed-off-by: Derek Straka <derek@asterius.io>
2017-10-03 10:35:17 -04:00
Derek Straka
9b0dc6b3af layer.conf: add the openembedded-layer to the depends since we use libgit2 from there
Signed-off-by: Derek Straka <derek@asterius.io>
2017-10-03 10:35:17 -04:00
Derek Straka
afe7e94a6e Merge pull request #169 from Fulkerson/rust-1.20.0
bump to Rust 1.20.0 and Cargo 0.21
2017-10-03 10:33:56 -04:00
Johan Anderholm
37813c4dff rust: Don't specify allocator for >= 1.20.0
System allocator is the default in rust.
2017-09-30 11:23:29 +02:00
Johan Anderholm
2fd83daa46 libstd: correct path to COPYRIGHT 2017-09-30 11:22:58 +02:00
Doug Goldstein
3bf7088579 bump to Rust 1.20.0 and Cargo 0.21 2017-09-29 15:37:16 -05:00
Derek Straka
d9c63d8557 Merge pull request #165 from cardoe/support-for-rustbuild
Switch to using rustbuild
2017-09-29 14:52:46 -04:00
Johan Anderholm
a4fe235317 Switch to rustbuild
Switch the build process to using Rust's new build system called
rustbuild. At the same time stop using jemalloc on all platforms and
switch to the system allocator since that was simplier to do.
2017-09-29 09:49:33 -05:00
Doug Goldstein
1ff41650d5 cargo: convert to versioned include file
We'll need the prior version of cargo to boot strap ourselves going
forward so include the version info so we can support multiple versions
in the tree.
2017-09-29 09:49:31 -05:00
Doug Goldstein
1b8883be12 update container to the pyro supported version 2017-09-29 09:49:29 -05:00
Doug Goldstein
e31d252eb0 cargo{_common}.bbclass: abstract out parts for rustbuild
rustbuild is a cargo based way to build Rust but all of our helper bits
in cargo.bbclass would create a chicken/egg issue with dependencies
since we pull down pre-built binaries and use those for boot strapping.
2017-09-29 09:49:27 -05:00
Doug Goldstein
0cccf8b25c cargo.bbclass: include CXXFLAGS for builds
If g++ is invoked when building native bits with cargo we need to
include CXXFLAGS.

Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2017-09-29 09:49:25 -05:00
Doug Goldstein
d5bf43b9b3 Merge pull request #166 from meta-rust/fix-bblayers
Fix the bblayers sample file based on poky renames
2017-09-29 09:48:43 -05:00
Derek Straka
9f1f8ab32f Fix the bblayers sample file based on poky renames
Signed-off-by: Derek Straka <derek@asterius.io>
2017-09-29 08:42:36 -04:00
Derek Straka
2cbf17309f Merge pull request #161 from cardoe/fixup-wrappers
drop custom compiler patch to provide target
2017-06-22 08:49:36 -04:00
Doug Goldstein
758f8459ec rustfmt: bump to 0.8.0 and use cargo-bitbake
Switch to using cargo-bitbake to generate the recipe and bump versions
at the same time.
2017-06-21 15:16:05 -05:00
Doug Goldstein
398fecb48c cargo: convert recipe to cargo-bitbake
Generate the Cargo recipe with cargo-bitbake instead of having a
handcrafted recipe. This should make future version bumps easier.

Three known issues:
- license checksum of the Apache license is a generateme value
  due to the license file having a difference name then what's in
  Cargo.toml.
- branch= value was wrong for tags. Pointed to HEAD instead of the
  branch that the underlying tag commit came from.
- Use https protocol when the repo is publicly accessible.
2017-06-21 15:14:37 -05:00
Doug Goldstein
c55fb403f8 cargo.bbclass: improve debug note showing paths
There was a bbnote that showed the path to the rustc and cargo binaries
being used but this was not necessarily correct since it didn't use the
exact variables used.
2017-06-21 11:52:28 -05:00
Doug Goldstein
06a138a4a4 rust: drop custom target finding patch
We shouldn't need to patch rustc to find the target but instead pass the
full path to the target spec. This should solve #138.
2017-06-21 11:52:28 -05:00
Johan Anderholm
3e0f03d12a cargo: build cargo using cargo and not make
Instead of using the configure script paired with make, use Cargo to
build Cargo. This moves us closer to being compatible with rustbuild.
2017-06-21 11:52:28 -05:00
Johan Anderholm
e814ede9d9 rust-common: provide C++ wrappers
For similar reasons to the C and linker wrappers, using rustbuild
requires a C++ wrapper to ensure that the right flags that Yocto needs
are passed to the underlying compiler.
2017-06-21 11:52:28 -05:00
Doug Goldstein
bb41c50510 compiler-rt: drop unused bits
Since 1db27bc4f7 this file is unused and should have been deleted with
that commit.
2017-06-21 11:50:30 -05:00
Derek Straka
c29ada51f1 Merge pull request #160 from cardoe/master-drop-rust-1.12
drop Rust 1.12.1 and Cargo 0.13
2017-06-20 11:28:36 -04:00
Doug Goldstein
1db27bc4f7 drop Rust 1.12.1 and Cargo 0.13
In keeping with our Rust supported releases schedule at
https://github.com/meta-rust/meta-rust/wiki this drops Rust 1.12.1 and
its cooresponding Cargo release.
2017-06-18 11:17:30 -05:00
Cody Schafer
4dcaaa8fc9 Merge pull request #156 from bkylerussell/native-fixes
rust-llvm: Drop unnecessary native customization
2017-04-19 15:48:22 -04:00
Kyle Russell
027b7aeeb0 rust-llvm: Fix bad license checksum for 1.15.1 2017-04-19 13:43:47 -04:00
Kyle Russell
8e28683458 rust-llvm: Drop unnecessary native customization
This is already accounted for by the LLVM CMake files, assuming
CMAKE_CROSSCOMPILING is set correctly, which is fixed in the upstream
cmake.bbclass.

http://git.openembedded.org/openembedded-core/commit/?id=bd082c9be6191e67ea1b1bf10ce5e130a3433ab5
2017-04-19 08:21:54 -04:00
Derek Straka
394ad27929 Merge pull request #148 from cardoe/rust-1.15.0
bump to Rust 1.15.1
2017-03-10 16:23:41 -05:00
Doug Goldstein
1820907990 compiler-rt: remove standalone build for Rust 1.15
From Rust 1.15 a standalone build of compiler-rt is no longer necessary.
2017-03-07 20:25:13 -06:00
Doug Goldstein
5a9614f91a bump to Rust 1.15.1 2017-03-07 19:19:00 -06:00
Derek Straka
f851e8f185 Bump to Cargo 0.16.0 for Rust 1.15.x
Signed-off-by: Derek Straka <derek@asterius.io>
2017-03-07 16:30:26 -06:00
Doug Goldstein
bc04c2ea4a libstd-rs: move depends out of the shared file
Technically these dependencies change between versions. It just happens
that these two versions didn't change the dependencies but future
versions will so preemptively make the adjustment.
2017-03-07 14:41:13 -06:00
Derek Straka
64cdd4b714 Update the source paths for each item
The path to the rust source changes from 1.15 so preemptively make
changes to prepare for that.

Signed-off-by: Derek Straka <derek@asterius.io>
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2017-03-07 14:41:13 -06:00
Doug Goldstein
502fc9b1d1 Merge pull request #149 from derekstraka/add-sstate
Add the ability to use and store build cache artifacts
2017-02-14 13:29:59 -06:00
Derek Straka
0adcc6e0bc Add the ability to use and store build cache artifacts
Signed-off-by: Derek Straka <derek@asterius.io>
2017-02-14 12:44:11 -05:00
Derek Straka
efae1a8bd0 Merge pull request #146 from srwalter/fix-rust-bin
Fix rust-bin.bbclass
2017-02-02 18:27:32 -05:00
Steven Walter
1eb86e935c rust-bin: fix recent breakage
The crate_hash flag is no longer accepted on rust 1.14.  Additionally,
due to the use of wrapper scripts by cargo, we were no longer able to
link correctly due to some link flags getting dropped.  Fix that as well
2017-02-02 10:02:11 -05:00
Doug Goldstein
f0e0b3b7e2 Merge pull request #145 from srwalter/fix-llvm-build-race
rust-llvm.inc: work around build race
2017-01-31 13:04:13 -06:00
Steven Walter
3276afb4ec rust-llvm.inc: work around build race
The way LLVM builds its native utilities is not safe (it runs a
recursive cmake in the same work directory as the main instance).  To
prevent those instances from stepping on each other, we'll build the two
native utilities separately before starting the main build.

Fixes issue #143
2017-01-31 08:23:55 -05:00
Derek Straka
a58ea82720 Merge pull request #142 from cardoe/rust-1.14.0
bump to Rust 1.14.0
2017-01-30 14:40:18 -05:00
Doug Goldstein
22c971c2fa bump to Rust 1.14.0 2017-01-30 10:16:39 -06:00
Doug Goldstein
5d2e062a84 rust: move versioned files into .inc
This way we can bump the versions without big diffs.
2017-01-30 10:14:29 -06:00
Derek Straka
97fcc5db56 rust: update the cpu selection to use PACKAGE_ARCH to ensure older processors can run created executables when building targets that have newer features
Signed-off-by: Derek Straka <derek@asterius.io>
2017-01-04 17:15:07 -05:00
Derek Straka
2a21657363 Merge pull request #135 from cardoe/readme-updates
README: swath of updates to reflect the current state
2017-01-02 14:00:39 -05:00
Doug Goldstein
d867f3d470 fetch: fix check for local ref path
This is a fast case if the slave has a local checkout available so that
it doesn't have to do a full clone. The check unfortunately didn't take
into account all cases and failed on the new slave.
2017-01-02 08:16:28 -06:00
Doug Goldstein
f43eadc581 README: swath of updates to reflect the current state 2016-12-29 11:55:01 -06:00
Derek Straka
bf4cdaf0a7 Merge pull request #133 from cardoe/drop-unused-patches-more
rust: remove unused patches
2016-12-29 08:25:13 -05:00
Doug Goldstein
4ccca55f2f rust: remove unused patches
This patches handle changing the directories that things are installed
in but appear to be unused. They were likely used before rust-cross was
split out to not install files.

Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2016-12-28 18:42:10 -06:00
Doug Goldstein
e6b757111a Merge pull request #132 from cardoe/drop-unused-patch
rust: drop unnecessary patch
2016-12-28 10:28:58 -06:00
Doug Goldstein
c19badf635 rust: drop unnecessary patch
Not sure what version this patch appears to have become unnecessary but
I verified it by checking the output in
build/tmp/sstate-control/manifest-x86_64-rust-native.populate_sysroot
and the installed files and their paths didn't change with and without
this patch.

Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2016-12-27 11:36:36 -06:00
Doug Goldstein
247bb57c84 scripts/fetch: add missing die statement
Noticed this while the Yocto Project's git server was down for
maintenance.
2016-12-27 10:47:03 -06:00
Leon Anavi
abe20ca06f compiler-rt: fix toolchain installer
Fix building a toolchain installer with bitbake
-c populate_sdk in packages compiler-rt,
compiler-rt-dev and compiler-rt-staticdev.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
(cherry picked from commit fcbebdf58f)
2016-12-27 00:03:15 -06:00
Derek Straka
185e29e4e1 Merge pull request #128 from cardoe/for-pyro
drop Rust 1.10.0
2016-12-08 10:37:04 -05:00
Doug Goldstein
94aa1405e3 rustfmt: update to use Cargo 0.13.0 fetching 2016-12-07 15:14:10 -06:00
Doug Goldstein
04bd03be1e libstd-rs: update to use Cargo 0.13.0 fetching 2016-12-07 15:14:10 -06:00
Doug Goldstein
84af8005f3 cargo: update to use Cargo 0.13.0 fetching 2016-12-07 15:14:10 -06:00
Doug Goldstein
339cc787cc drop the old fetch behavior for pre Cargo 0.13.0
This behavior is flakey and doesn't work from Cargo 0.13.0 and newer
which aren't part of this repo anymore.
2016-12-07 08:52:03 -06:00
Doug Goldstein
ac5d169623 Remove Rust 1.10.0 / Cargo 0.11.0 2016-12-07 08:51:10 -06:00
Doug Goldstein
c05b6b4c30 Merge pull request #117 from derekstraka/update-getvar
getVar will expand by default, so the 'True' option is no longer required
2016-12-07 08:50:09 -06:00
Derek Straka
52c0f97ff6 getVar will expand by default, so the 'True' option is no longer required
Signed-off-by: Derek Straka <derek@asterius.io>
2016-12-06 16:08:41 -05:00
Derek Straka
85d411c81c Jenkinsfile: swap back to using master
Signed-off-by: Derek Straka <derek@asterius.io>
2016-12-06 16:07:46 -05:00
129 changed files with 1868 additions and 3245 deletions

33
.github/workflows/main.yml vendored Normal file
View File

@@ -0,0 +1,33 @@
on: [pull_request]
jobs:
build:
env:
YOCTO_VERSION: 3.3.2
YOCTO_BRANCH: hardknott
runs-on: self-hosted
steps:
- uses: actions/checkout@v2
with:
path: 'meta-rust'
- name: Fetch poky
run: |
mv poky/build/sstate-cache . || true
rm -rf poky meta-openembedded
git clone -b $YOCTO_BRANCH --single-branch git://git.yoctoproject.org/poky
git clone -b $YOCTO_BRANCH --single-branch git://git.openembedded.org/meta-openembedded
- name: Configure build
run: |
cd poky
. oe-init-build-env
mv ../../sstate-cache . || true
bitbake-layers add-layer ../../meta-openembedded/meta-oe
bitbake-layers add-layer ../../meta-rust
echo 'PARALLEL_MAKE:pn-rust-llvm-native = "-j2"' >> conf/local.conf
echo 'TOOLCHAIN_HOST_TASK:append = " packagegroup-rust-cross-canadian-${MACHINE}"' >> conf/local.conf
echo 'PREFERRED_PROVIDER_virtual/kernel = "linux-dummy"' >> conf/local.conf
echo 'INHERIT_remove = "uninative"' >> conf/local.conf
- name: Run bitbake
run: |
cd poky
. oe-init-build-env
bitbake rust-hello-world

7
Jenkinsfile vendored
View File

@@ -1,4 +1,4 @@
def targets = [ 'qemux86', 'qemux86-64', 'qemuarm', 'qemuarm64' ] def targets = [ 'qemux86', 'qemux86-64', 'qemuarm', 'qemuarm64', 'qemumips' ]
def machine_builds = [:] def machine_builds = [:]
@@ -15,7 +15,7 @@ for (int i = 0; i < targets.size(); i++) {
sh "./scripts/setup-env.sh" sh "./scripts/setup-env.sh"
} }
stage("fetch $machine") { stage("fetch $machine") {
sh "GIT_LOCAL_REF_DIR=/srv/git-cache/ ./scripts/fetch.sh morty" sh "GIT_LOCAL_REF_DIR=/srv/git-cache/ ./scripts/fetch.sh master"
} }
stage("build $machine") { stage("build $machine") {
sh "MACHINE=${machine} ./scripts/build.sh" sh "MACHINE=${machine} ./scripts/build.sh"
@@ -24,6 +24,9 @@ for (int i = 0; i < targets.size(); i++) {
echo "Caught: ${e}" echo "Caught: ${e}"
throw e throw e
} finally { } finally {
stage("push build cache $machine") {
sh "./scripts/publish-build-cache.sh master"
}
stage("cleanup $machine") { stage("cleanup $machine") {
sh "./scripts/cleanup-env.sh" sh "./scripts/cleanup-env.sh"
deleteDir() deleteDir()

View File

@@ -5,17 +5,19 @@ This OpenEmbedded layer provides the rust compiler, tools for building packages
## What works: ## What works:
- Building rust-native, rust-cross, rust-hello-world, cargo-native - Building `rust-native` and `cargo-native`
- Building Rust based projects with Cargo for the TARGET - Building Rust based projects with Cargo for the TARGET
- e.g. `rustfmt` which is used by the CI system
- `-buildsdk` and `-crosssdk` packages
## What doesn't: ## What doesn't:
- Using anything but x86_64 as the build environment - Using anything but x86_64 as the build environment
- Probably some of the untested things - rust (built for target) [issue #81](https://github.com/meta-rust/meta-rust/issues/81)
## What's untested: ## What's untested:
- rust (built for target) - cargo (built for target)
## Building a rust package ## Building a rust package
@@ -25,44 +27,29 @@ rust packages do), then it's especially easy. Otherwise you should probably
get the code building in cargo first. get the code building in cargo first.
Once your package builds in cargo, you can use Once your package builds in cargo, you can use
[cargo-bitbake](https://github.com/cardoe/cargo-bitbake) to generate a bitbake [cargo-bitbake](https://github.com/meta-rust/cargo-bitbake) to generate a bitbake
recipe for it. This allows bitbake to fetch all the necessary dependent recipe for it. This allows bitbake to fetch all the necessary dependent
crates, as well as a pegged version of the crates.io index, to ensure maximum crates, as well as a pegged version of the crates.io index, to ensure maximum
reproducibility. reproducibility.
## Common issues when packaging things using cargo NOTE: You will have to edit the generated recipe based on the comments
contained within it
You may run into errors similar to:
```
| src/lib.rs:12:1: 12:35 error: can't find crate for `ffi`
| src/lib.rs:12 extern crate "openssl-sys" as ffi;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```
Where a "-sys" crate (or other crate) is not found. These are typically caused
by a crate's Cargo.toml including triplet-specific dependencies and then using
the crate based on a feature (most often, `#[cfg(unix)]`). Until cargo and it's
ecosystem get their act together, you'll need to supply patches to the
misbehaving packages. See `recipies/cargo/cargo_*.bb` for an example of how to
do this.
## TODO ## TODO
- -crosssdk and -buildsdk packages
- Upstream local rustc patches for libdir and bindir support
## Pitfalls ## Pitfalls
- TARGET_SYS _must_ be different from BUILD_SYS. This is due to the way configuration options are tracked for different targets. - TARGET_SYS _must_ be different from BUILD_SYS. This is due to the way Rust configuration options are tracked for different targets. This is the reason we use the Yocto triples instead of the native Rust triples. See [rust-lang/cargo#3349](https://github.com/rust-lang/cargo/issues/3349).
## Dependencies ## Dependencies
On the host: On the host:
unknown - Any `-sys` packages your project might need must have RDEPENDs for
the native library.
On the target: On the target:
unknown - Any `-sys` packages your project might need must have RDEPENDs for
the native library.
## Maintainer(s) & Patch policy ## Maintainer(s) & Patch policy
@@ -72,7 +59,9 @@ The master branch supports the latest master of poky. When poky creates releases
All new patches against rust, rust-llvm, and cargo must have referenced All new patches against rust, rust-llvm, and cargo must have referenced
upstream issues or PRs opened or an explanation why the patch cannot be upstream issues or PRs opened or an explanation why the patch cannot be
upstreamed. This cooresponds to the OpenEmbedded policy for other meta layers. upstreamed. This corresponds to the OpenEmbedded policy for other meta layers.
More info can be seen on the wiki.
## Copyright ## Copyright

View File

@@ -1,92 +1,53 @@
# add crate fetch support ##
inherit crate-fetch ## Purpose:
inherit rust-common ## This class is used by any recipes that are built using
## Cargo.
inherit cargo_common
# the binary we will use # the binary we will use
CARGO = "cargo" CARGO = "cargo"
# Where we download our registry and dependencies to
export CARGO_HOME = "${WORKDIR}/cargo_home"
# We need cargo to compile for the target # We need cargo to compile for the target
BASEDEPENDS_append = " cargo-native" BASEDEPENDS:append = " cargo-native"
# Ensure we get the right rust variant # Ensure we get the right rust variant
DEPENDS_append_class-target = " virtual/${TARGET_PREFIX}rust ${RUSTLIB_DEP}" DEPENDS:append:class-target = " virtual/${TARGET_PREFIX}rust ${RUSTLIB_DEP}"
DEPENDS_append_class-native = " rust-native" DEPENDS:append:class-native = " rust-native"
# Cargo only supports in-tree builds at the moment # Enable build separation
B = "${S}" B = "${WORKDIR}/build"
# In case something fails in the build process, give a bit more feedback on # In case something fails in the build process, give a bit more feedback on
# where the issue occured # where the issue occured
export RUST_BACKTRACE = "1" export RUST_BACKTRACE = "1"
# The pkg-config-rs library used by cargo build scripts disables itself when # The directory of the Cargo.toml relative to the root directory, per default
# cross compiling unless this is defined. We set up pkg-config appropriately # assume there's a Cargo.toml directly in the root directory
# for cross compilation, so tell it we know better than it. CARGO_SRC_DIR ??= ""
export PKG_CONFIG_ALLOW_CROSS = "1"
cargo_do_configure () { # The actual path to the Cargo.toml
mkdir -p ${CARGO_HOME} MANIFEST_PATH ??= "${S}/${CARGO_SRC_DIR}/Cargo.toml"
echo "paths = [" > ${CARGO_HOME}/config
for p in ${EXTRA_OECARGO_PATHS}; do
printf "\"%s\"\n" "$p"
done | sed -e 's/$/,/' >> ${CARGO_HOME}/config
echo "]" >> ${CARGO_HOME}/config
# Point cargo at our local mirror of the registry
cat <<- EOF >> ${CARGO_HOME}/config
[source.bitbake]
directory = "${CARGO_HOME}/bitbake"
[source.crates-io]
replace-with = "bitbake"
local-registry = "/nonexistant"
EOF
echo "[target.${HOST_SYS}]" >> ${CARGO_HOME}/config
echo "linker = '${RUST_TARGET_CCLD}'" >> ${CARGO_HOME}/config
if [ "${HOST_SYS}" != "${BUILD_SYS}" ]; then
echo "[target.${BUILD_SYS}]" >> ${CARGO_HOME}/config
echo "linker = '${RUST_BUILD_CCLD}'" >> ${CARGO_HOME}/config
fi
}
RUSTFLAGS ??= "" RUSTFLAGS ??= ""
CARGO_BUILD_FLAGS = "-v --target ${HOST_SYS} --release" BUILD_MODE = "${@['--release', ''][d.getVar('DEBUG_BUILD') == '1']}"
CARGO_BUILD_FLAGS = "-v --target ${HOST_SYS} ${BUILD_MODE} --manifest-path=${MANIFEST_PATH}"
# This is based on the content of CARGO_BUILD_FLAGS and generally will need to # This is based on the content of CARGO_BUILD_FLAGS and generally will need to
# change if CARGO_BUILD_FLAGS changes. # change if CARGO_BUILD_FLAGS changes.
CARGO_TARGET_SUBDIR="${HOST_SYS}/release" BUILD_DIR = "${@['release', 'debug'][d.getVar('DEBUG_BUILD') == '1']}"
CARGO_TARGET_SUBDIR="${HOST_SYS}/${BUILD_DIR}"
oe_cargo_build () { oe_cargo_build () {
export RUSTFLAGS="${RUSTFLAGS}" export RUSTFLAGS="${RUSTFLAGS}"
bbnote "cargo = $(which cargo)" export RUST_TARGET_PATH="${RUST_TARGET_PATH}"
bbnote "rustc = $(which rustc)" bbnote "cargo = $(which ${CARGO})"
bbnote "rustc = $(which ${RUSTC})"
bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@" bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@"
"${CARGO}" build ${CARGO_BUILD_FLAGS} "$@" "${CARGO}" build ${CARGO_BUILD_FLAGS} "$@"
} }
oe_cargo_fix_env () { do_compile[progress] = "outof:\s+(\d+)/(\d+)"
export CC="${RUST_TARGET_CC}"
export CFLAGS="${CFLAGS}"
export AR="${AR}"
export TARGET_CC="${RUST_TARGET_CC}"
export TARGET_CFLAGS="${CFLAGS}"
export TARGET_AR="${AR}"
export HOST_CC="${RUST_BUILD_CC}"
export HOST_CFLAGS="${BUILD_CFLAGS}"
export HOST_AR="${BUILD_AR}"
}
EXTRA_OECARGO_PATHS ??= ""
cargo_do_compile () { cargo_do_compile () {
# prevent cargo from trying to fetch down new data
mkdir -p "${WORKDIR}/cargo_home/registry/index/github.com-1ecc6299db9ec823"
touch "${WORKDIR}/cargo_home/registry/index/github.com-1ecc6299db9ec823/.cargo-index-lock"
oe_cargo_fix_env oe_cargo_fix_env
oe_cargo_build oe_cargo_build
} }
@@ -94,19 +55,35 @@ cargo_do_compile () {
cargo_do_install () { cargo_do_install () {
local have_installed=false local have_installed=false
for tgt in "${B}/target/${CARGO_TARGET_SUBDIR}/"*; do for tgt in "${B}/target/${CARGO_TARGET_SUBDIR}/"*; do
if [[ $tgt == *.so || $tgt == *.rlib ]]; then case $tgt in
*.so|*.rlib)
install -d "${D}${rustlibdir}" install -d "${D}${rustlibdir}"
install -m755 "$tgt" "${D}${rustlibdir}" install -m755 "$tgt" "${D}${rustlibdir}"
have_installed=true have_installed=true
elif [ -f "$tgt" ] && [ -x "$tgt" ]; then ;;
install -d "${D}${bindir}" *examples)
install -m755 "$tgt" "${D}${bindir}" if [ -d "$tgt" ]; then
have_installed=true for example in "$tgt/"*; do
fi if [ -f "$example" ] && [ -x "$example" ]; then
install -d "${D}${bindir}"
install -m755 "$example" "${D}${bindir}"
have_installed=true
fi
done
fi
;;
*)
if [ -f "$tgt" ] && [ -x "$tgt" ]; then
install -d "${D}${bindir}"
install -m755 "$tgt" "${D}${bindir}"
have_installed=true
fi
;;
esac
done done
if ! $have_installed; then if ! $have_installed; then
die "Did not find anything to install" die "Did not find anything to install"
fi fi
} }
EXPORT_FUNCTIONS do_configure do_compile do_install EXPORT_FUNCTIONS do_compile do_install

View File

@@ -0,0 +1,129 @@
##
## Purpose:
## This class is to support building with cargo. It
## must be different than cargo.bbclass because Rust
## now builds with Cargo but cannot use cargo.bbclass
## due to dependencies and assumptions in cargo.bbclass
## that Rust & Cargo are already installed. So this
## is used by cargo.bbclass and Rust
##
# add crate fetch support
inherit crate-fetch
inherit rust-common
# Where we download our registry and dependencies to
export CARGO_HOME = "${WORKDIR}/cargo_home"
# The pkg-config-rs library used by cargo build scripts disables itself when
# cross compiling unless this is defined. We set up pkg-config appropriately
# for cross compilation, so tell it we know better than it.
export PKG_CONFIG_ALLOW_CROSS = "1"
# Don't instruct cargo to use crates downloaded by bitbake. Some rust packages,
# for example the rust compiler itself, come with their own vendored sources.
# Specifying two [source.crates-io] will not work.
CARGO_DISABLE_BITBAKE_VENDORING ?= "0"
# Used by libstd-rs to point to the vendor dir included in rustc src
CARGO_VENDORING_DIRECTORY ?= "${CARGO_HOME}/bitbake"
CARGO_RUST_TARGET_CCLD ?= "${RUST_TARGET_CCLD}"
cargo_common_do_configure () {
mkdir -p ${CARGO_HOME}/bitbake
cat <<- EOF > ${CARGO_HOME}/config
# EXTRA_OECARGO_PATHS
paths = [
$(for p in ${EXTRA_OECARGO_PATHS}; do echo \"$p\",; done)
]
EOF
cat <<- EOF >> ${CARGO_HOME}/config
# Local mirror vendored by bitbake
[source.bitbake]
directory = "${CARGO_VENDORING_DIRECTORY}"
EOF
if [ -z "${EXTERNALSRC}" ] && [ ${CARGO_DISABLE_BITBAKE_VENDORING} = "0" ]; then
cat <<- EOF >> ${CARGO_HOME}/config
[source.crates-io]
replace-with = "bitbake"
local-registry = "/nonexistant"
EOF
fi
cat <<- EOF >> ${CARGO_HOME}/config
[http]
# Multiplexing can't be enabled because http2 can't be enabled
# in curl-native without dependency loops
multiplexing = false
# Ignore the hard coded and incorrect path to certificates
cainfo = "${STAGING_ETCDIR_NATIVE}/ssl/certs/ca-certificates.crt"
EOF
if [ -n "${http_proxy}" ]; then
echo "proxy = \"${http_proxy}\"" >> ${CARGO_HOME}/config
fi
cat <<- EOF >> ${CARGO_HOME}/config
# HOST_SYS
[target.${HOST_SYS}]
linker = "${CARGO_RUST_TARGET_CCLD}"
EOF
if [ "${HOST_SYS}" != "${BUILD_SYS}" ]; then
cat <<- EOF >> ${CARGO_HOME}/config
# BUILD_SYS
[target.${BUILD_SYS}]
linker = "${RUST_BUILD_CCLD}"
EOF
fi
# Put build output in build directory preferred by bitbake instead of
# inside source directory unless they are the same
if [ "${B}" != "${S}" ]; then
cat <<- EOF >> ${CARGO_HOME}/config
[build]
# Use out of tree build destination to avoid poluting the source tree
target-dir = "${B}/target"
EOF
fi
cat <<- EOF >> ${CARGO_HOME}/config
[term]
progress.when = 'always'
progress.width = 80
EOF
}
oe_cargo_fix_env () {
export CC="${RUST_TARGET_CC}"
export CXX="${RUST_TARGET_CXX}"
export CFLAGS="${CFLAGS}"
export CXXFLAGS="${CXXFLAGS}"
export AR="${AR}"
export TARGET_CC="${RUST_TARGET_CC}"
export TARGET_CXX="${RUST_TARGET_CXX}"
export TARGET_CFLAGS="${CFLAGS}"
export TARGET_CXXFLAGS="${CXXFLAGS}"
export TARGET_AR="${AR}"
export HOST_CC="${RUST_BUILD_CC}"
export HOST_CXX="${RUST_BUILD_CXX}"
export HOST_CFLAGS="${BUILD_CFLAGS}"
export HOST_CXXFLAGS="${BUILD_CXXFLAGS}"
export HOST_AR="${BUILD_AR}"
}
EXTRA_OECARGO_PATHS ??= ""
EXPORT_FUNCTIONS do_configure

View File

@@ -1,10 +1,8 @@
inherit rust inherit rust
DEPENDS_append = " patchelf-native" RDEPENDS:${PN}:append:class-target = " ${RUSTLIB_DEP}"
RDEPENDS_${PN} += "${RUSTLIB_DEP}"
RUSTFLAGS += "-C crate_hash=${BB_TASKHASH}" RUSTC_ARCHFLAGS += "-C opt-level=3 -g -L ${STAGING_DIR_HOST}/${rustlibdir} -C linker=${RUST_TARGET_CCLD}"
RUSTC_ARCHFLAGS += "-C opt-level=3 -g -L ${STAGING_DIR_HOST}/${rustlibdir}"
EXTRA_OEMAKE += 'RUSTC_ARCHFLAGS="${RUSTC_ARCHFLAGS}"' EXTRA_OEMAKE += 'RUSTC_ARCHFLAGS="${RUSTC_ARCHFLAGS}"'
# Some libraries alias with the standard library but libstd is configured to # Some libraries alias with the standard library but libstd is configured to
@@ -17,9 +15,9 @@ OVERLAP_LIBS = "\
rand \ rand \
" "
def get_overlap_deps(d): def get_overlap_deps(d):
deps = d.getVar("DEPENDS", True).split() deps = d.getVar("DEPENDS").split()
overlap_deps = [] overlap_deps = []
for o in d.getVar("OVERLAP_LIBS", True).split(): for o in d.getVar("OVERLAP_LIBS").split():
l = len([o for dep in deps if (o + '-rs' in dep)]) l = len([o for dep in deps if (o + '-rs' in dep)])
if l > 0: if l > 0:
overlap_deps.append(o) overlap_deps.append(o)
@@ -31,13 +29,51 @@ OVERLAP_DEPS = "${@get_overlap_deps(d)}"
RUSTC_PREFER_DYNAMIC = "-C prefer-dynamic" RUSTC_PREFER_DYNAMIC = "-C prefer-dynamic"
RUSTC_FLAGS += "${RUSTC_PREFER_DYNAMIC}" RUSTC_FLAGS += "${RUSTC_PREFER_DYNAMIC}"
CRATE_NAME ?= "${@d.getVar('BPN', True).replace('-rs', '').replace('-', '_')}" CRATE_NAME ?= "${@d.getVar('BPN').replace('-rs', '').replace('-', '_')}"
BINNAME ?= "${BPN}" BINNAME ?= "${BPN}"
LIBNAME ?= "lib${CRATE_NAME}-rs" LIBNAME ?= "lib${CRATE_NAME}-rs"
CRATE_TYPE ?= "dylib" CRATE_TYPE ?= "dylib"
BIN_SRC ?= "${S}/src/main.rs" BIN_SRC ?= "${S}/src/main.rs"
LIB_SRC ?= "${S}/src/lib.rs" LIB_SRC ?= "${S}/src/lib.rs"
rustbindest ?= "${bindir}"
rustlibdest ?= "${rustlibdir}"
RUST_RPATH_ABS ?= "${rustlibdir}:${rustlib}"
def relative_rpaths(paths, base):
relpaths = set()
for p in paths.split(':'):
if p == base:
relpaths.add('$ORIGIN')
continue
relpaths.add(os.path.join('$ORIGIN', os.path.relpath(p, base)))
return '-rpath=' + ':'.join(relpaths) if len(relpaths) else ''
RUST_LIB_RPATH_FLAGS ?= "${@relative_rpaths(d.getVar('RUST_RPATH_ABS', True), d.getVar('rustlibdest', True))}"
RUST_BIN_RPATH_FLAGS ?= "${@relative_rpaths(d.getVar('RUST_RPATH_ABS', True), d.getVar('rustbindest', True))}"
def libfilename(d):
if d.getVar('CRATE_TYPE', True) == 'dylib':
return d.getVar('LIBNAME', True) + '.so'
else:
return d.getVar('LIBNAME', True) + '.rlib'
def link_args(d, bin):
linkargs = []
if bin:
rpaths = d.getVar('RUST_BIN_RPATH_FLAGS', False)
else:
rpaths = d.getVar('RUST_LIB_RPATH_FLAGS', False)
if d.getVar('CRATE_TYPE', True) == 'dylib':
linkargs.append('-soname')
linkargs.append(libfilename(d))
if len(rpaths):
linkargs.append(rpaths)
if len(linkargs):
return ' '.join(['-Wl,' + arg for arg in linkargs])
else:
return ''
get_overlap_externs () { get_overlap_externs () {
externs= externs=
for dep in ${OVERLAP_DEPS}; do for dep in ${OVERLAP_DEPS}; do
@@ -57,22 +93,22 @@ do_configure () {
} }
oe_runrustc () { oe_runrustc () {
export RUST_TARGET_PATH="${RUST_TARGET_PATH}"
bbnote ${RUSTC} ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@" bbnote ${RUSTC} ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@"
"${RUSTC}" ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@" "${RUSTC}" ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@"
} }
oe_compile_rust_lib () { oe_compile_rust_lib () {
[ "${CRATE_TYPE}" == "dylib" ] && suffix=so || suffix=rlib
rm -rf ${LIBNAME}.{rlib,so} rm -rf ${LIBNAME}.{rlib,so}
local -a link_args local -a link_args
if [ "${CRATE_TYPE}" == "dylib" ]; then if [ -n '${@link_args(d, False)}' ]; then
link_args[0]="-C" link_args[0]='-C'
link_args[1]="link-args=-Wl,-soname -Wl,${LIBNAME}.$suffix" link_args[1]='link-args=${@link_args(d, False)}'
fi fi
oe_runrustc $(get_overlap_externs) \ oe_runrustc $(get_overlap_externs) \
"${link_args[@]}" \ "${link_args[@]}" \
${LIB_SRC} \ ${LIB_SRC} \
-o ${LIBNAME}.$suffix \ -o ${@libfilename(d)} \
--crate-name=${CRATE_NAME} --crate-type=${CRATE_TYPE} \ --crate-name=${CRATE_NAME} --crate-type=${CRATE_TYPE} \
"$@" "$@"
} }
@@ -80,20 +116,27 @@ oe_compile_rust_lib[vardeps] += "get_overlap_externs"
oe_compile_rust_bin () { oe_compile_rust_bin () {
rm -rf ${BINNAME} rm -rf ${BINNAME}
oe_runrustc $(get_overlap_externs) ${BIN_SRC} -o ${BINNAME} "$@" local -a link_args
if [ -n '${@link_args(d, True)}' ]; then
link_args[0]='-C'
link_args[1]='link-args=${@link_args(d, True)}'
fi
oe_runrustc $(get_overlap_externs) \
"${link_args[@]}" \
${BIN_SRC} -o ${BINNAME} "$@"
} }
oe_compile_rust_bin[vardeps] += "get_overlap_externs" oe_compile_rust_bin[vardeps] += "get_overlap_externs"
oe_install_rust_lib () { oe_install_rust_lib () {
for lib in $(ls ${LIBNAME}.{so,rlib} 2>/dev/null); do for lib in $(ls ${LIBNAME}.{so,rlib} 2>/dev/null); do
echo Installing $lib echo Installing $lib
install -D -m 755 $lib ${D}/${rustlibdir}/$lib install -D -m 755 $lib ${D}/${rustlibdest}/$lib
done done
} }
oe_install_rust_bin () { oe_install_rust_bin () {
echo Installing ${BINNAME} echo Installing ${BINNAME}
install -D -m 755 ${BINNAME} ${D}/${bindir}/${BINNAME} install -D -m 755 ${BINNAME} ${D}/${rustbindest}/${BINNAME}
} }
do_rust_bin_fixups() { do_rust_bin_fixups() {
@@ -101,13 +144,6 @@ do_rust_bin_fixups() {
echo "Strip rust note: $f" echo "Strip rust note: $f"
${OBJCOPY} -R .note.rustc $f $f ${OBJCOPY} -R .note.rustc $f $f
done done
for f in `find ${PKGD}`; do
file "$f" | grep -q ELF || continue
readelf -d "$f" | grep RUNPATH | grep -q rustlib || continue
echo "Set rpath:" "$f"
patchelf --set-rpath '$ORIGIN:'${rustlibdir}:${rustlib} "$f"
done
} }
PACKAGE_PREPROCESS_FUNCS += "do_rust_bin_fixups" PACKAGE_PREPROCESS_FUNCS += "do_rust_bin_fixups"

View File

@@ -1,15 +1,55 @@
# Common variables used by all Rust builds # Common variables used by all Rust builds
export rustlibdir = "${libdir}/rust" export rustlibdir = "${libdir}/rust"
FILES_${PN} += "${rustlibdir}/*.so" FILES:${PN} += "${rustlibdir}/*.so"
FILES_${PN}-dev += "${rustlibdir}/*.rlib" FILES:${PN}-dev += "${rustlibdir}/*.rlib ${rustlibdir}/*.rmeta"
FILES_${PN}-dbg += "${rustlibdir}/.debug" FILES:${PN}-dbg += "${rustlibdir}/.debug"
RUSTLIB = "-L ${STAGING_LIBDIR}/rust" RUSTLIB = "-L ${STAGING_LIBDIR}/rust"
RUSTFLAGS += "-C rpath ${RUSTLIB}" RUST_DEBUG_REMAP = "--remap-path-prefix=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
RUSTFLAGS += "${RUSTLIB} ${RUST_DEBUG_REMAP}"
RUSTLIB_DEP ?= "libstd-rs" RUSTLIB_DEP ?= "libstd-rs"
RUST_TARGET_PATH = "${STAGING_LIBDIR_NATIVE}/rustlib"
RUST_PANIC_STRATEGY ?= "unwind"
# Native builds are not effected by TCLIBC. Without this, rust-native
# thinks it's "target" (i.e. x86_64-linux) is a musl target.
RUST_LIBC = "${TCLIBC}"
RUST_LIBC:class-native = "glibc"
def determine_libc(d, thing):
'''Determine which libc something should target'''
# BUILD is never musl, TARGET may be musl or glibc,
# HOST could be musl, but only if a compiler is built to be run on
# target in which case HOST_SYS != BUILD_SYS.
if thing == 'TARGET':
libc = d.getVar('RUST_LIBC')
elif thing == 'BUILD' and (d.getVar('HOST_SYS') != d.getVar('BUILD_SYS')):
libc = d.getVar('RUST_LIBC')
else:
libc = d.getVar('RUST_LIBC:class-native')
return libc
def target_is_armv7(d):
'''Determine if target is armv7'''
# TUNE_FEATURES may include arm* even if the target is not arm
# in the case of *-native packages
if d.getVar('TARGET_ARCH') != 'arm':
return False
feat = d.getVar('TUNE_FEATURES')
feat = frozenset(feat.split())
mach_overrides = d.getVar('MACHINEOVERRIDES')
mach_overrides = frozenset(mach_overrides.split(':'))
v7=frozenset(['armv7a', 'armv7r', 'armv7m', 'armv7ve'])
if mach_overrides.isdisjoint(v7) and feat.isdisjoint(v7):
return False
else:
return True
# Responsible for taking Yocto triples and converting it to Rust triples # Responsible for taking Yocto triples and converting it to Rust triples
def rust_base_triple(d, thing): def rust_base_triple(d, thing):
''' '''
Mangle bitbake's *_SYS into something that rust might support (see Mangle bitbake's *_SYS into something that rust might support (see
@@ -18,11 +58,16 @@ def rust_base_triple(d, thing):
Note that os is assumed to be some linux form Note that os is assumed to be some linux form
''' '''
arch = d.getVar('{}_ARCH'.format(thing), True) # The llvm-target for armv7 is armv7-unknown-linux-gnueabihf
if thing == "TARGET" and target_is_armv7(d):
arch = "armv7"
else:
arch = d.getVar('{}_ARCH'.format(thing))
# All the Yocto targets are Linux and are 'unknown' # All the Yocto targets are Linux and are 'unknown'
vendor = "-unknown" vendor = "-unknown"
os = d.getVar('{}_OS'.format(thing), True) os = d.getVar('{}_OS'.format(thing))
libc = d.getVar('TCLIBC', True) libc = determine_libc(d, thing)
# Prefix with a dash and convert glibc -> gnu # Prefix with a dash and convert glibc -> gnu
if libc == "glibc": if libc == "glibc":
@@ -58,7 +103,7 @@ def rust_base_triple(d, thing):
# #
# Rust additionally will use two additional cases: # Rust additionally will use two additional cases:
# - undecorated (e.g. CC) - equivalent to TARGET # - undecorated (e.g. CC) - equivalent to TARGET
# - triple suffix (e.g. CC_x86_64_unknown_linux_gnu) - both # - triple suffix (e.g. CC:x86_64_unknown_linux_gnu) - both
# see: https://github.com/alexcrichton/gcc-rs # see: https://github.com/alexcrichton/gcc-rs
# The way that Rust's internal triples and Yocto triples are mapped together # The way that Rust's internal triples and Yocto triples are mapped together
# its likely best to not use the triple suffix due to potential confusion. # its likely best to not use the triple suffix due to potential confusion.
@@ -74,9 +119,11 @@ RUST_TARGET_SYS = "${@rust_base_triple(d, 'TARGET')}"
# use those commands based on the prefix. # use those commands based on the prefix.
WRAPPER_DIR = "${WORKDIR}/wrapper" WRAPPER_DIR = "${WORKDIR}/wrapper"
RUST_BUILD_CC = "${WRAPPER_DIR}/build-rust-cc" RUST_BUILD_CC = "${WRAPPER_DIR}/build-rust-cc"
RUST_BUILD_CXX = "${WRAPPER_DIR}/build-rust-cxx"
RUST_BUILD_CCLD = "${WRAPPER_DIR}/build-rust-ccld" RUST_BUILD_CCLD = "${WRAPPER_DIR}/build-rust-ccld"
RUST_BUILD_AR = "${WRAPPER_DIR}/build-rust-ar" RUST_BUILD_AR = "${WRAPPER_DIR}/build-rust-ar"
RUST_TARGET_CC = "${WRAPPER_DIR}/target-rust-cc" RUST_TARGET_CC = "${WRAPPER_DIR}/target-rust-cc"
RUST_TARGET_CXX = "${WRAPPER_DIR}/target-rust-cxx"
RUST_TARGET_CCLD = "${WRAPPER_DIR}/target-rust-ccld" RUST_TARGET_CCLD = "${WRAPPER_DIR}/target-rust-ccld"
RUST_TARGET_AR = "${WRAPPER_DIR}/target-rust-ar" RUST_TARGET_AR = "${WRAPPER_DIR}/target-rust-ar"
@@ -86,30 +133,41 @@ create_wrapper () {
cat <<- EOF > "${file}" cat <<- EOF > "${file}"
#!/bin/sh #!/bin/sh
$@ "\$@" exec $@ "\$@"
EOF EOF
chmod +x "${file}" chmod +x "${file}"
} }
export WRAPPER_TARGET_CC = "${CC}"
export WRAPPER_TARGET_CXX = "${CXX}"
export WRAPPER_TARGET_CCLD = "${CCLD}"
export WRAPPER_TARGET_LDFLAGS = "${LDFLAGS}"
export WRAPPER_TARGET_AR = "${AR}"
# compiler is used by gcc-rs # compiler is used by gcc-rs
# linker is used by rustc/cargo # linker is used by rustc/cargo
# archiver is used by the build of libstd-rs # archiver is used by the build of libstd-rs
do_rust_create_wrappers () { do_rust_create_wrappers () {
mkdir -p "${WRAPPER_DIR}" mkdir -p "${WRAPPER_DIR}"
# Yocto Build / Rust Host compiler # Yocto Build / Rust Host C compiler
create_wrapper "${RUST_BUILD_CC}" "${BUILD_CC}" create_wrapper "${RUST_BUILD_CC}" "${BUILD_CC}"
# Yocto Build / Rust Host C++ compiler
create_wrapper "${RUST_BUILD_CXX}" "${BUILD_CXX}"
# Yocto Build / Rust Host linker # Yocto Build / Rust Host linker
create_wrapper "${RUST_BUILD_CCLD}" "${BUILD_CCLD}" "${BUILD_LDFLAGS}" create_wrapper "${RUST_BUILD_CCLD}" "${BUILD_CCLD}" "${BUILD_LDFLAGS}"
# Yocto Build / Rust Host archiver # Yocto Build / Rust Host archiver
create_wrapper "${RUST_BUILD_AR}" "${BUILD_AR}" create_wrapper "${RUST_BUILD_AR}" "${BUILD_AR}"
# Yocto Target / Rust Target compiler # Yocto Target / Rust Target C compiler
create_wrapper "${RUST_TARGET_CC}" "${CC}" create_wrapper "${RUST_TARGET_CC}" "${WRAPPER_TARGET_CC}"
# Yocto Target / Rust Target C++ compiler
create_wrapper "${RUST_TARGET_CXX}" "${WRAPPER_TARGET_CXX}"
# Yocto Target / Rust Target linker # Yocto Target / Rust Target linker
create_wrapper "${RUST_TARGET_CCLD}" "${CCLD}" "${LDFLAGS}" create_wrapper "${RUST_TARGET_CCLD}" "${WRAPPER_TARGET_CCLD}" "${WRAPPER_TARGET_LDFLAGS}"
# Yocto Target / Rust Target archiver # Yocto Target / Rust Target archiver
create_wrapper "${RUST_TARGET_AR}" "${AR}" create_wrapper "${RUST_TARGET_AR}" "${WRAPPER_TARGET_AR}"
} }
addtask rust_create_wrappers before do_configure after do_patch addtask rust_create_wrappers before do_configure after do_patch

View File

@@ -8,14 +8,14 @@ def rust_base_dep(d):
# Taken from meta/classes/base.bbclass `base_dep_prepend` and modified to # Taken from meta/classes/base.bbclass `base_dep_prepend` and modified to
# use rust instead of gcc # use rust instead of gcc
deps = "" deps = ""
if not d.getVar('INHIBIT_DEFAULT_RUST_DEPS', True): if not d.getVar('INHIBIT_DEFAULT_RUST_DEPS'):
if (d.getVar('HOST_SYS', True) != d.getVar('BUILD_SYS', True)): if (d.getVar('HOST_SYS') != d.getVar('BUILD_SYS')):
deps += " virtual/${TARGET_PREFIX}rust ${RUSTLIB_DEP}" deps += " virtual/${TARGET_PREFIX}rust ${RUSTLIB_DEP}"
else: else:
deps += " rust-native" deps += " rust-native"
return deps return deps
DEPENDS_append = " ${@rust_base_dep(d)}" DEPENDS:append = " ${@rust_base_dep(d)}"
# BUILD_LDFLAGS # BUILD_LDFLAGS
# ${STAGING_LIBDIR_NATIVE} # ${STAGING_LIBDIR_NATIVE}
@@ -42,3 +42,4 @@ rustlib_suffix="${TUNE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/rustlib/${HOST_SYS}/li
rustlib_src="${prefix}/lib/${rustlib_suffix}" rustlib_src="${prefix}/lib/${rustlib_suffix}"
# Host sysroot standard library path # Host sysroot standard library path
rustlib="${libdir}/${rustlib_suffix}" rustlib="${libdir}/${rustlib_suffix}"
rustlib:class-native="${libdir}/rustlib/${BUILD_SYS}/lib"

View File

@@ -8,12 +8,11 @@ BBFILES ?= ""
BBLAYERS ?= " \ BBLAYERS ?= " \
##OEROOT##/meta-rust \ ##OEROOT##/meta-rust \
##OEROOT##/meta \ ##OEROOT##/meta \
##OEROOT##/meta-yocto \ ##OEROOT##/meta-poky \
##OEROOT##/meta-yocto-bsp \ ##OEROOT##/meta-yocto-bsp \
##OEROOT##/meta-openembedded/meta-oe \ ##OEROOT##/meta-openembedded/meta-oe \
##OEROOT##/meta-openembedded/meta-networking \ ##OEROOT##/meta-openembedded/meta-networking \
##OEROOT##/meta-openembedded/meta-python \ ##OEROOT##/meta-openembedded/meta-python \
##OEROOT##/meta-openembedded/meta-ruby \
" "
BBLAYERS_NON_REMOVABLE ?= " \ BBLAYERS_NON_REMOVABLE ?= " \
##OEROOT##/meta \ ##OEROOT##/meta \

View File

@@ -1,7 +1,7 @@
# Build errors with PIE options enabled # Build errors with PIE options enabled
SECURITY_CFLAGS_pn-rust-native = "${SECURITY_NO_PIE_CFLAGS}" SECURITY_CFLAGS:pn-rust-native = "${SECURITY_NO_PIE_CFLAGS}"
SECURITY_CFLAGS_pn-rust-cross-${TARGET_ARCH} = "${SECURITY_NO_PIE_CFLAGS}" SECURITY_CFLAGS:pn-rust-cross-${TARGET_ARCH} = "${SECURITY_NO_PIE_CFLAGS}"
SECURITY_CFLAGS_pn-rust = "${SECURITY_NO_PIE_CFLAGS}" SECURITY_CFLAGS:pn-rust = "${SECURITY_NO_PIE_CFLAGS}"
SECURITY_CFLAGS_pn-rust-llvm = "${SECURITY_NO_PIE_CFLAGS}" SECURITY_CFLAGS:pn-rust-llvm = "${SECURITY_NO_PIE_CFLAGS}"
SECURITY_LDFLAGS_pn-rust-cross-arm = " -lssp_nonshared -lssp" SECURITY_LDFLAGS:pn-rust-cross-arm = " -lssp_nonshared -lssp"

View File

@@ -0,0 +1,13 @@
# include this in your distribution to easily switch between versions
# just by changing RUST_VERSION variable
RUST_VERSION ?= "1.51.0"
PREFERRED_VERSION_cargo ?= "${RUST_VERSION}"
PREFERRED_VERSION_cargo-native ?= "${RUST_VERSION}"
PREFERRED_VERSION_libstd-rs ?= "${RUST_VERSION}"
PREFERRED_VERSION_rust ?= "${RUST_VERSION}"
PREFERRED_VERSION_rust-cross-${TARGET_ARCH} ?= "${RUST_VERSION}"
PREFERRED_VERSION_rust-llvm ?= "${RUST_VERSION}"
PREFERRED_VERSION_rust-llvm-native ?= "${RUST_VERSION}"
PREFERRED_VERSION_rust-native ?= "${RUST_VERSION}"

View File

@@ -8,5 +8,8 @@ BBFILE_COLLECTIONS += "rust-layer"
BBFILE_PATTERN_rust-layer := "^${LAYERDIR}/" BBFILE_PATTERN_rust-layer := "^${LAYERDIR}/"
BBFILE_PRIORITY_rust-layer = "7" BBFILE_PRIORITY_rust-layer = "7"
LAYERDEPENDS_rust-layer = "core openembedded-layer"
LAYERSERIES_COMPAT_rust-layer = "dunfell gatesgarth hardknott honister"
# Override security flags # Override security flags
require conf/distro/include/rust_security_flags.inc require conf/distro/include/rust_security_flags.inc

View File

@@ -220,7 +220,7 @@ BB_DISKMON_DIRS = "\
#file://.* http://someserver.tld/share/sstate/PATH;downloadfilename=PATH \n \ #file://.* http://someserver.tld/share/sstate/PATH;downloadfilename=PATH \n \
#file://.* file:///some/local/dir/sstate/PATH" #file://.* file:///some/local/dir/sstate/PATH"
SSTATE_MIRRORS ?= "file://.* http://build-cache.asterius.io/sstate/PATH;downloadfilename=PATH \n" SSTATE_MIRRORS ?= "file://.* http://build-cache.asterius.io/master/sstate-cache/PATH;downloadfilename=PATH \n"
SOURCE_MIRROR_URL ?= "http://build-cache.asterius.io/downloads/" SOURCE_MIRROR_URL ?= "http://build-cache.asterius.io/downloads/"
INHERIT += "own-mirrors rm_work" INHERIT += "own-mirrors rm_work"
@@ -232,8 +232,8 @@ INHERIT += "own-mirrors rm_work"
# seen. The two lines below enable the SDL backend too. By default libsdl-native will # seen. The two lines below enable the SDL backend too. By default libsdl-native will
# be built, if you want to use your host's libSDL instead of the minimal libsdl built # be built, if you want to use your host's libSDL instead of the minimal libsdl built
# by libsdl-native then uncomment the ASSUME_PROVIDED line below. # by libsdl-native then uncomment the ASSUME_PROVIDED line below.
PACKAGECONFIG_append_pn-qemu-native = " sdl" PACKAGECONFIG:append:pn-qemu-native = " sdl"
PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl" PACKAGECONFIG:append:pn-nativesdk-qemu = " sdl"
#ASSUME_PROVIDED += "libsdl-native" #ASSUME_PROVIDED += "libsdl-native"
# CONF_VERSION is increased each time build/conf/ changes incompatibly and is used to # CONF_VERSION is increased each time build/conf/ changes incompatibly and is used to

View File

@@ -35,21 +35,6 @@ class Crate(Wget):
"""Class to fetch crates via wget""" """Class to fetch crates via wget"""
def _cargo_path(self, rootdir, component):
# TODO: make this less brittle
# This can go away entirely once we can build a cargo that supports source-replacement
repo = "github.com-1ecc6299db9ec823"
return os.path.join(rootdir, "cargo_home", "registry", component, repo)
def _cargo_src_path(self, rootdir):
return self._cargo_path(rootdir, "src")
def _cargo_index_path(self, rootdir):
return self._cargo_path(rootdir, "index")
def _cargo_cache_path(self, rootdir):
return self._cargo_path(rootdir, "cache")
def _cargo_bitbake_path(self, rootdir): def _cargo_bitbake_path(self, rootdir):
return os.path.join(rootdir, "cargo_home", "bitbake") return os.path.join(rootdir, "cargo_home", "bitbake")
@@ -57,7 +42,7 @@ class Crate(Wget):
""" """
Check to see if a given url is for this fetcher Check to see if a given url is for this fetcher
""" """
return ud.type in ['crate', 'crate-index'] return ud.type in ['crate']
def recommends_checksum(self, urldata): def recommends_checksum(self, urldata):
return False return False
@@ -69,8 +54,6 @@ class Crate(Wget):
if ud.type == 'crate': if ud.type == 'crate':
self._crate_urldata_init(ud, d) self._crate_urldata_init(ud, d)
elif ud.type == 'crate-index':
self._index_urldata_init(ud, d)
super(Crate, self).urldata_init(ud, d) super(Crate, self).urldata_init(ud, d)
@@ -102,71 +85,15 @@ class Crate(Wget):
logger.debug(2, "Fetching %s to %s" % (ud.url, ud.parm['downloadfilename'])) logger.debug(2, "Fetching %s to %s" % (ud.url, ud.parm['downloadfilename']))
def _index_urldata_init(self, ud, d):
"""
Sets up the download for the cargo index
"""
# URL syntax is: crate-index://REV
# break the URL apart by /
parts = ud.url.split('/')
if len(parts) != 4:
raise bb.fetch2.ParameterError("Invalid URL: Must be crate-index://HOST/REV", ud.url)
# last field is the rev
rev = parts[3]
host = parts[2]
if host == 'crates.io':
host = 'github.com/rust-lang/crates.io-index'
ud.url = "https://%s/archive/%s.tar.gz" % (host, rev)
ud.parm['downloadfilename'] = 'cargo-index-%s.tar.gz' % rev
ud.parm['name'] = "index"
logger.debug(2, "Fetching crate index %s" % ud.url)
def unpack(self, ud, rootdir, d): def unpack(self, ud, rootdir, d):
""" """
Uses the crate to build the necessary paths for cargo to utilize it Uses the crate to build the necessary paths for cargo to utilize it
""" """
if ud.type == 'crate-index': if ud.type == 'crate':
return self._index_unpack(ud, rootdir, d)
elif ud.type == 'crate':
return self._crate_unpack(ud, rootdir, d) return self._crate_unpack(ud, rootdir, d)
else: else:
super(Crate, self).unpack(ud, rootdir, d) super(Crate, self).unpack(ud, rootdir, d)
def _index_unpack(self, ud, rootdir, d):
"""
Unpacks the index
"""
thefile = ud.localpath
cargo_index = self._cargo_index_path(rootdir)
cmd = "tar -xz --no-same-owner --strip-components 1 -f %s -C %s" % (thefile, cargo_index)
# change to the rootdir to unpack but save the old working dir
save_cwd = os.getcwd()
os.chdir(rootdir)
# ensure we've got these paths made
bb.utils.mkdirhier(cargo_index)
# path it
path = d.getVar('PATH', True)
if path:
cmd = "PATH=\"%s\" %s" % (path, cmd)
bb.note("Unpacking %s to %s/" % (thefile, cargo_index))
ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True)
os.chdir(save_cwd)
if ret != 0:
raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), ud.url)
def _crate_unpack(self, ud, rootdir, d): def _crate_unpack(self, ud, rootdir, d):
""" """
Unpacks a crate Unpacks a crate
@@ -180,12 +107,10 @@ class Crate(Wget):
save_cwd = os.getcwd() save_cwd = os.getcwd()
os.chdir(rootdir) os.chdir(rootdir)
pn = d.getVar('BPN', True) pn = d.getVar('BPN')
if pn == ud.parm.get('name'): if pn == ud.parm.get('name'):
cmd = "tar -xz --no-same-owner -f %s" % thefile cmd = "tar -xz --no-same-owner -f %s" % thefile
else: else:
self._crate_unpack_old_layout(ud, rootdir, d)
cargo_bitbake = self._cargo_bitbake_path(rootdir) cargo_bitbake = self._cargo_bitbake_path(rootdir)
cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_bitbake) cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_bitbake)
@@ -202,7 +127,7 @@ class Crate(Wget):
metadata['package'] = tarhash metadata['package'] = tarhash
# path it # path it
path = d.getVar('PATH', True) path = d.getVar('PATH')
if path: if path:
cmd = "PATH=\"%s\" %s" % (path, cmd) cmd = "PATH=\"%s\" %s" % (path, cmd)
bb.note("Unpacking %s to %s/" % (thefile, os.getcwd())) bb.note("Unpacking %s to %s/" % (thefile, os.getcwd()))
@@ -222,34 +147,3 @@ class Crate(Wget):
mdpath = os.path.join(bbpath, cratepath, mdfile) mdpath = os.path.join(bbpath, cratepath, mdfile)
with open(mdpath, "w") as f: with open(mdpath, "w") as f:
json.dump(metadata, f) json.dump(metadata, f)
def _crate_unpack_old_layout(self, ud, rootdir, d):
"""
Unpacks a crate in the old location that tried to emulate
the Cargo registry layout.
"""
thefile = ud.localpath
cargo_src = self._cargo_src_path(rootdir)
cargo_cache = self._cargo_cache_path(rootdir)
cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_src)
# ensure we've got these paths made
bb.utils.mkdirhier(cargo_cache)
bb.utils.mkdirhier(cargo_src)
bb.note("Copying %s to %s/" % (thefile, cargo_cache))
shutil.copy(thefile, cargo_cache)
# path it
path = d.getVar('PATH', True)
if path:
cmd = "PATH=\"%s\" %s" % (path, cmd)
bb.note("Unpacking %s to %s/" % (thefile, os.getcwd()))
ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True)
if ret != 0:
raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), ud.url)

View File

@@ -1,20 +0,0 @@
DESCRIPTION = "Fast multiple substring searching with finite state machines."
HOMEPAGE = "https://github.com/BurntSushi/aho-corasick"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE-MIT;md5=8d0d0aa488af0ab9aafa3b85a7fc8e12"
DEPENDS = "memchr-rs"
inherit rust-bin
SRC_URI = "git://github.com/BurntSushi/aho-corasick.git;protocol=https"
SRCREV = "e1bca33dcc060d587e802320a79cbb035f37f8fa"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,24 +0,0 @@
DESCRIPTION = "A macro to generate structures which behave like bitflags."
HOMEPAGE = "https://github.com/rust-lang-nursery/bitflags"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
"
inherit rust-bin
SRC_URI = "git://github.com/rust-lang-nursery/bitflags.git;protocol=https"
SRCREV = "41aa413a7c30d70b93b44ab5447276c381ef249e"
S = "${WORKDIR}/git"
LIB_SRC = "${S}/src/lib.rs"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,28 +0,0 @@
DESCRIPTION = "A (mostly) pure-Rust implementation of various common cryptographic algorithms."
HOMEPAGE = "https://github.com/DaGenix/rust-crypto/"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "\
file://LICENSE-MIT;md5=4311034aa04489226c1fc3f816dbfb5a \
file://LICENSE-APACHE;md5=a02fef6dccf840318474c108a8281b77 \
"
DEPENDS = "\
libc-rs \
time-rs \
rand-rs \
rustc-serialize-rs \
"
inherit rust-bin
SRC_URI = "git://github.com/DaGenix/rust-crypto.git;protocol=https"
SRCREV = "5571cb41690b9cee12025192393ea7df0eddc21b"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,20 +0,0 @@
DESCRIPTION = "DBus binding for rust"
HOMEPAGE = "https://github.com/diwic/dbus-rs"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
DEPENDS = "libc-rs dbus"
inherit rust-bin
SRC_URI = "git://github.com/diwic/dbus-rs.git;protocol=https"
SRCREV = "d23c8b7fecd5a8e82131893250a5ac376799faff"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,19 +0,0 @@
DESCRIPTION = "A copy of libstd's debug builders for use before they stabilize"
HOMEPAGE = "https://github.com/sfackler/rust-debug-builders"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "file://Cargo.toml;md5=97a131dc4ae910d242387f2c9d1a2ce8"
inherit rust-bin
SRC_URI = "git://github.com/sfackler/rust-debug-builders.git;protocol=https"
SRCREV = "c6943b72c7808ddaa151d08b824525cc7420cb9b"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,23 +0,0 @@
DESCRIPTION = "getopts-like option parsing"
HOMEPAGE = "https://github.com/rust-lang/getopts"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
"
DEPENDS = "log-rs"
inherit rust-bin
SRC_URI = "git://github.com/rust-lang/getopts.git;protocol=https"
SRCREV = "a13c62b7d860b6d370129ebb972bf5e0373c5be7"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,23 +0,0 @@
DESCRIPTION = "A macro for declaring lazily evaluated statics in Rust."
HOMEPAGE = "https://github.com/rust-lang-nursery/lazy-static.rs"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "\
file://LICENSE;md5=5795ddb4df1d696d439b6667081cffc9 \
"
inherit rust-bin
SRC_URI = "git://github.com/rust-lang-nursery/lazy-static.rs.git;protocol=https"
SRCREV = "ffe65c818474f863945ca535c0e53f3b8b848ff7"
S = "${WORKDIR}/git"
LIB_SRC = "${S}/src/lib.rs"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,24 +0,0 @@
DESCRIPTION = "A Rust library with native bindings to the types and functions commonly found on various systems, including libc."
HOMEPAGE = "https://github.com/rust-lang/libc"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
"
inherit rust-bin
SRC_URI = "git://github.com/rust-lang/libc.git;protocol=https"
SRCREV = "f54b9c90ee68889181472d4d4a5dd9e43d0e5318"
S = "${WORKDIR}/git"
LIB_SRC = "${S}/src/lib.rs"
do_compile () {
oe_compile_rust_lib --cfg feature='"cargo-build"'
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,6 +0,0 @@
DESCRIPTION = "An logging implementation for `log` which is configured via an environment variable"
DEPENDS = "regex-rs log-rs"
require log.inc
LIB_SRC = "${S}/env/src/lib.rs"

View File

@@ -1,4 +0,0 @@
DESCRIPTION = "A Rust library providing a lightweight logging facade"
DEPENDS = "libc-rs"
require log.inc

View File

@@ -1,22 +0,0 @@
HOMEPAGE = "https://github.com/rust-lang/log"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
"
inherit rust-bin
SRC_URI = "git://github.com/rust-lang/log.git;protocol=https"
SRCREV = "5453e16166ec451afc9738978ca01f162127ebbe"
PV = "0.3.1"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,20 +0,0 @@
DESCRIPTION = "Safe interface to memchr"
HOMEPAGE = "https://github.com/BurntSushi/rust-memchr"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE-MIT;md5=8d0d0aa488af0ab9aafa3b85a7fc8e12"
DEPENDS = "libc-rs"
inherit rust-bin
SRC_URI = "git://github.com/BurntSushi/rust-memchr.git;protocol=https"
SRCREV = "4f9a13f95e6e00f2847c093c56b41b9c1d58d3c4"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,5 +0,0 @@
require num.inc
DEPENDS += "num-traits"
LIB_SRC = "${S}/integer/src/lib.rs"

View File

@@ -1,6 +0,0 @@
require num.inc
DEPENDS += "num-traits"
DEPENDS += "num-integer"
LIB_SRC = "${S}/iter/src/lib.rs"

View File

@@ -1,3 +0,0 @@
require num.inc
LIB_SRC = "${S}/traits/src/lib.rs"

View File

@@ -1,22 +0,0 @@
DESCRIPTION = "A collection of numeric types and traits for Rust, including bigint, complex, rational, range iterators, generic integers, and more!"
HOMEPAGE = "https://github.com/rust-num/num"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
"
inherit rust-bin
SRC_URI = "git://github.com/rust-num/num.git;protocol=https"
SRCREV = "d9f08cb148cc686ec407c1e42fbd4536cde6ac82"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,9 +0,0 @@
require num.inc
DEPENDS += "\
num-traits \
num-integer \
num-iter \
"
LIB_SRC = "${S}/src/lib.rs"

View File

@@ -0,0 +1,18 @@
SUMMARY = "Host SDK package for Rust cross canadian toolchain"
PN = "packagegroup-rust-cross-canadian-${MACHINE}"
inherit cross-canadian packagegroup
PACKAGEGROUP_DISABLE_COMPLEMENTARY = "1"
RUST="rust-cross-canadian-${TRANSLATED_TARGET_ARCH}"
CARGO="cargo-cross-canadian-${TRANSLATED_TARGET_ARCH}"
RUST_TOOLS="rust-tools-cross-canadian-${TRANSLATED_TARGET_ARCH}"
RDEPENDS:${PN} = " \
${@all_multilib_tune_values(d, 'RUST')} \
${@all_multilib_tune_values(d, 'CARGO')} \
rust-cross-canadian-src \
${@all_multilib_tune_values(d, 'RUST_TOOLS')} \
"

View File

@@ -1,23 +0,0 @@
DESCRIPTION = "Random number generators and other randomness functionality."
HOMEPAGE = "https://github.com/rust-lang/rand"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
"
DEPENDS = "libc-rs"
inherit rust-bin
SRC_URI = "git://github.com/rust-lang/rand.git;protocol=https"
SRCREV = "f872fda5fb8fb899a837ee9eee0332076a8f5300"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,10 +0,0 @@
DESCRIPTION = "An implementation of regular expressions for Rust"
DEPENDS = "\
aho-corasick-rs \
memchr-rs \
regex-syntax-rs \
"
require regex.inc
S = "${WORKDIR}/git"

View File

@@ -1,5 +0,0 @@
DESCRIPTION = "A regular expression parser"
require regex.inc
LIB_SRC = "${S}/regex-syntax/src/lib.rs"

View File

@@ -1,22 +0,0 @@
HOMEPAGE = "https://github.com/rust-lang/regex"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
"
SRC_URI = "git://github.com/rust-lang/regex.git;protocol=https"
SRCREV = "c9e6781a6845478aa2d8ebc86972755f854fdbe0"
PV = "0.1.38"
inherit rust-bin
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,22 +0,0 @@
DESCRIPTION = "Generic serialization/deserialization support"
HOMEPAGE = "https://github.com/rust-lang/rustc-serialize"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
"
inherit rust-bin
SRC_URI = "git://github.com/rust-lang/rustc-serialize.git;protocol=https"
SRCREV = "64b38a1f31a9af6eabf2894437aa5ccc3e457e68"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,26 +0,0 @@
DESCRIPTION = "Utilities for working with time-related functions in Rust"
HOMEPAGE = "https://github.com/rust-lang/time"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
"
DEPENDS = "libc-rs"
inherit rust-bin
SRC_URI = "git://github.com/rust-lang/time.git;protocol=https"
SRCREV = "32b212b877b836dbfdc97af5674d91672e70ecbd"
S = "${WORKDIR}/git"
do_compile () {
rm -rf time_helpers.o libtimehelpers.a
${CC} ${S}/src/time_helpers.c -fPIC -c -o time_helpers.o
${AR} rcs libtime_helpers.a time_helpers.o
oe_compile_rust_lib -L native=$PWD -l static=time_helpers
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,20 +0,0 @@
DESCRIPTION = "FFI bindings to libudev"
HOMEPAGE = "https://github.com/dcuddeback/libudev-sys"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=bbd2acd29c4ba5d4591b03e2757c04a3"
DEPENDS = "libudev-sys-rs"
inherit rust-bin
SRC_URI = "git://github.com/dcuddeback/libudev-rs.git;protocol=https"
SRCREV = "d55763c626790e2e8724947503238731843a969a"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,22 +0,0 @@
DESCRIPTION = "FFI bindings to libudev"
HOMEPAGE = "https://github.com/dcuddeback/libudev-sys"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=bbd2acd29c4ba5d4591b03e2757c04a3"
DEPENDS += "libudev-sys-rs"
DEPENDS += "libc-rs"
inherit rust-bin
SRC_URI = "git://github.com/dcuddeback/libudev-rs.git;protocol=https"
SRCREV = "3da791245f206d0cf5a856531c574b8646b0f059"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,22 +0,0 @@
DESCRIPTION = "FFI bindings to libudev"
HOMEPAGE = "https://github.com/dcuddeback/libudev-sys"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=bbd2acd29c4ba5d4591b03e2757c04a3"
DEPENDS = "libc-rs udev"
inherit rust-bin
SRC_URI = "git://github.com/dcuddeback/libudev-sys.git;protocol=https"
SRCREV = "14c24afc61e3315dffddab2c7f36999a16a002d8"
S = "${WORKDIR}/git"
RUSTC_FLAGS += "-ludev"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,22 +0,0 @@
DESCRIPTION = "FFI bindings to libudev"
HOMEPAGE = "https://github.com/dcuddeback/libudev-sys"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=bbd2acd29c4ba5d4591b03e2757c04a3"
DEPENDS = "libc-rs udev"
inherit rust-bin
SRC_URI = "git://github.com/dcuddeback/libudev-sys.git;protocol=https"
SRCREV = "c49163f87d4d109ec21bcf8f8c51db560ed31b22"
S = "${WORKDIR}/git"
RUSTC_FLAGS += "-ludev"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -1,20 +0,0 @@
DESCRIPTION = "Unix domain socket bindings for Rust"
HOMEPAGE = "https://github.com/sfackler/rust-unix-socket"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=bde86283c1fd74e84ebc3cf6dd7011d0"
DEPENDS = "libc-rs debug-builders-rs"
inherit rust-bin
SRC_URI = "git://github.com/sfackler/rust-unix-socket.git;protocol=https"
SRCREV = "d0f47ae888267a718072c3be5eed42ba1f637097"
S = "${WORKDIR}/git"
do_compile () {
oe_compile_rust_lib
}
do_install () {
oe_install_rust_lib
}

View File

@@ -0,0 +1,74 @@
SUMMARY = "Cargo, a package manager for Rust cross canadian flavor."
RUST_ALTERNATE_EXE_PATH = "${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-config"
HOST_SYS = "${HOST_ARCH}-unknown-linux-gnu"
CARGO_RUST_TARGET_CCLD = "${RUST_BUILD_CCLD}"
require recipes-devtools/rust/rust-common.inc
require cargo.inc
CARGO = "${WORKDIR}/${CARGO_SNAPSHOT}/bin/cargo"
BASEDEPENDS:remove = "cargo-native"
export RUST_TARGET_PATH="${WORKDIR}/targets/"
RUSTLIB = " \
-L ${STAGING_DIR_NATIVE}/${SDKPATHNATIVE}/usr/lib/${TARGET_SYS}/rustlib/${HOST_SYS}/lib \
"
DEPENDS += "rust-native \
rust-cross-canadian-${TRANSLATED_TARGET_ARCH} \
virtual/nativesdk-${HOST_PREFIX}compilerlibs \
nativesdk-openssl nativesdk-zlib \
virtual/nativesdk-libc \
"
inherit cross-canadian
PN = "cargo-cross-canadian-${TRANSLATED_TARGET_ARCH}"
LLVM_TARGET[x86_64] = "${RUST_HOST_SYS}"
python do_rust_gen_targets () {
wd = d.getVar('WORKDIR') + '/targets/'
rust_gen_target(d, 'BUILD', wd, "", "generic", d.getVar('BUILD_ARCH'))
rust_gen_target(d, 'HOST', wd, "", "generic", d.getVar('HOST_ARCH'))
}
do_compile:prepend () {
PKG_CONFIG_PATH="${RECIPE_SYSROOT_NATIVE}/usr/lib/pkgconfig:${PKG_CONFIG_PATH}"
}
do_install () {
SYS_BINDIR=$(dirname ${D}${bindir})
install -d "${SYS_BINDIR}"
install -m 755 "${B}/target/${CARGO_TARGET_SUBDIR}/cargo" "${SYS_BINDIR}"
for i in ${SYS_BINDIR}/*; do
chrpath -r "\$ORIGIN/../lib" ${i}
done
ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
mkdir "${ENV_SETUP_DIR}"
ENV_SETUP_SH="${ENV_SETUP_DIR}/cargo.sh"
cat <<- EOF > "${ENV_SETUP_SH}"
export CARGO_HOME="\$OECORE_TARGET_SYSROOT/home/cargo"
mkdir -p "\$CARGO_HOME"
# Init the default target once, it might be otherwise user modified.
if [ ! -f "\$CARGO_HOME/config" ]; then
touch "\$CARGO_HOME/config"
echo "[build]" >> "\$CARGO_HOME/config"
echo 'target = "'${TARGET_SYS}'"' >> "\$CARGO_HOME/config"
fi
# Keep the below off as long as HTTP/2 is disabled.
export CARGO_HTTP_MULTIPLEXING=false
export CARGO_HTTP_CAINFO="\$OECORE_NATIVE_SYSROOT/etc/ssl/certs/ca-certificates.crt"
EOF
}
PKG_SYS_BINDIR = "${SDKPATHNATIVE}/usr/bin"
FILES:${PN} += "${base_prefix}/environment-setup.d ${PKG_SYS_BINDIR}"

View File

@@ -0,0 +1,6 @@
require recipes-devtools/rust/rust-source-${PV}.inc
require recipes-devtools/rust/rust-snapshot-${PV}.inc
FILESEXTRAPATHS:prepend := "${THISDIR}/cargo-${PV}:"
require cargo-cross-canadian.inc

View File

@@ -0,0 +1,6 @@
require recipes-devtools/rust/rust-source-${PV}.inc
require recipes-devtools/rust/rust-snapshot-${PV}.inc
FILESEXTRAPATHS:prepend := "${THISDIR}/cargo-${PV}:"
require cargo-cross-canadian.inc

View File

@@ -1,4 +0,0 @@
CARGO_SNAPSHOT = "2016-09-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz;downloadfilename=cargo-nightly-x86_64-unknown-linux-gnu-2016-09-01.tar.gz"
SRC_URI[md5sum] = "d41ebf79290a7c9c9e5df87cb27e5091"
SRC_URI[sha256sum] = "365e5cad79512d244b8ced32f8e5b86a710fc6c17f0d0f5f744b8058ef6dc756"

View File

@@ -1,59 +1,56 @@
inherit cargo SUMMARY ?= "Cargo, a package manager for Rust."
inherit patch HOMEPAGE = "https://crates.io"
SUMMARY = "Cargo downloads your Rust project's dependencies and builds your project"
HOMEPAGE = "http://crates.io"
SECTION = "devel"
LICENSE = "MIT | Apache-2.0" LICENSE = "MIT | Apache-2.0"
SECTION = "devel"
DEPENDS = "openssl zlib libgit2 curl ca-certificates libssh2" DEPENDS = "openssl zlib curl ca-certificates libssh2"
CARGO_INDEX_COMMIT = "6127fc24b0b6fe73fe4d339817fbf000b9a798a2" LIC_FILES_CHKSUM = " \
file://LICENSE-MIT;md5=b377b220f43d747efdec40d69fcaa69d \
SRC_URI = "\ file://LICENSE-APACHE;md5=71b224ca933f0676e26d5c2e2271331c \
http://static-rust-lang-org.s3.amazonaws.com/cargo-dist/${CARGO_SNAPSHOT} \ file://LICENSE-THIRD-PARTY;md5=f257ad009884cb88a3a87d6920e7180a \
crate-index://crates.io/${CARGO_INDEX_COMMIT} \
" "
B = "${S}"
# Used in libgit2-sys's build.rs, needed for pkg-config to be used S = "${RUSTSRC}/src/tools/cargo"
export LIBGIT2_SYS_USE_PKG_CONFIG = "1" CARGO_VENDORING_DIRECTORY = "${RUSTSRC}/vendor"
EXCLUDE_FROM_WORLD = "1"
# cargo's configure doesn't recognize --disable-static, so remove it. inherit cargo pkgconfig
DISABLE_STATIC = ""
do_configure () { do_cargo_setup_snapshot () {
"${S}/configure" \ ${WORKDIR}/rust-snapshot-components/${CARGO_SNAPSHOT}/install.sh --prefix="${WORKDIR}/${CARGO_SNAPSHOT}" --disable-ldconfig
"--prefix=${prefix}" \ # Need to use uninative's loader if enabled/present since the library paths
"--build=${BUILD_SYS}" \ # are used internally by rust and result in symbol mismatches if we don't
"--host=${HOST_SYS}" \ if [ ! -z "${UNINATIVE_LOADER}" -a -e "${UNINATIVE_LOADER}" ]; then
"--target=${TARGET_SYS}" \ patchelf-uninative ${WORKDIR}/${CARGO_SNAPSHOT}/bin/cargo --set-interpreter ${UNINATIVE_LOADER}
"--localstatedir=${localstatedir}" \ fi
"--sysconfdir=${sysconfdir}" \
"--datadir=${datadir}" \
"--infodir=${infodir}" \
"--mandir=${mandir}" \
"--libdir=${libdir}" \
"--disable-verify-install" \
${EXTRA_OECONF} \
|| die "Could not configure cargo"
cargo_do_configure
} }
do_compile () { addtask cargo_setup_snapshot after do_unpack before do_configure
oe_cargo_fix_env do_cargo_setup_snapshot[dirs] += "${WORKDIR}/${CARGO_SNAPSHOT}"
do_cargo_setup_snapshot[vardepsexclude] += "UNINATIVE_LOADER"
rm -rf target/snapshot
mkdir -p target
cp -R ${WORKDIR}/cargo-nightly-x86_64-unknown-linux-gnu/cargo target/snapshot
oe_runmake VERBOSE=1 do_compile:prepend () {
export RUSTC_BOOTSTRAP="1"
} }
do_install () { do_install () {
oe_runmake prepare-image-${TARGET_SYS} IMGDIR_${TARGET_SYS}="${D}${prefix}" install -d "${D}${bindir}"
install -m 755 "${B}/target/${CARGO_TARGET_SUBDIR}/cargo" "${D}${bindir}"
} }
BBCLASSEXTEND = "native" # Disabled due to incompatibility with libgit2 0.28.x (https://github.com/rust-lang/git2-rs/issues/458, https://bugs.gentoo.org/707746#c1)
# as shipped by Yocto Dunfell.
# According to https://github.com/rust-lang/git2-rs/issues/458#issuecomment-522567539, there are no compatibility guarantees between
# libgit2-sys and arbitrary system libgit2 versions, so better keep this turned off.
#export LIBGIT2_SYS_USE_PKG_CONFIG = "1"
# Needed for pkg-config to be used
export LIBSSH2_SYS_USE_PKG_CONFIG = "1"
# When building cargo-native we don't have cargo-native to use and depend on,
# so we must use the locally set up snapshot to bootstrap the build.
BASEDEPENDS:remove:class-native = "cargo-native"
CARGO:class-native = "${WORKDIR}/${CARGO_SNAPSHOT}/bin/cargo"

View File

@@ -1,105 +0,0 @@
require cargo-snapshot.inc
require cargo.inc
SRC_URI += " \
git://github.com/rust-lang/cargo.git;protocol=https;name=cargo \
file://0001-disable-cargo-snapshot-fetch.patch \
file://0001-Never-update-the-registry-index.patch \
crate://crates.io/advapi32-sys/0.1.2 \
crate://crates.io/bufstream/0.1.1 \
crate://crates.io/crossbeam/0.2.8 \
crate://crates.io/docopt/0.6.78 \
crate://crates.io/env_logger/0.3.2 \
crate://crates.io/filetime/0.1.10 \
crate://crates.io/flate2/0.2.13 \
crate://crates.io/fs2/0.2.3 \
crate://crates.io/glob/0.2.11 \
crate://crates.io/hamcrest/0.1.0 \
crate://crates.io/kernel32-sys/0.2.1 \
crate://crates.io/libc/0.2.8 \
crate://crates.io/log/0.3.5 \
crate://crates.io/num_cpus/0.2.11 \
crate://crates.io/regex/0.1.58 \
crate://crates.io/rustc-serialize/0.3.18 \
crate://crates.io/tar/0.4.5 \
crate://crates.io/tempdir/0.3.4 \
crate://crates.io/term/0.4.4 \
crate://crates.io/toml/0.1.28 \
crate://crates.io/url/1.1.0 \
crate://crates.io/winapi/0.2.6 \
crate://crates.io/semver/0.2.3 \
crate://crates.io/regex-syntax/0.3.0 \
crate://crates.io/utf8-ranges/0.1.3 \
crate://crates.io/gcc/0.3.26 \
crate://crates.io/unicode-normalization/0.1.2 \
crate://crates.io/libz-sys/1.0.2 \
crate://crates.io/rand/0.3.14 \
crate://crates.io/user32-sys/0.1.2 \
crate://crates.io/idna/0.1.0 \
crate://crates.io/strsim/0.3.0 \
crate://crates.io/matches/0.1.2 \
crate://crates.io/cmake/0.1.16 \
crate://crates.io/gdi32-sys/0.1.1 \
crate://crates.io/bitflags/0.1.1 \
crate://crates.io/unicode-bidi/0.2.3 \
crate://crates.io/pkg-config/0.3.8 \
crate://crates.io/winapi-build/0.1.1 \
crate://crates.io/memchr/0.1.10 \
crate://crates.io/pnacl-build-helper/1.4.10 \
crate://crates.io/nom/1.2.2 \
crate://crates.io/num/0.1.31 \
crate://crates.io/uuid/0.2.3 \
crate://crates.io/aho-corasick/0.5.1 \
crate://crates.io/libressl-pnacl-sys/2.1.6 \
crate://crates.io/miniz-sys/0.1.7 \
crate://crates.io/openssl-sys/0.7.8 \
crate://crates.io/url/0.5.10 \
"
# Compatible with Rust 1.10.0
# https://static.rust-lang.org/dist/channel-rust-1.10.0.toml
SRCREV_cargo = "259324cd8f9bb6e1068a3a2b77685e90fda3e3b6"
S = "${WORKDIR}/git"
LIC_FILES_CHKSUM ="\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \
"
## curl-rust
SRC_URI += "\
git://github.com/carllerche/curl-rust.git;protocol=https;destsuffix=curl-rust;name=curl-rust \
file://curl-rust/0001-curl-sys-avoid-explicitly-linking-in-openssl.patch;patchdir=../curl-rust \
file://curl-rust/0002-remove-per-triple-deps-on-openssl-sys.patch;patchdir=../curl-rust \
"
# 0.2.19 / -sys 0.1.34
SRCREV_curl-rust = "45b8cb56fbed45f828f96bdd8c286b2b3a8a26cb"
SRCREV_FORMAT .= "_curl-rust"
EXTRA_OECARGO_PATHS += "${WORKDIR}/curl-rust"
## ssh2-rs
SRC_URI += "\
git://github.com/alexcrichton/ssh2-rs.git;protocol=https;name=ssh2-rs;destsuffix=ssh2-rs \
file://ssh2-rs/0001-libssh2-sys-avoid-explicitly-linking-in-openssl.patch;patchdir=../ssh2-rs \
"
# 0.2.11 / -sys 0.1.37
SRCREV_ssh2-rs = "ced77751cb780d0725a3411bd588c5a26ea79953"
SRCREV_FORMAT .= "_ssh2-rs"
EXTRA_OECARGO_PATHS += "${WORKDIR}/ssh2-rs"
## git2-rs
SRC_URI += "\
git://github.com/alexcrichton/git2-rs.git;protocol=https;name=git2-rs;destsuffix=git2-rs \
file://git2-rs/0001-libgit2-sys-avoid-blessed-triples.patch;patchdir=../git2-rs \
"
# 0.4.3 / -sys 0.4.2
SRCREV_git2-rs = "cd14fc7801e70d3b26a4e7e5d94785af1f7e9e58"
SRCREV_FORMAT .= "_git2-rs"
EXTRA_OECARGO_PATHS += "${WORKDIR}/git2-rs"

View File

@@ -1,86 +0,0 @@
require cargo-snapshot.inc
require cargo.inc
SRC_URI += " \
git://github.com/rust-lang/cargo.git;protocol=https;name=cargo \
crate://crates.io/advapi32-sys/0.2.0 \
crate://crates.io/aho-corasick/0.5.2 \
crate://crates.io/bitflags/0.1.1 \
crate://crates.io/bitflags/0.7.0 \
crate://crates.io/bufstream/0.1.2 \
crate://crates.io/cfg-if/0.1.0 \
crate://crates.io/cmake/0.1.17 \
crate://crates.io/crossbeam/0.2.9 \
crate://crates.io/curl-sys/0.2.1 \
crate://crates.io/curl/0.3.2 \
crate://crates.io/docopt/0.6.82 \
crate://crates.io/env_logger/0.3.4 \
crate://crates.io/filetime/0.1.10 \
crate://crates.io/flate2/0.2.14 \
crate://crates.io/fs2/0.2.5 \
crate://crates.io/gcc/0.3.32 \
crate://crates.io/gdi32-sys/0.2.0 \
crate://crates.io/git2-curl/0.5.0 \
crate://crates.io/git2/0.4.4 \
crate://crates.io/glob/0.2.11 \
crate://crates.io/hamcrest/0.1.0 \
crate://crates.io/idna/0.1.0 \
crate://crates.io/kernel32-sys/0.2.2 \
crate://crates.io/lazy_static/0.2.1 \
crate://crates.io/libc/0.2.15 \
crate://crates.io/libgit2-sys/0.4.5 \
crate://crates.io/libressl-pnacl-sys/2.1.6 \
crate://crates.io/libssh2-sys/0.1.38 \
crate://crates.io/libz-sys/1.0.5 \
crate://crates.io/log/0.3.6 \
crate://crates.io/matches/0.1.2 \
crate://crates.io/memchr/0.1.11 \
crate://crates.io/miniz-sys/0.1.7 \
crate://crates.io/miow/0.1.3 \
crate://crates.io/net2/0.2.26 \
crate://crates.io/nom/1.2.4 \
crate://crates.io/num-bigint/0.1.33 \
crate://crates.io/num-complex/0.1.33 \
crate://crates.io/num-integer/0.1.32 \
crate://crates.io/num-iter/0.1.32 \
crate://crates.io/num-rational/0.1.32 \
crate://crates.io/num-traits/0.1.34 \
crate://crates.io/num/0.1.34 \
crate://crates.io/num_cpus/1.0.0 \
crate://crates.io/openssl-sys-extras/0.7.14 \
crate://crates.io/openssl-sys/0.7.14 \
crate://crates.io/openssl/0.7.14 \
crate://crates.io/pkg-config/0.3.8 \
crate://crates.io/pnacl-build-helper/1.4.10 \
crate://crates.io/rand/0.3.14 \
crate://crates.io/regex-syntax/0.3.4 \
crate://crates.io/regex/0.1.73 \
crate://crates.io/rustc-serialize/0.3.19 \
crate://crates.io/semver/0.2.3 \
crate://crates.io/strsim/0.3.0 \
crate://crates.io/tar/0.4.8 \
crate://crates.io/tempdir/0.3.5 \
crate://crates.io/term/0.4.4 \
crate://crates.io/thread-id/2.0.0 \
crate://crates.io/thread_local/0.2.6 \
crate://crates.io/toml/0.2.0 \
crate://crates.io/unicode-bidi/0.2.3 \
crate://crates.io/unicode-normalization/0.1.2 \
crate://crates.io/url/1.2.0 \
crate://crates.io/user32-sys/0.2.0 \
crate://crates.io/utf8-ranges/0.1.3 \
crate://crates.io/winapi-build/0.1.1 \
crate://crates.io/winapi/0.2.8 \
crate://crates.io/ws2_32-sys/0.2.1 \
"
# Compatible with Rust 1.12.1
# https://static.rust-lang.org/dist/channel-rust-1.12.1.toml
SRCREV_cargo = "109cb7c33d426044d141457049bd0fffaca1327c"
S = "${WORKDIR}/git"
LIC_FILES_CHKSUM ="\
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \
"

View File

@@ -0,0 +1,4 @@
require recipes-devtools/rust/rust-source-${PV}.inc
require recipes-devtools/rust/rust-snapshot-${PV}.inc
require cargo.inc
BBCLASSEXTEND = "native nativesdk"

View File

@@ -0,0 +1,4 @@
require recipes-devtools/rust/rust-source-${PV}.inc
require recipes-devtools/rust/rust-snapshot-${PV}.inc
require cargo.inc
BBCLASSEXTEND = "native nativesdk"

View File

@@ -1,88 +0,0 @@
From 27df8ab04275dfd715d1756fc517bb0323f1b210 Mon Sep 17 00:00:00 2001
From: Steven Walter <stevenrwalter@gmail.com>
Date: Fri, 2 Sep 2016 14:02:03 -0400
Subject: [PATCH] Never update the registry index
Bitbake will fetch the index for us so that we needn't do network IO
during a build
---
src/cargo/ops/cargo_run.rs | 2 +-
src/cargo/sources/registry.rs | 34 +---------------------------------
2 files changed, 2 insertions(+), 34 deletions(-)
diff --git a/src/cargo/ops/cargo_run.rs b/src/cargo/ops/cargo_run.rs
index 6764118..379b98b 100644
--- a/src/cargo/ops/cargo_run.rs
+++ b/src/cargo/ops/cargo_run.rs
@@ -1,7 +1,7 @@
use std::path::Path;
use ops::{self, CompileFilter};
-use util::{self, CargoResult, process, ProcessError};
+use util::{self, CargoResult, ProcessError};
use core::Package;
pub fn run(manifest_path: &Path,
diff --git a/src/cargo/sources/registry.rs b/src/cargo/sources/registry.rs
index 614d654..a0c7fe6 100644
--- a/src/cargo/sources/registry.rs
+++ b/src/cargo/sources/registry.rs
@@ -166,7 +166,6 @@ use std::path::{PathBuf, Path};
use curl::http;
use flate2::read::GzDecoder;
-use git2;
use rustc_serialize::hex::ToHex;
use rustc_serialize::json;
use tar::Archive;
@@ -174,7 +173,7 @@ use url::Url;
use core::{Source, SourceId, PackageId, Package, Summary, Registry};
use core::dependency::{Dependency, DependencyInner, Kind};
-use sources::{PathSource, git};
+use sources::PathSource;
use util::{CargoResult, Config, internal, ChainError, ToUrl, human};
use util::{hex, Sha256, paths, Filesystem, FileLock};
use ops;
@@ -464,38 +463,7 @@ impl<'cfg> RegistrySource<'cfg> {
/// Actually perform network operations to update the registry
fn do_update(&mut self) -> CargoResult<()> {
- if self.updated {
- return Ok(())
- }
- try!(self.checkout_path.create_dir());
- let lock = try!(self.checkout_path.open_rw(Path::new(INDEX_LOCK),
- self.config,
- "the registry index"));
- let path = lock.path().parent().unwrap();
-
- try!(self.config.shell().status("Updating",
- format!("registry `{}`", self.source_id.url())));
- let repo = try!(git2::Repository::open(path).or_else(|_| {
- let _ = lock.remove_siblings();
- git2::Repository::init(path)
- }));
-
- // git fetch origin
- let url = self.source_id.url().to_string();
- let refspec = "refs/heads/*:refs/remotes/origin/*";
-
- try!(git::fetch(&repo, &url, refspec, &self.config).chain_error(|| {
- internal(format!("failed to fetch `{}`", url))
- }));
-
- // git reset --hard origin/master
- let reference = "refs/remotes/origin/master";
- let oid = try!(repo.refname_to_id(reference));
- trace!("[{}] updating to rev {}", self.source_id, oid);
- let object = try!(repo.find_object(oid, None));
- try!(repo.reset(&object, git2::ResetType::Hard, None));
self.updated = true;
- self.cache.clear();
Ok(())
}
}
--
2.7.4

View File

@@ -1,27 +0,0 @@
From 7ae8ea6523c943cc819eadea011ce4f783e40764 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Wed, 3 Feb 2016 15:59:48 -0500
Subject: [PATCH] disable cargo snapshot fetch
---
Makefile.in | 4 ----
1 file changed, 4 deletions(-)
diff --git a/Makefile.in b/Makefile.in
index fadcb4b..a8da630 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -103,10 +103,6 @@ test-unit-$(1): $$(CARGO)
endef
$(foreach target,$(CFG_TARGET),$(eval $(call CARGO_TARGET,$(target))))
-$(TARGET_ROOT)/snapshot/bin/cargo$(X): $(S)src/snapshots.txt
- $(CFG_PYTHON) $(S)src/etc/dl-snapshot.py $(CFG_BUILD)
- touch $@
-
# === Tests
--
2.8.2

View File

@@ -1,75 +0,0 @@
From 8f82cc69e50e7c8e48a2e20b7061483a28bd0d7f Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Sat, 12 Dec 2015 22:36:26 -0500
Subject: [PATCH 1/2] curl-sys: avoid explicitly linking in openssl
linking libcurl with libssl is handled by pkg-config, not us
This also allows non-blessed triples to work.
---
curl-sys/Cargo.toml | 38 --------------------------------------
curl-sys/lib.rs | 2 --
2 files changed, 40 deletions(-)
diff --git a/curl-sys/Cargo.toml b/curl-sys/Cargo.toml
index 24bc4fa..dd56209 100644
--- a/curl-sys/Cargo.toml
+++ b/curl-sys/Cargo.toml
@@ -19,42 +19,4 @@ path = "lib.rs"
[dependencies]
libz-sys = ">= 0"
libc = "0.2"
-
-[target."cfg(all(unix, not(target_os = \"macos\")))".dependencies]
-openssl-sys = ">= 0"
-
-# Unix platforms use OpenSSL for now to provide SSL functionality
-[target.i686-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.i586-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.i686-linux-android.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-linux-musl.dependencies]
-openssl-sys = ">= 0"
-[target.arm-unknown-linux-gnueabihf.dependencies]
-openssl-sys = ">= 0"
-[target.armv7-unknown-linux-gnueabihf.dependencies]
openssl-sys = "0.7.0"
-[target.arm-linux-androideabi.dependencies]
-openssl-sys = ">= 0"
-[target.aarch64-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.powerpc-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.powerpc64-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.powerpc64le-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.i686-unknown-freebsd.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-freebsd.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-bitrig.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-openbsd.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-dragonfly.dependencies]
-openssl-sys = ">= 0"
diff --git a/curl-sys/lib.rs b/curl-sys/lib.rs
index 7990bd6..eb6c27a 100644
--- a/curl-sys/lib.rs
+++ b/curl-sys/lib.rs
@@ -3,8 +3,6 @@
extern crate libc;
#[cfg(not(target_env = "msvc"))]
extern crate libz_sys;
-#[cfg(all(unix, not(target_os = "macos")))]
-extern crate openssl_sys;
use libc::{c_void, c_int, c_char, c_uint, c_long};
--
2.9.2

View File

@@ -1,67 +0,0 @@
From eb23b1b6f749102e3db92b73a5e55ec6ad688524 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Sat, 12 Dec 2015 22:40:33 -0500
Subject: [PATCH 2/2] remove per triple deps on openssl-sys
---
Cargo.toml | 40 +---------------------------------------
1 file changed, 1 insertion(+), 39 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index 5f6cf87..0c87156 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,49 +12,11 @@ url = ">= 0.5, < 2.0"
log = "0.3.0"
libc = "0.2"
curl-sys = { path = "curl-sys", version = "0.1.0" }
+openssl-sys = "0.7.0"
[dev-dependencies]
env_logger = "0.3.0"
-# Unix platforms use OpenSSL for now to provide SSL functionality
-[target."cfg(all(unix, not(target_os = \"macos\")))".dependencies]
-openssl-sys = "0.7.0"
-
-[target.i686-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.i586-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.i686-linux-android.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-linux-musl.dependencies]
-openssl-sys = "0.7.0"
-[target.arm-unknown-linux-gnueabihf.dependencies]
-openssl-sys = "0.7.0"
-[target.armv7-unknown-linux-gnueabihf.dependencies]
-openssl-sys = "0.7.0"
-[target.arm-linux-androideabi.dependencies]
-openssl-sys = "0.7.0"
-[target.aarch64-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.powerpc-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.powerpc64-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.powerpc64le-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.i686-unknown-freebsd.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-freebsd.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-bitrig.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-openbsd.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-dragonfly.dependencies]
-openssl-sys = "0.7.0"
-
[[test]]
name = "test"
--
2.9.2

View File

@@ -1,62 +0,0 @@
From 308fd350907fba13f68dcdb8e48040582466cae6 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Sat, 12 Dec 2015 22:53:37 -0500
Subject: [PATCH] libgit2-sys: avoid blessed triples
---
libgit2-sys/Cargo.toml | 33 +--------------------------------
1 file changed, 1 insertion(+), 32 deletions(-)
diff --git a/libgit2-sys/Cargo.toml b/libgit2-sys/Cargo.toml
index 2395314..29000ef 100644
--- a/libgit2-sys/Cargo.toml
+++ b/libgit2-sys/Cargo.toml
@@ -17,44 +17,13 @@ path = "lib.rs"
libssh2-sys = { version = ">= 0", optional = true }
libc = "0.2"
libz-sys = ">= 0"
+openssl-sys = "0.7.0"
[build-dependencies]
pkg-config = "0.3"
cmake = "0.1.2"
gcc = "0.3"
-[target."cfg(all(unix, not(target_os = \"macos\")))".dependencies]
-openssl-sys = "0.7.0"
-
-[target.i686-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.i586-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-linux-musl.dependencies]
-openssl-sys = "0.7.0"
-[target.aarch64-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.powerpc64-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.powerpc64le-unknown-linux-gnu.dependencies]
-openssl-sys = "0.7.0"
-[target.arm-unknown-linux-gnueabihf.dependencies]
-openssl-sys = "0.7.0"
-[target.armv7-unknown-linux-gnueabihf.dependencies]
-openssl-sys = "0.7.0"
-[target.i686-unknown-freebsd.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-freebsd.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-bitrig.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-openbsd.dependencies]
-openssl-sys = "0.7.0"
-[target.x86_64-unknown-dragonfly.dependencies]
-openssl-sys = "0.7.0"
-
[features]
ssh = ["libssh2-sys"]
https = []
--
2.9.2

View File

@@ -1,70 +0,0 @@
From 65f07216c2c7a341cf13c35ecc1a781d7a489511 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Sat, 12 Dec 2015 22:44:14 -0500
Subject: [PATCH] libssh2-sys: avoid explicitly linking in openssl
---
libssh2-sys/Cargo.toml | 33 ---------------------------------
libssh2-sys/lib.rs | 2 --
2 files changed, 35 deletions(-)
diff --git a/libssh2-sys/Cargo.toml b/libssh2-sys/Cargo.toml
index c4e006d..175be77 100644
--- a/libssh2-sys/Cargo.toml
+++ b/libssh2-sys/Cargo.toml
@@ -19,39 +19,6 @@ libc = "0.2"
[target."cfg(unix)".dependencies]
openssl-sys = ">= 0"
-[target.i686-apple-darwin.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-apple-darwin.dependencies]
-openssl-sys = ">= 0"
-[target.i686-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.i586-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.aarch64-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.powerpc64-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.powerpc64le-unknown-linux-gnu.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-linux-musl.dependencies]
-openssl-sys = ">= 0"
-[target.arm-unknown-linux-gnueabihf.dependencies]
-openssl-sys = ">= 0"
-[target.armv7-unknown-linux-gnueabihf.dependencies]
-openssl-sys = ">= 0"
-[target.i686-unknown-freebsd.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-freebsd.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-dragonfly.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-bitrig.dependencies]
-openssl-sys = ">= 0"
-[target.x86_64-unknown-openbsd.dependencies]
-openssl-sys = ">= 0"
-
[build-dependencies]
pkg-config = "0.3"
cmake = "0.1.2"
diff --git a/libssh2-sys/lib.rs b/libssh2-sys/lib.rs
index 02fd203..3ca1806 100644
--- a/libssh2-sys/lib.rs
+++ b/libssh2-sys/lib.rs
@@ -4,8 +4,6 @@
extern crate libc;
extern crate libz_sys;
-#[cfg(unix)]
-extern crate openssl_sys;
use libc::{c_int, size_t, c_void, c_char, c_long, c_uchar, c_uint, c_ulong};
use libc::ssize_t;
--
2.8.2

View File

@@ -1,63 +0,0 @@
From 3d850e1b1651a79085b994c12cdb78faa8271622 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ho=C3=A0ng=20=C4=90=E1=BB=A9c=20Hi=E1=BA=BFu?=
<hdhoang@zahe.me>
Date: Mon, 1 Dec 2014 11:48:14 +0700
Subject: [PATCH] update to new io::FileType enum
---
src/lib.rs | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/src/lib.rs b/src/lib.rs
index 5e13b84..3e24ff2 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -283,12 +283,12 @@ impl<W: Writer> Archive<W> {
octal(&mut header.dev_major, 0i);
header.link[0] = match stat.kind {
- io::TypeFile => b'0',
- io::TypeDirectory => b'5',
- io::TypeNamedPipe => b'6',
- io::TypeBlockSpecial => b'4',
- io::TypeSymlink => b'2',
- io::TypeUnknown => b' ',
+ io::FileType::RegularFile => b'0',
+ io::FileType::Directory => b'5',
+ io::FileType::NamedPipe => b'6',
+ io::FileType::BlockSpecial => b'4',
+ io::FileType::Symlink => b'2',
+ io::FileType::Unknown => b' ',
};
// Final step, calculate the checksum
@@ -411,16 +411,16 @@ impl<'a, R> File<'a, R> {
/// Classify the type of file that this entry represents
pub fn classify(&self) -> io::FileType {
match (self.header.is_ustar(), self.header.link[0]) {
- (_, b'0') => io::TypeFile,
- (_, b'1') => io::TypeUnknown, // need a hard link enum?
- (_, b'2') => io::TypeSymlink,
- (false, _) => io::TypeUnknown, // not technically valid...
-
- (_, b'3') => io::TypeUnknown, // character special...
- (_, b'4') => io::TypeBlockSpecial,
- (_, b'5') => io::TypeDirectory,
- (_, b'6') => io::TypeNamedPipe,
- (_, _) => io::TypeUnknown, // not technically valid...
+ (_, b'0') => io::FileType::RegularFile,
+ (_, b'1') => io::FileType::Unknown, // need a hard link enum?
+ (_, b'2') => io::FileType::Symlink,
+ (false, _) => io::FileType::Unknown, // not technically valid...
+
+ (_, b'3') => io::FileType::Unknown, // character special...
+ (_, b'4') => io::FileType::BlockSpecial,
+ (_, b'5') => io::FileType::Directory,
+ (_, b'6') => io::FileType::NamedPipe,
+ (_, _) => io::FileType::Unknown, // not technically valid...
}
}
--
2.0.4

View File

@@ -1,30 +0,0 @@
SUMMARY = "Rust compiler run-time"
HOMEPAGE = "http://www.rust-lang.org"
SECTION = "devel"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=27b14ab4ce08d04c3a9a5f0ed7997362"
SRC_URI = "\
https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \
"
require rust-source-${PV}.inc
S = "${WORKDIR}/rustc-${PV}/src/compiler-rt"
do_compile () {
oe_runmake -C ${S} \
ProjSrcRoot="${S}" \
ProjObjRoot="${B}" \
CC="${CC}" \
AR="${AR}" \
RANLIB="${RANLIB}" \
CFLAGS="${CFLAGS}" \
TargetTriple=${HOST_SYS} \
triple-builtins
}
do_install () {
mkdir -p ${D}${libdir}
cp triple/builtins/libcompiler_rt.a ${D}${libdir}/libcompiler-rt.a
}

View File

@@ -1,24 +0,0 @@
SUMMARY = "Rust compiler run-time"
HOMEPAGE = "http://www.rust-lang.org"
SECTION = "devel"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://src/compiler-rt/LICENSE.TXT;md5=bf24bca27049b52e9738451aa55771d4"
require rust.inc
require rust-source-${PV}.inc
DEPENDS += "rust-llvm-native (=${PV})"
S = "${WORKDIR}/rustc-${PV}"
DISABLE_STATIC = ""
INHIBIT_DEFAULT_RUST_DEPS = "1"
do_compile () {
oe_runmake ${TARGET_SYS}/rt/libcompiler-rt.a
}
do_install () {
mkdir -p ${D}${libdir}
cp ${TARGET_SYS}/rt/libcompiler-rt.a ${D}${libdir}/libcompiler-rt.a
}

View File

@@ -1,45 +0,0 @@
From 69b65762ccdf459143fc273a39b0a0e0c6d8fe3e Mon Sep 17 00:00:00 2001
From: Steven Walter <swalter@lexmark.com>
Date: Mon, 2 May 2016 19:57:46 -0400
Subject: [PATCH 01/11] Add config for musl-based arm builds
---
mk/cfg/arm-unknown-linux-musleabi.mk | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
create mode 100644 mk/cfg/arm-unknown-linux-musleabi.mk
diff --git a/mk/cfg/arm-unknown-linux-musleabi.mk b/mk/cfg/arm-unknown-linux-musleabi.mk
new file mode 100644
index 0000000..2485bd9
--- /dev/null
+++ b/mk/cfg/arm-unknown-linux-musleabi.mk
@@ -0,0 +1,26 @@
+# arm-unknown-linux-musleabi configuration
+CROSS_PREFIX_arm-unknown-linux-musleabi=arm-linux-musleabi-
+CC_arm-unknown-linux-musleabi=gcc
+CXX_arm-unknown-linux-musleabi=g++
+CPP_arm-unknown-linux-musleabi=gcc -E
+AR_arm-unknown-linux-musleabi=ar
+CFG_LIB_NAME_arm-unknown-linux-musleabi=lib$(1).so
+CFG_STATIC_LIB_NAME_arm-unknown-linux-musleabi=lib$(1).a
+CFG_LIB_GLOB_arm-unknown-linux-musleabi=lib$(1)-*.so
+CFG_LIB_DSYM_GLOB_arm-unknown-linux-musleabi=lib$(1)-*.dylib.dSYM
+CFG_JEMALLOC_CFLAGS_arm-unknown-linux-musleabi := -D__arm__ $(CFLAGS)
+CFG_GCCISH_CFLAGS_arm-unknown-linux-musleabi := -Wall -g -fPIC -D__arm__ $(CFLAGS)
+CFG_GCCISH_CXXFLAGS_arm-unknown-linux-musleabi := -fno-rtti $(CXXFLAGS)
+CFG_GCCISH_LINK_FLAGS_arm-unknown-linux-musleabi := -shared -fPIC -g
+CFG_GCCISH_DEF_FLAG_arm-unknown-linux-musleabi := -Wl,--export-dynamic,--dynamic-list=
+CFG_LLC_FLAGS_arm-unknown-linux-musleabi :=
+CFG_INSTALL_NAME_arm-unknown-linux-musleabi =
+CFG_EXE_SUFFIX_arm-unknown-linux-musleabi :=
+CFG_WINDOWSY_arm-unknown-linux-musleabi :=
+CFG_UNIXY_arm-unknown-linux-musleabi := 1
+CFG_LDPATH_arm-unknown-linux-musleabi :=
+CFG_RUN_arm-unknown-linux-musleabi=$(2)
+CFG_RUN_TARG_arm-unknown-linux-musleabi=$(call CFG_RUN_arm-unknown-linux-musleabi,,$(2))
+RUSTC_FLAGS_arm-unknown-linux-musleabi :=
+RUSTC_CROSS_FLAGS_arm-unknown-linux-musleabi :=
+CFG_GNU_TRIPLE_arm-unknown-linux-musleabi := arm-unknown-linux-musleabi
--
2.7.4

View File

@@ -1,107 +0,0 @@
From 0535c75086a9c170d8d4d99b3030d9136ea6e2c7 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Tue, 18 Nov 2014 01:40:21 -0500
Subject: [PATCH 02/11] Target: add default target.json path:
$libdir/rust/targets
---
src/librustc/session/config.rs | 6 +++---
src/librustc/session/mod.rs | 8 ++++++--
src/librustc_back/target/mod.rs | 13 +++++++++++--
3 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index da5555d..6cd0ea9 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -35,7 +35,7 @@ use getopts;
use std::collections::HashMap;
use std::env;
use std::fmt;
-use std::path::PathBuf;
+use std::path::{Path, PathBuf};
pub struct Config {
pub target: Target,
@@ -787,8 +787,8 @@ pub fn build_configuration(sess: &Session) -> ast::CrateConfig {
v
}
-pub fn build_target_config(opts: &Options, sp: &Handler) -> Config {
- let target = match Target::search(&opts.target_triple) {
+pub fn build_target_config(sysroot: &Path, opts: &Options, sp: &Handler) -> Config {
+ let target = match Target::search(sysroot, &opts.target_triple[..]) {
Ok(t) => t,
Err(e) => {
panic!(sp.fatal(&format!("Error loading target specification: {}", e)));
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs
index 907241d..d0e3743 100644
--- a/src/librustc/session/mod.rs
+++ b/src/librustc/session/mod.rs
@@ -470,13 +470,17 @@ pub fn build_session_(sopts: config::Options,
codemap: Rc<codemap::CodeMap>,
cstore: Rc<for<'a> CrateStore<'a>>)
-> Session {
- let host = match Target::search(config::host_triple()) {
+ let sysroot = match sopts.maybe_sysroot {
+ Some(ref x) => PathBuf::from(x),
+ None => filesearch::get_or_default_sysroot()
+ };
+ let host = match Target::search(&sysroot, config::host_triple()) {
Ok(t) => t,
Err(e) => {
panic!(span_diagnostic.fatal(&format!("Error loading host specification: {}", e)));
}
};
- let target_cfg = config::build_target_config(&sopts, &span_diagnostic);
+ let target_cfg = config::build_target_config(&sysroot, &sopts, &span_diagnostic);
let p_s = parse::ParseSess::with_span_handler(span_diagnostic, codemap);
let default_sysroot = match sopts.maybe_sysroot {
Some(_) => None,
diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs
index 2163a8a..38607f0 100644
--- a/src/librustc_back/target/mod.rs
+++ b/src/librustc_back/target/mod.rs
@@ -48,6 +48,8 @@ use serialize::json::Json;
use std::default::Default;
use std::io::prelude::*;
use syntax::abi::Abi;
+use std::borrow::ToOwned;
+use std::path::Path;
mod android_base;
mod apple_base;
@@ -477,12 +479,13 @@ impl Target {
///
/// The error string could come from any of the APIs called, including
/// filesystem access and JSON decoding.
- pub fn search(target: &str) -> Result<Target, String> {
+ pub fn search(sysroot: &Path, target: &str) -> Result<Target, String> {
use std::env;
use std::ffi::OsString;
use std::fs::File;
use std::path::{Path, PathBuf};
use serialize::json;
+ use std::iter::IntoIterator;
fn load_file(path: &Path) -> Result<Target, String> {
let mut f = File::open(path).map_err(|e| e.to_string())?;
@@ -513,8 +516,14 @@ impl Target {
.unwrap_or(OsString::new());
// FIXME 16351: add a sane default search path?
+ let mut default_path = sysroot.to_owned();
+ default_path.push(env!("CFG_LIBDIR_RELATIVE"));
+ default_path.push("rustlib");
- for dir in env::split_paths(&target_path) {
+ let paths = env::split_paths(&target_path)
+ .chain(Some(default_path).into_iter());
+
+ for dir in paths {
let p = dir.join(&path);
if p.is_file() {
return load_file(&p);
--
2.7.4

View File

@@ -1,73 +0,0 @@
From 4290b8f28222824a558ac4471d26fe88b2889a5b Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Tue, 18 Nov 2014 14:52:56 -0500
Subject: [PATCH 03/11] mk: for stage0, use RUSTFLAGS to override target libs
dir
Setting HLIB specially for stage0 (and even more specially for windows)
also affects the location we place TLIB. To keep the TLIBs we build in
the place requested by configure, use '-L' and '--sysroot' to point
stage0-rustc at the appropriate location.
---
mk/main.mk | 29 ++++++++++++-----------------
1 file changed, 12 insertions(+), 17 deletions(-)
diff --git a/mk/main.mk b/mk/main.mk
index c47020c..fcf1409 100644
--- a/mk/main.mk
+++ b/mk/main.mk
@@ -403,32 +403,26 @@ define SREQ
HROOT$(1)_H_$(3) = $(3)/stage$(1)
HBIN$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/bin
-ifeq ($$(CFG_WINDOWSY_$(3)),1)
-# On Windows we always store host runtime libraries in the 'bin' directory because
-# there's no rpath. Target libraries go under $CFG_LIBDIR_RELATIVE (usually 'lib').
-HLIB_RELATIVE$(1)_H_$(3) = bin
-TROOT$(1)_T_$(2)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(CFG_LIBDIR_RELATIVE)/rustlib/$(2)
-# Remove the next 3 lines after a snapshot
-ifeq ($(1),0)
-RUSTFLAGS_STAGE0 += -L $$(TROOT$(1)_T_$(2)_H_$(3))/lib
-endif
-
-else
-
-ifeq ($(1),0)
-HLIB_RELATIVE$(1)_H_$(3) = lib
-else
HLIB_RELATIVE$(1)_H_$(3) = $$(CFG_LIBDIR_RELATIVE)
-endif
+
TROOT$(1)_T_$(2)_H_$(3) = $$(HLIB$(1)_H_$(3))/rustlib/$(2)
-endif
HLIB$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(HLIB_RELATIVE$(1)_H_$(3))
# Destinations of artifacts for target architectures
TBIN$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/bin
TLIB$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/lib
+# Don't trust stage0, be explicit about libraries
+# TODO: rather than specifying sysroot, we really want to tell which libdir to
+# use (ie: the dir containing 'rustlib'). This would allow us to avoid
+# passing the '-L' options.
+ifeq ($(1),0)
+RUSTFLAGS_S_$(1)_T_$(2)_H_$(3) += --sysroot "$$(HROOT$(1)_H_$(3))" \
+ -L "$$(TLIB$(1)_T_$(2)_H_$(3))"
+endif
+
+
# Preqrequisites for using the stageN compiler
ifeq ($(1),0)
HSREQ$(1)_H_$(3) = $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3))
@@ -536,6 +530,7 @@ STAGE$(1)_T_$(2)_H_$(3) := \
$$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \
--cfg $$(CFGFLAG$(1)_T_$(2)_H_$(3)) \
$$(CFG_RUSTC_FLAGS) $$(EXTRAFLAGS_STAGE$(1)) --target=$(2)) \
+ $$(RUSTFLAGS_S_$(1)_T_$(2)_H_$(3)) \
$$(RUSTC_FLAGS_$(2))
endef
--
2.7.4

View File

@@ -1,27 +0,0 @@
From 06b8c4bc8f7056d604d8ef4d699273cc1dd39025 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Tue, 18 Nov 2014 13:48:14 -0500
Subject: [PATCH 04/11] mk: add missing CFG_LIBDIR_RELATIVE
---
mk/grammar.mk | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mk/grammar.mk b/mk/grammar.mk
index 0d527bd..926f247 100644
--- a/mk/grammar.mk
+++ b/mk/grammar.mk
@@ -11,8 +11,8 @@
BG = $(CFG_BUILD_DIR)/grammar/
SG = $(S)src/grammar/
B = $(CFG_BUILD_DIR)/$(CFG_BUILD)/stage2/
-L = $(B)lib/rustlib/$(CFG_BUILD)/lib
-LD = $(CFG_BUILD)/stage2/lib/rustlib/$(CFG_BUILD)/lib/
+L = $(B)$(CFG_LIBDIR_RELATIVE)/rustlib/$(CFG_BUILD)/lib
+LD = $(CFG_BUILD)/stage2/$(CFG_LIBDIR_RELATIVE)/rustlib/$(CFG_BUILD)/lib/
RUSTC = $(STAGE2_T_$(CFG_BUILD)_H_$(CFG_BUILD))
ifeq ($(CFG_OSTYPE),apple-darwin)
FLEX_LDFLAGS=-ll
--
2.7.4

View File

@@ -1,25 +0,0 @@
From f7441b3080088d8131d106c59c3543b22c9e8211 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Wed, 3 Dec 2014 19:15:19 -0500
Subject: [PATCH 06/11] std/thread_local: workaround for NULL __dso_handle
---
src/libstd/thread/local.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/libstd/thread/local.rs b/src/libstd/thread/local.rs
index 6b54ec8..5b41b75 100644
--- a/src/libstd/thread/local.rs
+++ b/src/libstd/thread/local.rs
@@ -346,7 +346,7 @@ pub mod elf {
#[linkage = "extern_weak"]
static __cxa_thread_atexit_impl: *const libc::c_void;
}
- if !__cxa_thread_atexit_impl.is_null() {
+ if !__cxa_thread_atexit_impl.is_null() && !__dso_handle.is_null() {
type F = unsafe extern fn(dtor: unsafe extern fn(*mut u8),
arg: *mut u8,
dso_handle: *mut u8) -> libc::c_int;
--
2.7.4

View File

@@ -1,30 +0,0 @@
From a73a748cd73920380ae1f069be91ff833e99d003 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Mon, 2 Mar 2015 13:34:59 -0500
Subject: [PATCH 07/11] mk/install: use disable-rewrite-paths
This stops the install scripts from doing work we've already handled.
Path rewriting is only useful for prepackaged binary installers.
---
mk/install.mk | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/mk/install.mk b/mk/install.mk
index d2e5449..e67650b 100644
--- a/mk/install.mk
+++ b/mk/install.mk
@@ -12,7 +12,9 @@ RUN_INSTALLER = cd tmp/empty_dir && \
sh ../../tmp/dist/$(1)/install.sh \
--prefix="$(DESTDIR)$(CFG_PREFIX)" \
--libdir="$(DESTDIR)$(CFG_LIBDIR)" \
- --mandir="$(DESTDIR)$(CFG_MANDIR)"
+ --mandir="$(DESTDIR)$(CFG_MANDIR)" \
+ "$(MAYBE_DISABLE_VERIFY)" \
+ --disable-rewrite-paths
install:
ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER)))
--
2.7.4

View File

@@ -1,60 +0,0 @@
From 042a5df36597c2c6c23900667ae1b4299279092f Mon Sep 17 00:00:00 2001
From: Steven Walter <swalter@lexmark.com>
Date: Wed, 18 Nov 2015 08:33:26 -0500
Subject: [PATCH 08/11] Allow overriding crate_hash with -C crate_hash
The current crate hash is not stable from run-to-run. This causes
problems with bitbake; it needs a guarantee that every build with the
same input will generate compatible output, otherwise sstate won't work.
Using -C crate_hash, we can do that by using the bitbake input hash to
determine the crate hash; the bitbake input hash will be stable, but
still different for different rust recipes.
---
src/librustc/session/config.rs | 2 ++
src/librustc_trans/back/link.rs | 12 +++++++++++-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index 6cd0ea9..f90398d 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -585,6 +585,8 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
"choose the code model to use (llc -code-model for details)"),
metadata: Vec<String> = (Vec::new(), parse_list,
"metadata to mangle symbol names with"),
+ crate_hash: String = ("".to_string(), parse_string,
+ "override crate hash with given value"),
extra_filename: String = ("".to_string(), parse_string,
"extra data to put in each output filename"),
codegen_units: usize = (1, parse_uint,
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
index 222d447..e951476 100644
--- a/src/librustc_trans/back/link.rs
+++ b/src/librustc_trans/back/link.rs
@@ -125,12 +125,22 @@ pub fn find_crate_name(sess: Option<&Session>,
}
+use std::hash::{Hasher, SipHasher};
+use rustc::hir::svh::Svh;
+
pub fn build_link_meta<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
name: &str)
-> LinkMeta {
+ let crate_hash = if tcx.sess.opts.cg.crate_hash != "" {
+ let mut state = SipHasher::new();
+ state.write(tcx.sess.opts.cg.crate_hash.as_bytes());
+ Svh::new(state.finish())
+ } else {
+ tcx.calculate_krate_hash()
+ };
let r = LinkMeta {
crate_name: name.to_owned(),
- crate_hash: tcx.calculate_krate_hash(),
+ crate_hash: crate_hash,
};
info!("{:?}", r);
return r;
--
2.7.4

View File

@@ -1,25 +0,0 @@
From 44ee7a68f44132ebe32ac486355945131c7a2b83 Mon Sep 17 00:00:00 2001
From: Steven Walter <swalter@lexmark.com>
Date: Wed, 18 Nov 2015 08:41:17 -0500
Subject: [PATCH 09/11] mk/platform.mk: pass -C crate_hash to builds
bitbake recipe will export FORCE_CRATE_HASH
---
mk/platform.mk | 1 +
1 file changed, 1 insertion(+)
diff --git a/mk/platform.mk b/mk/platform.mk
index c264462..b959d59 100644
--- a/mk/platform.mk
+++ b/mk/platform.mk
@@ -181,6 +181,7 @@ define CFG_MAKE_TOOLCHAIN
AR_$(1)=$(CROSS_PREFIX_$(1))$(AR_$(1))
LINK_$(1)=$(CROSS_PREFIX_$(1))$(LINK_$(1))
RUSTC_CROSS_FLAGS_$(1)=-C linker=$$(call FIND_COMPILER,$$(LINK_$(1))) \
+ -C crate_hash=$(FORCE_CRATE_HASH) \
-C ar=$$(call FIND_COMPILER,$$(AR_$(1))) $(RUSTC_CROSS_FLAGS_$(1))
RUSTC_FLAGS_$(1)=$$(RUSTC_CROSS_FLAGS_$(1)) $(RUSTC_FLAGS_$(1))
--
2.7.4

View File

@@ -1,96 +0,0 @@
From 9c76c93de35fb45ed18e75827649e299d8c4e94e Mon Sep 17 00:00:00 2001
From: Eduard Burtescu <edy.burt@gmail.com>
Date: Sun, 14 Aug 2016 11:16:28 +0300
Subject: [PATCH 11/11] Get rid of the .note interpretation of rustc dylib
metadata.
---
src/librustc_metadata/loader.rs | 41 ++++++++++++++++++-----------------------
src/librustc_trans/base.rs | 13 ++++++++++---
2 files changed, 28 insertions(+), 26 deletions(-)
diff --git a/src/librustc_metadata/loader.rs b/src/librustc_metadata/loader.rs
index dc10391..9430b70 100644
--- a/src/librustc_metadata/loader.rs
+++ b/src/librustc_metadata/loader.rs
@@ -875,34 +875,29 @@ fn get_metadata_section_imp(target: &Target, flavor: CrateFlavor, filename: &Pat
}
pub fn meta_section_name(target: &Target) -> &'static str {
+ // Historical note:
+ //
+ // When using link.exe it was seen that the section name `.note.rustc`
+ // was getting shortened to `.note.ru`, and according to the PE and COFF
+ // specification:
+ //
+ // > Executable images do not use a string table and do not support
+ // > section names longer than 8 characters
+ //
+ // https://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx
+ //
+ // As a result, we choose a slightly shorter name! As to why
+ // `.note.rustc` works on MinGW, that's another good question...
+
if target.options.is_like_osx {
- "__DATA,__note.rustc"
- } else if target.options.is_like_msvc {
- // When using link.exe it was seen that the section name `.note.rustc`
- // was getting shortened to `.note.ru`, and according to the PE and COFF
- // specification:
- //
- // > Executable images do not use a string table and do not support
- // > section names longer than 8 characters
- //
- // https://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx
- //
- // As a result, we choose a slightly shorter name! As to why
- // `.note.rustc` works on MinGW, that's another good question...
- ".rustc"
+ "__DATA,.rustc"
} else {
- ".note.rustc"
+ ".rustc"
}
}
-pub fn read_meta_section_name(target: &Target) -> &'static str {
- if target.options.is_like_osx {
- "__note.rustc"
- } else if target.options.is_like_msvc {
- ".rustc"
- } else {
- ".note.rustc"
- }
+pub fn read_meta_section_name(_target: &Target) -> &'static str {
+ ".rustc"
}
// A diagnostic function for dumping crate metadata to an output stream
diff --git a/src/librustc_trans/base.rs b/src/librustc_trans/base.rs
index d4f0786..93c9d1a 100644
--- a/src/librustc_trans/base.rs
+++ b/src/librustc_trans/base.rs
@@ -2523,10 +2523,17 @@ pub fn write_metadata<'a, 'tcx>(cx: &SharedCrateContext<'a, 'tcx>,
};
unsafe {
llvm::LLVMSetInitializer(llglobal, llconst);
- let name =
+ let section_name =
cx.tcx().sess.cstore.metadata_section_name(&cx.sess().target.target);
- let name = CString::new(name).unwrap();
- llvm::LLVMSetSection(llglobal, name.as_ptr())
+ let name = CString::new(section_name).unwrap();
+ llvm::LLVMSetSection(llglobal, name.as_ptr());
+
+ // Also generate a .section directive to force no
+ // flags, at least for ELF outputs, so that the
+ // metadata doesn't get loaded into memory.
+ let directive = format!(".section {}", section_name);
+ let directive = CString::new(directive).unwrap();
+ llvm::LLVMSetModuleInlineAsm(cx.metadata_llmod(), directive.as_ptr())
}
return metadata;
}
--
2.7.4

View File

@@ -1,107 +0,0 @@
From bb2d8649b2b344e0bb4b1cf94135378831735557 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Tue, 18 Nov 2014 01:40:21 -0500
Subject: [PATCH 01/10] Target: add default target.json path:
$libdir/rust/targets
---
src/librustc/session/config.rs | 6 +++---
src/librustc/session/mod.rs | 8 ++++++--
src/librustc_back/target/mod.rs | 13 +++++++++++--
3 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index e988ddc..563f3ac 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -42,7 +42,7 @@ use std::env;
use std::fmt;
use std::hash::{Hasher, SipHasher};
use std::iter::FromIterator;
-use std::path::PathBuf;
+use std::path::{Path, PathBuf};
pub struct Config {
pub target: Target,
@@ -1011,8 +1011,8 @@ pub fn build_configuration(sess: &Session,
v
}
-pub fn build_target_config(opts: &Options, sp: &Handler) -> Config {
- let target = match Target::search(&opts.target_triple) {
+pub fn build_target_config(sysroot: &Path, opts: &Options, sp: &Handler) -> Config {
+ let target = match Target::search(sysroot, &opts.target_triple[..]) {
Ok(t) => t,
Err(e) => {
sp.struct_fatal(&format!("Error loading target specification: {}", e))
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs
index c71253a..13b4e05 100644
--- a/src/librustc/session/mod.rs
+++ b/src/librustc/session/mod.rs
@@ -395,13 +395,17 @@ pub fn build_session_(sopts: config::Options,
codemap: Rc<codemap::CodeMap>,
cstore: Rc<for<'a> CrateStore<'a>>)
-> Session {
- let host = match Target::search(config::host_triple()) {
+ let sysroot = match sopts.maybe_sysroot {
+ Some(ref x) => PathBuf::from(x),
+ None => filesearch::get_or_default_sysroot()
+ };
+ let host = match Target::search(&sysroot, config::host_triple()) {
Ok(t) => t,
Err(e) => {
panic!(span_diagnostic.fatal(&format!("Error loading host specification: {}", e)));
}
};
- let target_cfg = config::build_target_config(&sopts, &span_diagnostic);
+ let target_cfg = config::build_target_config(&sysroot, &sopts, &span_diagnostic);
let p_s = parse::ParseSess::with_span_handler(span_diagnostic, codemap);
let default_sysroot = match sopts.maybe_sysroot {
Some(_) => None,
diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs
index 18686e3..d439b59 100644
--- a/src/librustc_back/target/mod.rs
+++ b/src/librustc_back/target/mod.rs
@@ -49,6 +49,8 @@ use std::collections::BTreeMap;
use std::default::Default;
use std::io::prelude::*;
use syntax::abi::Abi;
+use std::borrow::ToOwned;
+use std::path::Path;
mod android_base;
mod apple_base;
@@ -541,12 +543,13 @@ impl Target {
///
/// The error string could come from any of the APIs called, including
/// filesystem access and JSON decoding.
- pub fn search(target: &str) -> Result<Target, String> {
+ pub fn search(sysroot: &Path, target: &str) -> Result<Target, String> {
use std::env;
use std::ffi::OsString;
use std::fs::File;
use std::path::{Path, PathBuf};
use serialize::json;
+ use std::iter::IntoIterator;
fn load_file(path: &Path) -> Result<Target, String> {
let mut f = File::open(path).map_err(|e| e.to_string())?;
@@ -577,8 +580,14 @@ impl Target {
.unwrap_or(OsString::new());
// FIXME 16351: add a sane default search path?
+ let mut default_path = sysroot.to_owned();
+ default_path.push(env!("CFG_LIBDIR_RELATIVE"));
+ default_path.push("rustlib");
- for dir in env::split_paths(&target_path) {
+ let paths = env::split_paths(&target_path)
+ .chain(Some(default_path).into_iter());
+
+ for dir in paths {
let p = dir.join(&path);
if p.is_file() {
return load_file(&p);
--
2.10.0

View File

@@ -1,73 +0,0 @@
From 0829743c109a147213d06d38052662a5f2b0dd9b Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Tue, 18 Nov 2014 14:52:56 -0500
Subject: [PATCH 02/10] mk: for stage0, use RUSTFLAGS to override target libs
dir
Setting HLIB specially for stage0 (and even more specially for windows)
also affects the location we place TLIB. To keep the TLIBs we build in
the place requested by configure, use '-L' and '--sysroot' to point
stage0-rustc at the appropriate location.
---
mk/main.mk | 29 ++++++++++++-----------------
1 file changed, 12 insertions(+), 17 deletions(-)
diff --git a/mk/main.mk b/mk/main.mk
index 90d3563..cdcbdf2 100644
--- a/mk/main.mk
+++ b/mk/main.mk
@@ -420,32 +420,26 @@ define SREQ
HROOT$(1)_H_$(3) = $(3)/stage$(1)
HBIN$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/bin
-ifeq ($$(CFG_WINDOWSY_$(3)),1)
-# On Windows we always store host runtime libraries in the 'bin' directory because
-# there's no rpath. Target libraries go under $CFG_LIBDIR_RELATIVE (usually 'lib').
-HLIB_RELATIVE$(1)_H_$(3) = bin
-TROOT$(1)_T_$(2)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(CFG_LIBDIR_RELATIVE)/rustlib/$(2)
-# Remove the next 3 lines after a snapshot
-ifeq ($(1),0)
-RUSTFLAGS_STAGE0 += -L $$(TROOT$(1)_T_$(2)_H_$(3))/lib
-endif
-
-else
-
-ifeq ($(1),0)
-HLIB_RELATIVE$(1)_H_$(3) = lib
-else
HLIB_RELATIVE$(1)_H_$(3) = $$(CFG_LIBDIR_RELATIVE)
-endif
+
TROOT$(1)_T_$(2)_H_$(3) = $$(HLIB$(1)_H_$(3))/rustlib/$(2)
-endif
HLIB$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(HLIB_RELATIVE$(1)_H_$(3))
# Destinations of artifacts for target architectures
TBIN$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/bin
TLIB$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/lib
+# Don't trust stage0, be explicit about libraries
+# TODO: rather than specifying sysroot, we really want to tell which libdir to
+# use (ie: the dir containing 'rustlib'). This would allow us to avoid
+# passing the '-L' options.
+ifeq ($(1),0)
+RUSTFLAGS_S_$(1)_T_$(2)_H_$(3) += --sysroot "$$(HROOT$(1)_H_$(3))" \
+ -L "$$(TLIB$(1)_T_$(2)_H_$(3))"
+endif
+
+
# Preqrequisites for using the stageN compiler
ifeq ($(1),0)
HSREQ$(1)_H_$(3) = $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3))
@@ -558,6 +552,7 @@ STAGE$(1)_T_$(2)_H_$(3) := \
$$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \
--cfg $$(CFGFLAG$(1)_T_$(2)_H_$(3)) \
$$(CFG_RUSTC_FLAGS) $$(EXTRAFLAGS_STAGE$(1)) --target=$(2)) \
+ $$(RUSTFLAGS_S_$(1)_T_$(2)_H_$(3)) \
$$(RUSTC_FLAGS_$(2))
endef
--
2.10.0

View File

@@ -1,27 +0,0 @@
From 128503bf447e82b9e99bea8ef83294a6446036b5 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Tue, 18 Nov 2014 13:48:14 -0500
Subject: [PATCH 03/10] mk: add missing CFG_LIBDIR_RELATIVE
---
mk/grammar.mk | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mk/grammar.mk b/mk/grammar.mk
index 0d527bd..926f247 100644
--- a/mk/grammar.mk
+++ b/mk/grammar.mk
@@ -11,8 +11,8 @@
BG = $(CFG_BUILD_DIR)/grammar/
SG = $(S)src/grammar/
B = $(CFG_BUILD_DIR)/$(CFG_BUILD)/stage2/
-L = $(B)lib/rustlib/$(CFG_BUILD)/lib
-LD = $(CFG_BUILD)/stage2/lib/rustlib/$(CFG_BUILD)/lib/
+L = $(B)$(CFG_LIBDIR_RELATIVE)/rustlib/$(CFG_BUILD)/lib
+LD = $(CFG_BUILD)/stage2/$(CFG_LIBDIR_RELATIVE)/rustlib/$(CFG_BUILD)/lib/
RUSTC = $(STAGE2_T_$(CFG_BUILD)_H_$(CFG_BUILD))
ifeq ($(CFG_OSTYPE),apple-darwin)
FLEX_LDFLAGS=-ll
--
2.10.0

View File

@@ -1,25 +0,0 @@
From d73ce5d99346812fcf063a87b4efac54c263737d Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Wed, 3 Dec 2014 19:15:19 -0500
Subject: [PATCH 05/10] std/thread_local: workaround for NULL __dso_handle
---
src/libstd/thread/local.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/libstd/thread/local.rs b/src/libstd/thread/local.rs
index 152b977..3c62862 100644
--- a/src/libstd/thread/local.rs
+++ b/src/libstd/thread/local.rs
@@ -380,7 +380,7 @@ pub mod elf {
#[linkage = "extern_weak"]
static __cxa_thread_atexit_impl: *const libc::c_void;
}
- if !__cxa_thread_atexit_impl.is_null() {
+ if !__cxa_thread_atexit_impl.is_null() && !__dso_handle.is_null() {
type F = unsafe extern fn(dtor: unsafe extern fn(*mut u8),
arg: *mut u8,
dso_handle: *mut u8) -> libc::c_int;
--
2.10.0

View File

@@ -1,30 +0,0 @@
From f8d4b1ea925789bca1aa6261017d63f5efa95c0f Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Mon, 2 Mar 2015 13:34:59 -0500
Subject: [PATCH 06/10] mk/install: use disable-rewrite-paths
This stops the install scripts from doing work we've already handled.
Path rewriting is only useful for prepackaged binary installers.
---
mk/install.mk | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/mk/install.mk b/mk/install.mk
index d2e5449..e67650b 100644
--- a/mk/install.mk
+++ b/mk/install.mk
@@ -12,7 +12,9 @@ RUN_INSTALLER = cd tmp/empty_dir && \
sh ../../tmp/dist/$(1)/install.sh \
--prefix="$(DESTDIR)$(CFG_PREFIX)" \
--libdir="$(DESTDIR)$(CFG_LIBDIR)" \
- --mandir="$(DESTDIR)$(CFG_MANDIR)"
+ --mandir="$(DESTDIR)$(CFG_MANDIR)" \
+ "$(MAYBE_DISABLE_VERIFY)" \
+ --disable-rewrite-paths
install:
ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER)))
--
2.10.0

View File

@@ -1,65 +0,0 @@
From 2a42d59c3671f3ab68d8ff49c46240842aff6eb6 Mon Sep 17 00:00:00 2001
From: Steven Walter <swalter@lexmark.com>
Date: Wed, 18 Nov 2015 08:33:26 -0500
Subject: [PATCH 07/10] Allow overriding crate_hash with -C crate_hash
The current crate hash is not stable from run-to-run. This causes
problems with bitbake; it needs a guarantee that every build with the
same input will generate compatible output, otherwise sstate won't work.
Using -C crate_hash, we can do that by using the bitbake input hash to
determine the crate hash; the bitbake input hash will be stable, but
still different for different rust recipes.
Upstream-Status: not-appropriate
Upstream wants to fix it's actual object generation here. See
https://github.com/rust-lang/rust/issues/34902 (and others) for details.
---
src/librustc/session/config.rs | 2 ++
src/librustc_trans/back/link.rs | 12 +++++++++++-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index 563f3ac..52a5130 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -804,6 +804,8 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
"choose the code model to use (rustc --print code-models for details)"),
metadata: Vec<String> = (Vec::new(), parse_list, [TRACKED],
"metadata to mangle symbol names with"),
+ crate_hash: String = ("".to_string(), parse_string, [TRACKED],
+ "override crate hash with given value"),
extra_filename: String = ("".to_string(), parse_string, [UNTRACKED],
"extra data to put in each output filename"),
codegen_units: usize = (1, parse_uint, [UNTRACKED],
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
index 3cf2500..0e48063 100644
--- a/src/librustc_trans/back/link.rs
+++ b/src/librustc_trans/back/link.rs
@@ -125,12 +125,22 @@ pub fn find_crate_name(sess: Option<&Session>,
}
+use std::hash::{Hasher, SipHasher};
+use rustc::hir::svh::Svh;
+
pub fn build_link_meta<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
name: &str)
-> LinkMeta {
+ let crate_hash = if tcx.sess.opts.cg.crate_hash != "" {
+ let mut state = SipHasher::new();
+ state.write(tcx.sess.opts.cg.crate_hash.as_bytes());
+ Svh::new(state.finish())
+ } else {
+ tcx.calculate_krate_hash()
+ };
let r = LinkMeta {
crate_name: name.to_owned(),
- crate_hash: tcx.calculate_krate_hash(),
+ crate_hash: crate_hash,
};
info!("{:?}", r);
return r;
--
2.10.0

View File

@@ -1,27 +0,0 @@
From 174ae38bcc197658dd0ad6bcdae2bb06112e68a2 Mon Sep 17 00:00:00 2001
From: Steven Walter <swalter@lexmark.com>
Date: Wed, 18 Nov 2015 08:41:17 -0500
Subject: [PATCH 08/10] mk/platform.mk: pass -C crate_hash to builds
bitbake recipe will export FORCE_CRATE_HASH
Upstream-Status: not-appropriate
---
mk/platform.mk | 1 +
1 file changed, 1 insertion(+)
diff --git a/mk/platform.mk b/mk/platform.mk
index d601cab..0b5e9f2 100644
--- a/mk/platform.mk
+++ b/mk/platform.mk
@@ -181,6 +181,7 @@ define CFG_MAKE_TOOLCHAIN
AR_$(1)=$(CROSS_PREFIX_$(1))$(AR_$(1))
LINK_$(1)=$(CROSS_PREFIX_$(1))$(LINK_$(1))
RUSTC_CROSS_FLAGS_$(1)=-C linker=$$(call FIND_COMPILER,$$(LINK_$(1))) \
+ -C crate_hash=$(FORCE_CRATE_HASH) \
-C ar=$$(call FIND_COMPILER,$$(AR_$(1))) $(RUSTC_CROSS_FLAGS_$(1))
RUSTC_FLAGS_$(1)=$$(RUSTC_CROSS_FLAGS_$(1)) $(RUSTC_FLAGS_$(1))
--
2.10.0

View File

@@ -1,58 +0,0 @@
From c7daec775a917d9e3017bc35ea7d88cc9418f181 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Mon, 2 Mar 2015 13:27:49 -0500
Subject: [PATCH] add option to disable rewriting of install paths
This is intended for use by rust & cargo's `make install`, as in that
case:
- these paths are typically built into the pre-install layout already
- attempting to do the replacement will be incorrect subdirectory
cases (ie: libdir=lib/foo)
---
install-template.sh | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/install-template.sh b/install-template.sh
index 042b955..4ecf430 100644
--- a/install-template.sh
+++ b/install-template.sh
@@ -618,16 +618,18 @@ install_components() {
# Decide the destination of the file
local _file_install_path="$_dest_prefix/$_file"
- if echo "$_file" | grep "^lib/" > /dev/null
- then
- local _f="$(echo "$_file" | sed 's/^lib\///')"
- _file_install_path="$CFG_LIBDIR/$_f"
- fi
+ if [ -n "${CFG_REWRITE_PATHS-}" ]; then
+ if echo "$_file" | grep "^lib/" > /dev/null
+ then
+ local _f="$(echo "$_file" | sed 's/^lib\///')"
+ _file_install_path="$CFG_LIBDIR/$_f"
+ fi
- if echo "$_file" | grep "^share/man/" > /dev/null
- then
- local _f="$(echo "$_file" | sed 's/^share\/man\///')"
- _file_install_path="$CFG_MANDIR/$_f"
+ if echo "$_file" | grep "^share/man/" > /dev/null
+ then
+ local _f="$(echo "$_file" | sed 's/^share\/man\///')"
+ _file_install_path="$CFG_MANDIR/$_f"
+ fi
fi
# Make sure there's a directory for it
@@ -810,6 +812,7 @@ valopt mandir "$CFG_DESTDIR_PREFIX/share/man" "install man pages in PATH"
opt ldconfig 1 "run ldconfig after installation (Linux only)"
opt verify 1 "obsolete"
flag verbose "run with verbose output"
+opt rewrite-paths 1 "rewrite install paths for libdir & mandir"
if [ $HELP -eq 1 ]
then
--
2.4.1

View File

@@ -1,58 +0,0 @@
From c7daec775a917d9e3017bc35ea7d88cc9418f181 Mon Sep 17 00:00:00 2001
From: Cody P Schafer <dev@codyps.com>
Date: Mon, 2 Mar 2015 13:27:49 -0500
Subject: [PATCH] add option to disable rewriting of install paths
This is intended for use by rust & cargo's `make install`, as in that
case:
- these paths are typically built into the pre-install layout already
- attempting to do the replacement will be incorrect subdirectory
cases (ie: libdir=lib/foo)
---
install-template.sh | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/install-template.sh b/install-template.sh
index 042b955..4ecf430 100644
--- a/install-template.sh
+++ b/install-template.sh
@@ -618,16 +618,18 @@ install_components() {
# Decide the destination of the file
local _file_install_path="$_dest_prefix/$_file"
- if echo "$_file" | grep "^lib/" > /dev/null
- then
- local _f="$(echo "$_file" | sed 's/^lib\///')"
- _file_install_path="$CFG_LIBDIR/$_f"
- fi
+ if [ -n "${CFG_REWRITE_PATHS-}" ]; then
+ if echo "$_file" | grep "^lib/" > /dev/null
+ then
+ local _f="$(echo "$_file" | sed 's/^lib\///')"
+ _file_install_path="$CFG_LIBDIR/$_f"
+ fi
- if echo "$_file" | grep "^share/man/" > /dev/null
- then
- local _f="$(echo "$_file" | sed 's/^share\/man\///')"
- _file_install_path="$CFG_MANDIR/$_f"
+ if echo "$_file" | grep "^share/man/" > /dev/null
+ then
+ local _f="$(echo "$_file" | sed 's/^share\/man\///')"
+ _file_install_path="$CFG_MANDIR/$_f"
+ fi
fi
# Make sure there's a directory for it
@@ -810,6 +812,7 @@ valopt mandir "$CFG_DESTDIR_PREFIX/share/man" "install man pages in PATH"
opt ldconfig 1 "run ldconfig after installation (Linux only)"
opt verify 1 "obsolete"
flag verbose "run with verbose output"
+opt rewrite-paths 1 "rewrite install paths for libdir & mandir"
if [ $HELP -eq 1 ]
then
--
2.4.1

View File

@@ -0,0 +1,44 @@
From 7b3bc1de0c79a1b410105ce36bbe9f774438d263 Mon Sep 17 00:00:00 2001
From: Ross Schulman <ross@rbs.io>
Date: Tue, 1 Feb 2022 09:13:16 -0500
Subject: [PATCH] Add 400-series syscalls to musl riscv64 definitions
Upstream-Status: Backport [https://github.com/rust-lang/libc/commit/7b3bc1de0c79a1b410105ce36bbe9f774438d263]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
.../linux_like/linux/musl/b64/riscv64/mod.rs | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/vendor/libc-0.2.116/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs b/vendor/libc-0.2.116/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs
index 6b17621c7..2036583d5 100644
--- a/vendor/libc-0.2.116/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs
+++ b/vendor/libc-0.2.116/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs
@@ -465,6 +465,25 @@ pub const SYS_pkey_mprotect: ::c_long = 288;
pub const SYS_pkey_alloc: ::c_long = 289;
pub const SYS_pkey_free: ::c_long = 290;
pub const SYS_statx: ::c_long = 291;
+pub const SYS_pidfd_send_signal: ::c_long = 424;
+pub const SYS_io_uring_setup: ::c_long = 425;
+pub const SYS_io_uring_enter: ::c_long = 426;
+pub const SYS_io_uring_register: ::c_long = 427;
+pub const SYS_open_tree: ::c_long = 428;
+pub const SYS_move_mount: ::c_long = 429;
+pub const SYS_fsopen: ::c_long = 430;
+pub const SYS_fsconfig: ::c_long = 431;
+pub const SYS_fsmount: ::c_long = 432;
+pub const SYS_fspick: ::c_long = 433;
+pub const SYS_pidfd_open: ::c_long = 434;
+pub const SYS_clone3: ::c_long = 435;
+pub const SYS_close_range: ::c_long = 436;
+pub const SYS_openat2: ::c_long = 437;
+pub const SYS_pidfd_getfd: ::c_long = 438;
+pub const SYS_faccessat2: ::c_long = 439;
+pub const SYS_process_madvise: ::c_long = 440;
+pub const SYS_epoll_pwait2: ::c_long = 441;
+pub const SYS_mount_setattr: ::c_long = 442;
pub const O_APPEND: ::c_int = 1024;
pub const O_DIRECT: ::c_int = 0x4000;
--
2.35.1

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,40 @@
SUMMARY = "Rust standard libaries"
HOMEPAGE = "http://www.rust-lang.org"
SECTION = "devel"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM = "file://../../COPYRIGHT;md5=93a95682d51b4cb0a633a97046940ef0"
RUSTLIB_DEP = ""
inherit cargo
DEPENDS:append:libc-musl = " libunwind"
# rv32 does not have libunwind ported yet
DEPENDS:remove:riscv32 = "libunwind"
DEPENDS:remove:riscv64 = "libunwind"
# Embed bitcode in order to allow compiling both with and without LTO
RUSTFLAGS += "-Cembed-bitcode=yes"
# Needed so cargo can find libbacktrace
RUSTFLAGS += "-L ${STAGING_LIBDIR} -C link-arg=-Wl,-soname,libstd.so"
S = "${RUSTSRC}/src/libstd"
CARGO_FEATURES ?= "panic-unwind backtrace"
CARGO_BUILD_FLAGS += "--features '${CARGO_FEATURES}'"
CARGO_VENDORING_DIRECTORY = "${RUSTSRC}/vendor"
do_compile:prepend () {
export CARGO_TARGET_DIR="${B}"
# For Rust 1.13.0 and newer
export RUSTC_BOOTSTRAP="1"
}
do_install () {
mkdir -p ${D}${rustlibdir}
# With the incremental build support added in 1.24, the libstd deps directory also includes dependency
# files that get installed. Those are really only needed to incrementally rebuild the libstd library
# itself and don't need to be installed.
rm -f ${B}/${TARGET_SYS}/${BUILD_DIR}/deps/*.d
cp ${B}/${TARGET_SYS}/${BUILD_DIR}/deps/* ${D}${rustlibdir}
}

View File

@@ -1,41 +0,0 @@
SUMMARY = "Rust standard libaries"
HOMEPAGE = "http://www.rust-lang.org"
SECTION = "devel"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8"
SRC_URI = "\
https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \
"
require rust-source-${PV}.inc
S = "${WORKDIR}/rustc-${PV}"
CARGO_INDEX_COMMIT = "6127fc24b0b6fe73fe4d339817fbf000b9a798a2"
SRC_URI += "\
crate://crates.io/gcc/0.3.26 \
crate-index://crates.io/${CARGO_INDEX_COMMIT} \
"
DEPENDS += "compiler-rt (=${PV})"
RUSTLIB_DEP = ""
inherit cargo
# Needed so cargo can find libbacktrace
RUSTFLAGS += "-L ${STAGING_LIBDIR}"
S = "${WORKDIR}/rustc-${PV}"
do_compile_prepend () {
cd ${S}/src/rustc/std_shim
export CARGO_TARGET_DIR="${B}"
export RUSTC_BOOTSTRAP_KEY="${RS_KEY}"
}
do_install () {
mkdir -p ${D}${rustlibdir}
cp ${B}/${TARGET_SYS}/release/deps/* ${D}${rustlibdir}
}

View File

@@ -1,37 +0,0 @@
SUMMARY = "Rust standard libaries"
HOMEPAGE = "http://www.rust-lang.org"
SECTION = "devel"
LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8"
require rust-source-${PV}.inc
S = "${WORKDIR}/rustc-${PV}"
CARGO_INDEX_COMMIT = "6127fc24b0b6fe73fe4d339817fbf000b9a798a2"
SRC_URI += "\
crate://crates.io/gcc/0.3.27 \
crate-index://crates.io/${CARGO_INDEX_COMMIT} \
"
DEPENDS += "compiler-rt (=${PV})"
RUSTLIB_DEP = ""
inherit cargo
# Needed so cargo can find libbacktrace
RUSTFLAGS += "-L ${STAGING_LIBDIR}"
S = "${WORKDIR}/rustc-${PV}"
do_compile_prepend () {
cd ${S}/src/rustc/std_shim
export CARGO_TARGET_DIR="${B}"
export RUSTC_BOOTSTRAP_KEY="${RS_KEY}"
}
do_install () {
mkdir -p ${D}${rustlibdir}
cp ${B}/${TARGET_SYS}/release/deps/* ${D}${rustlibdir}
}

View File

@@ -0,0 +1,11 @@
require rust-source-${PV}.inc
require libstd-rs.inc
# Check if libc crate is >= 0.2.117 before dropping this patch
SRC_URI += " \
file://0001-Add-400-series-syscalls-to-musl-riscv64-definitions.patch;patchdir=../../ \
file://0001-Update-checksums-for-modified-vendored-libc.patch;patchdir=../../ \
"
# libstd moved from src/libstd to library/std in 1.47+
S = "${RUSTSRC}/library/std"

View File

@@ -0,0 +1,5 @@
require rust-source-${PV}.inc
require libstd-rs.inc
# libstd moved from src/libstd to library/std in 1.47+
S = "${RUSTSRC}/library/std"

View File

@@ -0,0 +1,369 @@
# Right now this is focused on arm-specific tune features.
# We get away with this for now as one can only use x86-64 as the build host
# (not arm).
# Note that TUNE_FEATURES is _always_ refering to the target, so we really
# don't want to use this for the host/build.
def llvm_features_from_tune(d):
f = []
feat = d.getVar('TUNE_FEATURES')
if not feat:
return []
feat = frozenset(feat.split())
mach_overrides = d.getVar('MACHINEOVERRIDES')
mach_overrides = frozenset(mach_overrides.split(':'))
if 'vfpv4' in feat:
f.append("+vfp4")
if 'vfpv3' in feat:
f.append("+vfp3")
if 'vfpv3d16' in feat:
f.append("+d16")
if 'vfpv2' in feat or 'vfp' in feat:
f.append("+vfp2")
if 'neon' in feat:
f.append("+neon")
if 'mips32' in feat:
f.append("+mips32")
if 'mips32r2' in feat:
f.append("+mips32r2")
if target_is_armv7(d):
f.append('+v7')
if ('armv6' in mach_overrides) or ('armv6' in feat):
f.append("+v6")
if 'armv5te' in feat:
f.append("+strict-align")
f.append("+v5te")
elif 'armv5' in feat:
f.append("+strict-align")
f.append("+v5")
if ('armv4' in mach_overrides) or ('armv4' in feat):
f.append("+strict-align")
if 'dsp' in feat:
f.append("+dsp")
if 'thumb' in feat:
if d.getVar('ARM_THUMB_OPT') == "thumb":
if target_is_armv7(d):
f.append('+thumb2')
f.append("+thumb-mode")
if 'cortexa5' in feat:
f.append("+a5")
if 'cortexa7' in feat:
f.append("+a7")
if 'cortexa9' in feat:
f.append("+a9")
if 'cortexa15' in feat:
f.append("+a15")
if 'cortexa17' in feat:
f.append("+a17")
if ('riscv64' in feat) or ('riscv32' in feat):
f.append("+a,+c,+d,+f,+m")
return f
llvm_features_from_tune[vardepvalue] = "${@llvm_features_from_tune(d)}"
# TARGET_CC_ARCH changes from build/cross/target so it'll do the right thing
# this should go away when https://github.com/rust-lang/rust/pull/31709 is
# stable (1.9.0?)
def llvm_features_from_cc_arch(d):
f = []
feat = d.getVar('TARGET_CC_ARCH')
if not feat:
return []
feat = frozenset(feat.split())
if '-mmmx' in feat:
f.append("+mmx")
if '-msse' in feat:
f.append("+sse")
if '-msse2' in feat:
f.append("+sse2")
if '-msse3' in feat:
f.append("+sse3")
if '-mssse3' in feat:
f.append("+ssse3")
if '-msse4.1' in feat:
f.append("+sse4.1")
if '-msse4.2' in feat:
f.append("+sse4.2")
if '-msse4a' in feat:
f.append("+sse4a")
if '-mavx' in feat:
f.append("+avx")
if '-mavx2' in feat:
f.append("+avx2")
return f
def llvm_features_from_target_fpu(d):
# TARGET_FPU can be hard or soft. +soft-float tell llvm to use soft float
# ABI. There is no option for hard.
fpu = d.getVar('TARGET_FPU', True)
return ["+soft-float"] if fpu == "soft" else []
def llvm_features(d):
return ','.join(llvm_features_from_tune(d) +
llvm_features_from_cc_arch(d) +
llvm_features_from_target_fpu(d))
## arm-unknown-linux-gnueabihf
DATA_LAYOUT[arm-eabi] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
LLVM_TARGET[arm-eabi] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[arm-eabi] = "little"
TARGET_POINTER_WIDTH[arm-eabi] = "32"
TARGET_C_INT_WIDTH[arm-eabi] = "32"
MAX_ATOMIC_WIDTH[arm-eabi] = "64"
FEATURES[arm-eabi] = "+v6,+vfp2"
## armv7-unknown-linux-gnueabihf
DATA_LAYOUT[armv7-eabi] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
LLVM_TARGET[armv7-eabi] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[armv7-eabi] = "little"
TARGET_POINTER_WIDTH[armv7-eabi] = "32"
TARGET_C_INT_WIDTH[armv7-eabi] = "32"
MAX_ATOMIC_WIDTH[armv7-eabi] = "64"
FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2"
## aarch64-unknown-linux-{gnu, musl}
DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
LLVM_TARGET[aarch64] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[aarch64] = "little"
TARGET_POINTER_WIDTH[aarch64] = "64"
TARGET_C_INT_WIDTH[aarch64] = "32"
MAX_ATOMIC_WIDTH[aarch64] = "128"
## x86_64-unknown-linux-{gnu, musl}
DATA_LAYOUT[x86_64] = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
LLVM_TARGET[x86_64] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[x86_64] = "little"
TARGET_POINTER_WIDTH[x86_64] = "64"
TARGET_C_INT_WIDTH[x86_64] = "32"
MAX_ATOMIC_WIDTH[x86_64] = "64"
## x86_64-unknown-linux-gnux32
DATA_LAYOUT[x86_64-x32] = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
LLVM_TARGET[x86_64-x32] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[x86_64-x32] = "little"
TARGET_POINTER_WIDTH[x86_64-x32] = "32"
TARGET_C_INT_WIDTH[x86_64-x32] = "32"
MAX_ATOMIC_WIDTH[x86_64-x32] = "64"
## i686-unknown-linux-{gnu, musl}
DATA_LAYOUT[i686] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
LLVM_TARGET[i686] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[i686] = "little"
TARGET_POINTER_WIDTH[i686] = "32"
TARGET_C_INT_WIDTH[i686] = "32"
MAX_ATOMIC_WIDTH[i686] = "64"
## XXX: a bit of a hack so qemux86 builds, clone of i686-unknown-linux-{gnu, musl} above
DATA_LAYOUT[i586] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
LLVM_TARGET[i586] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[i586] = "little"
TARGET_POINTER_WIDTH[i586] = "32"
TARGET_C_INT_WIDTH[i586] = "32"
MAX_ATOMIC_WIDTH[i586] = "64"
## mips-unknown-linux-{gnu, musl}
DATA_LAYOUT[mips] = "E-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64"
LLVM_TARGET[mips] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[mips] = "big"
TARGET_POINTER_WIDTH[mips] = "32"
TARGET_C_INT_WIDTH[mips] = "32"
MAX_ATOMIC_WIDTH[mips] = "32"
## mipsel-unknown-linux-{gnu, musl}
DATA_LAYOUT[mipsel] = "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64"
LLVM_TARGET[mipsel] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[mipsel] = "little"
TARGET_POINTER_WIDTH[mipsel] = "32"
TARGET_C_INT_WIDTH[mipsel] = "32"
MAX_ATOMIC_WIDTH[mipsel] = "32"
## mips64-unknown-linux-{gnu, musl}
DATA_LAYOUT[mips64] = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128"
LLVM_TARGET[mips64] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[mips64] = "big"
TARGET_POINTER_WIDTH[mips64] = "64"
TARGET_C_INT_WIDTH[mips64] = "64"
MAX_ATOMIC_WIDTH[mips64] = "64"
## mips64el-unknown-linux-{gnu, musl}
DATA_LAYOUT[mips64el] = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128"
LLVM_TARGET[mips64el] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[mips64el] = "little"
TARGET_POINTER_WIDTH[mips64el] = "64"
TARGET_C_INT_WIDTH[mips64el] = "64"
MAX_ATOMIC_WIDTH[mips64el] = "64"
## powerpc-unknown-linux-{gnu, musl}
DATA_LAYOUT[powerpc] = "E-m:e-p:32:32-i64:64-n32"
LLVM_TARGET[powerpc] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[powerpc] = "big"
TARGET_POINTER_WIDTH[powerpc] = "32"
TARGET_C_INT_WIDTH[powerpc] = "32"
MAX_ATOMIC_WIDTH[powerpc] = "32"
## powerpc64-unknown-linux-{gnu, musl}
DATA_LAYOUT[powerpc64] = "E-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512"
LLVM_TARGET[powerpc64] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[powerpc64] = "big"
TARGET_POINTER_WIDTH[powerpc64] = "64"
TARGET_C_INT_WIDTH[powerpc64] = "64"
MAX_ATOMIC_WIDTH[powerpc64] = "64"
## powerpc64le-unknown-linux-{gnu, musl}
DATA_LAYOUT[powerpc64le] = "e-m:e-i64:64-n32:64-v256:256:256-v512:512:512"
LLVM_TARGET[powerpc64le] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[powerpc64le] = "little"
TARGET_POINTER_WIDTH[powerpc64le] = "64"
TARGET_C_INT_WIDTH[powerpc64le] = "64"
MAX_ATOMIC_WIDTH[powerpc64le] = "64"
## riscv32-unknown-linux-{gnu, musl}
DATA_LAYOUT[riscv32] = "e-m:e-p:32:32-i64:64-n32-S128"
LLVM_TARGET[riscv32] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[riscv32] = "little"
TARGET_POINTER_WIDTH[riscv32] = "32"
TARGET_C_INT_WIDTH[riscv32] = "32"
MAX_ATOMIC_WIDTH[riscv32] = "32"
## riscv64-unknown-linux-{gnu, musl}
DATA_LAYOUT[riscv64] = "e-m:e-p:64:64-i64:64-i128:128-n64-S128"
LLVM_TARGET[riscv64] = "${RUST_TARGET_SYS}"
TARGET_ENDIAN[riscv64] = "little"
TARGET_POINTER_WIDTH[riscv64] = "64"
TARGET_C_INT_WIDTH[riscv64] = "64"
MAX_ATOMIC_WIDTH[riscv64] = "64"
def sys_for(d, thing):
return d.getVar('{}_SYS'.format(thing))
def prefix_for(d, thing):
return d.getVar('{}_PREFIX'.format(thing))
# Convert a normal arch (HOST_ARCH, TARGET_ARCH, BUILD_ARCH, etc) to something
# rust's internals won't choke on.
def arch_to_rust_target_arch(arch):
if arch == "i586" or arch == "i686":
return "x86"
elif arch == "mipsel":
return "mips"
elif arch == "mip64sel":
return "mips64"
elif arch == "armv7":
return "arm"
elif arch == "powerpc64le":
return "powerpc64"
else:
return arch
# generates our target CPU value
def llvm_cpu(d):
cpu = d.getVar('PACKAGE_ARCH')
target = d.getVar('TRANSLATED_TARGET_ARCH')
trans = {}
trans['corei7-64'] = "corei7"
trans['core2-32'] = "core2"
trans['x86-64'] = "x86-64"
trans['i686'] = "i686"
trans['i586'] = "i586"
trans['powerpc'] = "powerpc"
trans['mips64'] = "mips64"
trans['mips64el'] = "mips64"
trans['riscv64'] = "generic-rv64"
trans['riscv32'] = "generic-rv32"
if target in ["mips", "mipsel"]:
feat = frozenset(d.getVar('TUNE_FEATURES').split())
if "mips32r2" in feat:
trans['mipsel'] = "mips32r2"
trans['mips'] = "mips32r2"
elif "mips32" in feat:
trans['mipsel'] = "mips32"
trans['mips'] = "mips32"
try:
return trans[cpu]
except:
return trans.get(target, "generic")
TARGET_LLVM_CPU="${@llvm_cpu(d)}"
TARGET_LLVM_FEATURES = "${@llvm_features(d)}"
# class-native implies TARGET=HOST, and TUNE_FEATURES only describes the real
# (original) target.
TARGET_LLVM_FEATURES:class-native = "${@','.join(llvm_features_from_cc_arch(d))}"
def rust_gen_target(d, thing, wd, features, cpu, arch, abi=""):
import json
sys = sys_for(d, thing)
prefix = prefix_for(d, thing)
if abi:
arch_abi = "{}-{}".format(arch, abi)
else:
arch_abi = arch
features = features or d.getVarFlag('FEATURES', arch_abi) or ""
features = features.strip()
# build tspec
tspec = {}
tspec['llvm-target'] = d.getVarFlag('LLVM_TARGET', arch_abi)
tspec['data-layout'] = d.getVarFlag('DATA_LAYOUT', arch_abi)
tspec['max-atomic-width'] = int(d.getVarFlag('MAX_ATOMIC_WIDTH', arch_abi))
tspec['target-pointer-width'] = d.getVarFlag('TARGET_POINTER_WIDTH', arch_abi)
tspec['target-c-int-width'] = d.getVarFlag('TARGET_C_INT_WIDTH', arch_abi)
tspec['target-endian'] = d.getVarFlag('TARGET_ENDIAN', arch_abi)
tspec['arch'] = arch_to_rust_target_arch(arch)
tspec['os'] = "linux"
if "musl" in tspec['llvm-target']:
tspec['env'] = "musl"
else:
tspec['env'] = "gnu"
if "riscv64" in tspec['llvm-target']:
tspec['llvm-abiname'] = "lp64d"
if "riscv32" in tspec['llvm-target']:
tspec['llvm-abiname'] = "ilp32d"
tspec['vendor'] = "unknown"
tspec['target-family'] = "unix"
tspec['linker'] = "{}{}gcc".format(d.getVar('CCACHE'), prefix)
tspec['cpu'] = cpu
if features != "":
tspec['features'] = features
tspec['dynamic-linking'] = True
tspec['executables'] = True
tspec['linker-is-gnu'] = True
tspec['linker-flavor'] = "gcc"
tspec['has-rpath'] = True
tspec['has-elf-tls'] = True
tspec['position-independent-executables'] = True
tspec['panic-strategy'] = d.getVar("RUST_PANIC_STRATEGY")
# write out the target spec json file
with open(wd + sys + '.json', 'w') as f:
json.dump(tspec, f, indent=4)
python do_rust_gen_targets () {
wd = d.getVar('WORKDIR') + '/targets/'
build_arch = d.getVar('BUILD_ARCH')
rust_gen_target(d, 'BUILD', wd, "", "generic", build_arch)
}
addtask rust_gen_targets after do_patch before do_compile
do_rust_gen_targets[dirs] += "${WORKDIR}/targets"

View File

@@ -0,0 +1,55 @@
RUST_ALTERNATE_EXE_PATH = "${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-config"
require rust.inc
DEPENDS += "rust-llvm (=${PV})"
inherit cross-canadian
DEPENDS += " \
virtual/${HOST_PREFIX}gcc-crosssdk \
virtual/nativesdk-libc rust-llvm-native \
virtual/${TARGET_PREFIX}compilerlibs \
virtual/nativesdk-${HOST_PREFIX}compilerlibs \
gcc-cross-${TARGET_ARCH} \
"
# The host tools are likely not to be able to do the necessary operation on
# the target architecturea. Alternatively one could check compatibility
# between host/target.
EXCLUDE_FROM_SHLIBS_${RUSTLIB_TARGET_PN} = "1"
DEBUG_PREFIX_MAP = "-fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
-fdebug-prefix-map=${STAGING_DIR_HOST}= \
-fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
"
LLVM_TARGET[x86_64] = "${RUST_HOST_SYS}"
python do_rust_gen_targets () {
wd = d.getVar('WORKDIR') + '/targets/'
rust_gen_target(d, 'TARGET', wd, d.getVar('TARGET_LLVM_FEATURES') or "", d.getVar('TARGET_LLVM_CPU'), d.getVar('TARGET_ARCH'))
rust_gen_target(d, 'HOST', wd, "", "generic", d.getVar('HOST_ARCH'))
rust_gen_target(d, 'BUILD', wd, "", "generic", d.getVar('BUILD_ARCH'))
}
INHIBIT_DEFAULT_RUST_DEPS = "1"
export WRAPPER_TARGET_CC = "${CCACHE}${TARGET_PREFIX}gcc --sysroot=${STAGING_DIR_TARGET} ${TARGET_CC_ARCH} ${SECURITY_NOPIE_CFLAGS}"
export WRAPPER_TARGET_CXX = "${CCACHE}${TARGET_PREFIX}g++ --sysroot=${STAGING_DIR_TARGET} ${TARGET_CC_ARCH} ${SECURITY_NOPIE_CFLAGS}"
export WRAPPER_TARGET_CCLD = "${TARGET_PREFIX}gcc --sysroot=${STAGING_DIR_TARGET} ${TARGET_CC_ARCH} ${SECURITY_NOPIE_CFLAGS}"
export WRAPPER_TARGET_LDFLAGS = "${TARGET_LDFLAGS}"
export WRAPPER_TARGET_AR = "${TARGET_PREFIX}ar"
python do_configure:prepend() {
targets = [d.getVar("TARGET_SYS", True), "{}-unknown-linux-gnu".format(d.getVar("HOST_ARCH", True))]
hosts = ["{}-unknown-linux-gnu".format(d.getVar("HOST_ARCH", True))]
}
INSANE_SKIP:${RUSTLIB_TARGET_PN} = "file-rdeps arch ldflags"
SKIP_FILEDEPS:${RUSTLIB_TARGET_PN} = "1"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_SYSROOT_STRIP = "1"

View File

@@ -0,0 +1,78 @@
require rust-cross-canadian-common.inc
RUSTLIB_TARGET_PN = "rust-cross-canadian-rustlib-target-${TRANSLATED_TARGET_ARCH}"
RUSTLIB_HOST_PN = "rust-cross-canadian-rustlib-host-${TRANSLATED_TARGET_ARCH}"
RUSTLIB_SRC_PN = "rust-cross-canadian-src"
RUSTLIB_PKGS = "${RUSTLIB_SRC_PN} ${RUSTLIB_TARGET_PN} ${RUSTLIB_HOST_PN}"
PN = "rust-cross-canadian-${TRANSLATED_TARGET_ARCH}"
PACKAGES = "${RUSTLIB_PKGS} ${PN}"
RDEPENDS:${PN} += "${RUSTLIB_PKGS}"
# The default behaviour of x.py changed in 1.47+ so now we need to
# explicitly ask for the stage 2 compiler to be assembled.
do_compile () {
rust_runx build --stage 2
}
do_install () {
# Rust requires /usr/lib to contain the libs.
# Similar story is with /usr/bin ruquiring `lib` to be at the same level.
# The required structure is retained for simplicity.
SYS_LIBDIR=$(dirname ${D}${libdir})
SYS_BINDIR=$(dirname ${D}${bindir})
RUSTLIB_DIR=${SYS_LIBDIR}/${TARGET_SYS}/rustlib
install -d "${SYS_BINDIR}"
cp build/${SNAPSHOT_BUILD_SYS}/stage2/bin/* ${SYS_BINDIR}
for i in ${SYS_BINDIR}/*; do
chrpath -r "\$ORIGIN/../lib" ${i}
done
install -d "${D}${libdir}"
cp -pRd build/${SNAPSHOT_BUILD_SYS}/stage2/lib/${TARGET_SYS}/*.so ${SYS_LIBDIR}
cp -pRd build/${SNAPSHOT_BUILD_SYS}/stage2/lib/${TARGET_SYS}/rustlib ${RUSTLIB_DIR}
for i in ${SYS_LIBDIR}/*.so; do
chrpath -r "\$ORIGIN/../lib" ${i}
done
for i in ${RUSTLIB_DIR}/*/lib/*.so; do
chrpath -d ${i}
done
install -m 0644 "${WORKDIR}/targets/${TARGET_SYS}.json" "${RUSTLIB_DIR}"
SRC_DIR=${RUSTLIB_DIR}/src/rust
install -d ${SRC_DIR}/src/llvm-project
cp -R --no-dereference build/${SNAPSHOT_BUILD_SYS}/stage2/lib/rustlib/src/rust/src/llvm-project/libunwind ${SRC_DIR}/src/llvm-project
cp -R --no-dereference build/${SNAPSHOT_BUILD_SYS}/stage2/lib/rustlib/src/rust/library ${SRC_DIR}
cp --no-dereference build/${SNAPSHOT_BUILD_SYS}/stage2/lib/rustlib/src/rust/Cargo.lock ${SRC_DIR}
# Remove executable bit from any files so then SDK doesn't try to relocate.
chmod -R -x+X ${SRC_DIR}
ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
mkdir "${ENV_SETUP_DIR}"
ENV_SETUP_SH="${ENV_SETUP_DIR}/rust.sh"
cat <<- EOF > "${ENV_SETUP_SH}"
export RUSTFLAGS="--sysroot=\$OECORE_NATIVE_SYSROOT/usr -C link-arg=--sysroot=\$OECORE_TARGET_SYSROOT -L\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib/${TARGET_SYS}/lib"
export RUST_TARGET_PATH="\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib"
EOF
chown -R root.root ${D}
}
PKG_SYS_LIBDIR = "${SDKPATHNATIVE}/usr/lib"
PKG_SYS_BINDIR = "${SDKPATHNATIVE}/usr/bin"
PKG_RUSTLIB_DIR = "${PKG_SYS_LIBDIR}/${TARGET_SYS}/rustlib"
FILES:${PN} = "${PKG_SYS_LIBDIR}/*.so ${PKG_SYS_BINDIR} ${base_prefix}/environment-setup.d"
FILES:${RUSTLIB_TARGET_PN} = "${PKG_RUSTLIB_DIR}/${TARGET_SYS} ${PKG_RUSTLIB_DIR}/${TARGET_SYS}.json"
FILES:${RUSTLIB_HOST_PN} = "${PKG_RUSTLIB_DIR}/${BUILD_ARCH}-unknown-linux-gnu"
FILES:${RUSTLIB_SRC_PN} = "${PKG_RUSTLIB_DIR}/src"
SUMMARY:${RUSTLIB_TARGET_PN} = "Rust cross canadian libaries for ${TARGET_SYS}"
SUMMARY:${RUSTLIB_HOST_PN} = "Rust cross canadian libaries for ${HOST_SYS}"
SUMMARY:${RUSTLIB_SRC_PN} = "Rust standard library sources for cross canadian toolchain"
SUMMARY:${PN} = "Rust crost canadian compiler"

View File

@@ -0,0 +1,6 @@
require rust-cross-canadian.inc
require rust-source-${PV}.inc
require rust-snapshot-${PV}.inc
FILESEXTRAPATHS:prepend := "${THISDIR}/rust:"

View File

@@ -0,0 +1,6 @@
require rust-cross-canadian.inc
require rust-source-${PV}.inc
require rust-snapshot-${PV}.inc
FILESEXTRAPATHS:prepend := "${THISDIR}/rust:"

View File

@@ -1,6 +1,26 @@
require rust.inc require rust.inc
inherit cross inherit cross
require rust-source-${PV}.inc
python do_rust_gen_targets () {
wd = d.getVar('WORKDIR') + '/targets/'
# It is important 'TARGET' is last here so that it overrides our less
# informed choices for BUILD & HOST if TARGET happens to be the same as
# either of them.
for thing in ['BUILD', 'HOST', 'TARGET']:
bb.debug(1, "rust_gen_target for " + thing)
features = ""
cpu = "generic"
arch = d.getVar('{}_ARCH'.format(thing))
abi = ""
if thing is "TARGET":
abi = d.getVar('ABIEXTENSION')
# arm and armv7 have different targets in llvm
if arch == "arm" and target_is_armv7(d):
arch = 'armv7'
features = d.getVar('TARGET_LLVM_FEATURES') or ""
cpu = d.getVar('TARGET_LLVM_CPU')
rust_gen_target(d, thing, wd, features, cpu, arch, abi)
}
# Otherwise we'll depend on what we provide # Otherwise we'll depend on what we provide
INHIBIT_DEFAULT_RUST_DEPS = "1" INHIBIT_DEFAULT_RUST_DEPS = "1"
@@ -14,7 +34,7 @@ DEPENDS += "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}compilerlibs vir
DEPENDS += "rust-native" DEPENDS += "rust-native"
PROVIDES = "virtual/${TARGET_PREFIX}rust" PROVIDES = "virtual/${TARGET_PREFIX}rust"
PN = "rust-cross-${TARGET_ARCH}" PN = "rust-cross-${TUNE_PKGARCH}-${TCLIBC}"
# In the cross compilation case, rustc doesn't seem to get the rpath quite # In the cross compilation case, rustc doesn't seem to get the rpath quite
# right. It manages to include '../../lib/${TARGET_PREFIX}', but doesn't # right. It manages to include '../../lib/${TARGET_PREFIX}', but doesn't
@@ -27,11 +47,14 @@ PN = "rust-cross-${TARGET_ARCH}"
# FIXME: this should really be fixed in rust itself. # FIXME: this should really be fixed in rust itself.
# FIXME: using hard-coded relative paths is wrong, we should ask bitbake for # FIXME: using hard-coded relative paths is wrong, we should ask bitbake for
# the relative path between 2 of it's vars. # the relative path between 2 of it's vars.
HOST_POST_LINK_ARGS_append = " -Wl,-rpath=../../lib" HOST_POST_LINK_ARGS:append = " -Wl,-rpath=../../lib"
BUILD_POST_LINK_ARGS_append = " -Wl,-rpath=../../lib" BUILD_POST_LINK_ARGS:append = " -Wl,-rpath=../../lib"
# We need the same thing for the calls to the compiler when building the runtime crap # We need the same thing for the calls to the compiler when building the runtime crap
TARGET_CC_ARCH_append = " --sysroot=${STAGING_DIR_TARGET}" TARGET_CC_ARCH:append = " --sysroot=${STAGING_DIR_TARGET}"
do_rust_setup_snapshot () {
}
do_configure () { do_configure () {
} }

View File

@@ -1,50 +0,0 @@
require rust.inc
inherit cross
require rust-source-${PV}.inc
# Otherwise we'll depend on what we provide
INHIBIT_DEFAULT_RUST_DEPS = "1"
# Unlike native (which nicely maps it's DEPENDS) cross wipes them out completely.
# Generally, we (and cross in general) need the same things that native needs,
# so it might make sense to take it's mapping. For now, though, we just mention
# the bits we need explicitly.
DEPENDS += "rust-llvm-native"
DEPENDS += "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}compilerlibs virtual/libc"
DEPENDS += "rust-native"
PROVIDES = "virtual/${TARGET_PREFIX}rust"
PN = "rust-cross-${TARGET_ARCH}"
# In the cross compilation case, rustc doesn't seem to get the rpath quite
# right. It manages to include '../../lib/${TARGET_PREFIX}', but doesn't
# include the '../../lib' (ie: relative path from cross_bindir to normal
# libdir. As a result, we end up not being able to properly reference files in normal ${libdir}.
# Most of the time this happens to work fine as the systems libraries are
# subsituted, but sometimes a host system will lack a library, or the right
# version of a library (libtinfo was how I noticed this).
#
# FIXME: this should really be fixed in rust itself.
# FIXME: using hard-coded relative paths is wrong, we should ask bitbake for
# the relative path between 2 of it's vars.
HOST_POST_LINK_ARGS_append = " -Wl,-rpath=../../lib"
BUILD_POST_LINK_ARGS_append = " -Wl,-rpath=../../lib"
# We need the same thing for the calls to the compiler when building the runtime crap
TARGET_CC_ARCH_append = " --sysroot=${STAGING_DIR_TARGET}"
do_configure () {
}
do_compile () {
}
do_install () {
mkdir -p ${D}${prefix}/${base_libdir_native}/rustlib
cp ${WORKDIR}/targets/${TARGET_SYS}.json ${D}${prefix}/${base_libdir_native}/rustlib
}
rust_cross_sysroot_preprocess() {
sysroot_stage_dir ${D}${prefix}/${base_libdir_native}/rustlib ${SYSROOT_DESTDIR}${prefix}/${base_libdir_native}/rustlib
}
SYSROOT_PREPROCESS_FUNCS += "rust_cross_sysroot_preprocess"

View File

@@ -1,2 +1,2 @@
require rust-llvm.inc require rust-cross.inc
require rust-source-${PV}.inc require rust-source-${PV}.inc

View File

@@ -0,0 +1,2 @@
require rust-cross.inc
require rust-source-${PV}.inc

View File

@@ -1,113 +1,72 @@
SUMMARY = "LLVM compiler framework (packaged with rust)" SUMMARY = "LLVM compiler framework (packaged with rust)"
LICENSE = "NCSA" LICENSE ?= "Apache-2.0-with-LLVM-exception"
HOMEPAGE = "http://www.rust-lang.org"
S = "${WORKDIR}/rustc-${PV}/src/llvm" SRC_URI += "file://0002-llvm-allow-env-override-of-exe-path.patch;striplevel=2 \
file://0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch;striplevel=2 \
file://0003-llvm-fix-include-benchmarks.patch;striplevel=2 \
"
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=4c0bc17c954e99fd547528d938832bfa" S = "${RUSTSRC}/src/llvm-project/llvm"
inherit cmake pythonnative LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=8a15a0759ef07f2682d2ba4b893c9afe"
inherit cmake python3native
DEPENDS += "ninja-native rust-llvm-native"
ARM_INSTRUCTION_SET:armv5 = "arm"
ARM_INSTRUCTION_SET:armv4t = "arm"
# rustc_llvm with debug info is not recognized as a valid crate that's
# generated by rust-llvm-native.
CFLAGS:remove = "-g"
CXXFLAGS:remove = "-g"
LLVM_DIR = "llvm${LLVM_RELEASE}"
EXTRA_OECMAKE = " \ EXTRA_OECMAKE = " \
-DLLVM_TARGETS_TO_BUILD='X86;ARM;AArch64;PowerPC' \ -DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=OFF \ -DLLVM_TARGETS_TO_BUILD='ARM;AArch64;Mips;PowerPC;RISCV;X86' \
-DLLVM_BUILD_DOCS=OFF \ -DLLVM_BUILD_DOCS=OFF \
-DLLVM_ENABLE_TERMINFO=OFF \ -DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_ENABLE_ZLIB=OFF \ -DLLVM_ENABLE_ZLIB=OFF \
-DLLVM_ENABLE_LIBXML2=OFF \
-DLLVM_ENABLE_FFI=OFF \ -DLLVM_ENABLE_FFI=OFF \
-DLLVM_INSTALL_UTILS=ON \ -DLLVM_INSTALL_UTILS=ON \
-DLLVM_BUILD_TOOLS=ON \
-DLLVM_BUILD_EXAMPLES=OFF \ -DLLVM_BUILD_EXAMPLES=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \ -DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_BUILD_TESTS=OFF \ -DLLVM_BUILD_TESTS=OFF \
-DLLVM_INCLUDE_TESTS=OFF \ -DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_TARGET_ARCH=${TARGET_ARCH} \ -DLLVM_TARGET_ARCH=${TARGET_ARCH} \
-DCMAKE_INSTALL_PREFIX:PATH=${libdir}/llvm-rust \
"
EXTRA_OECMAKE:append:class-target = "\
-DCMAKE_CROSSCOMPILING:BOOL=ON \
-DLLVM_BUILD_TOOLS=OFF \
-DLLVM_TABLEGEN=${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-tblgen \
-DLLVM_CONFIG_PATH=${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-config \
" "
# The debug symbols are huge here (>2GB) so suppress them since they # The debug symbols are huge here (>2GB) so suppress them since they
# provide almost no value. If you really need them then override this # provide almost no value. If you really need them then override this
INHIBIT_PACKAGE_DEBUG_SPLIT = "1" INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
EXTRA_OECMAKE_append_class-target = "\ export YOCTO_ALTERNATE_EXE_PATH = "${STAGING_LIBDIR}/llvm-rust/bin/llvm-config"
-DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/native_toolchain.cmake' \
"
do_generate_native_toolchain_file() { do_install:append () {
cat > ${WORKDIR}/native_toolchain.cmake <<EOF # we don't need any of this stuff to build Rust
set( CMAKE_SYSTEM_NAME `echo ${BUILD_OS} | sed -e 's/^./\u&/' -e 's/^\(Linux\).*/\1/'` ) rm -rf "${D}/usr/lib/cmake"
set( CMAKE_SYSTEM_PROCESSOR ${BUILD_ARCH} )
set( CMAKE_C_COMPILER ${BUILD_CC} )
set( CMAKE_CXX_COMPILER ${BUILD_CXX} )
set( CMAKE_ASM_COMPILER ${BUILD_AS} )
set( CMAKE_AR ${BUILD_AR} CACHE FILEPATH "Archiver" )
set( CMAKE_C_FLAGS "${BUILD_CC_ARCH} ${BUILD_CFLAGS}" CACHE STRING "CFLAGS" )
set( CMAKE_CXX_FLAGS "${BUILD_CC_ARCH} ${BUILD_CXXFLAGS}" CACHE STRING "CXXFLAGS" )
set( CMAKE_ASM_FLAGS "${BUILD_CC_ARCH} ${BUILD_CFLAGS}" CACHE STRING "ASM FLAGS" )
set( CMAKE_C_FLAGS_RELEASE "${SELECTED_OPTIMIZATION} ${BUILD_CFLAGS} -DNDEBUG" CACHE STRING "CFLAGS for release" )
set( CMAKE_CXX_FLAGS_RELEASE "${SELECTED_OPTIMIZATION} ${BUILD_CXXFLAGS} -DNDEBUG" CACHE STRING "CXXFLAGS for release" )
set( CMAKE_ASM_FLAGS_RELEASE "${SELECTED_OPTIMIZATION} ${BUILD_CFLAGS} -DNDEBUG" CACHE STRING "ASM FLAGS for release" )
set( CMAKE_C_LINK_FLAGS "${BUILD_CC_ARCH} ${BUILD_CPPFLAGS} ${BUILD_LDFLAGS}" CACHE STRING "LDFLAGS" )
set( CMAKE_CXX_LINK_FLAGS "${BUILD_CC_ARCH} ${BUILD_CXXFLAGS} ${BUILD_LDFLAGS}" CACHE STRING "LDFLAGS" )
# only search in the paths provided so cmake doesnt pick
# up libraries and tools from the native build machine
set( CMAKE_FIND_ROOT_PATH ${STAGING_DIR_HOST} ${STAGING_DIR_NATIVE} ${CROSS_DIR} ${OECMAKE_PERLNATIVE_DIR} ${OECMAKE_EXTRA_ROOT_PATH} ${EXTERNAL_TOOLCHAIN})
set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
# Use native cmake modules
set( CMAKE_MODULE_PATH ${STAGING_DATADIR}/cmake/Modules/ )
# add for non /usr/lib libdir, e.g. /usr/lib64
set( CMAKE_LIBRARY_PATH ${libdir} ${base_libdir})
EOF
}
addtask generate_native_toolchain_file after do_patch before do_configure
do_configure_prepend_class-native() {
# Use host paths for native tools
sed -i -e '/CMAKE_FIND_ROOT_PATH_MODE/d' ${WORKDIR}/toolchain.cmake
}
do_compile_prepend_class-target() {
# Fix paths in llvm-config
sed -i "s|sys::path::parent_path(CurrentPath))\.str()|sys::path::parent_path(sys::path::parent_path(CurrentPath))).str()|g" ${S}/tools/llvm-config/llvm-config.cpp
# Fix the hardcoded libdir in llvm-config
sed -i 's:/lib\>:/${baselib}:g' ${S}/tools/llvm-config/llvm-config.cpp
}
do_compile() {
oe_runmake
}
do_install_append_class-target() {
# Disable checks on the native tools, since these should came from the native recipe
sed -i -e 's/\(.*APPEND.*_IMPORT_CHECK_FILES_FOR_.*{_IMPORT_PREFIX}\/bin\/.*\)/#\1/' ${D}/usr/share/llvm/cmake/LLVMExports-noconfig.cmake
}
SYSROOT_PREPROCESS_FUNCS_append_class-target = " llvm_sysroot_preprocess"
SYSROOT_PREPROCESS_FUNCS_append_class-native = " llvm_native_sysroot_preprocess"
llvm_sysroot_preprocess() {
install -d ${SYSROOT_DESTDIR}${bindir}
cp ${B}/NATIVE/bin/llvm-config ${SYSROOT_DESTDIR}/${bindir} || bbfatal "missing llvm-config"
cp ${B}/NATIVE/bin/llvm-tblgen ${SYSROOT_DESTDIR}/${bindir} || bbfatal "missing llvm-tblgen"
}
llvm_native_sysroot_preprocess() {
sysroot_stage_dir ${D}${STAGING_DIR_NATIVE}/usr/libexec ${SYSROOT_DESTDIR}${bindir}
} }
PACKAGES =+ "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-liblto" PACKAGES =+ "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-liblto"
# Add the extra locations to avoid the complaints about unpackaged files # Add the extra locations to avoid the complaints about unpackaged files
FILES_${PN} += "${libdir}/libLLVM*.so" FILES:${PN}-bugpointpasses = "${libdir}/llvm-rust/lib/BugpointPasses.so"
FILES_${PN}-dev += "${datadir}/llvm" FILES:${PN}-llvmhello = "${libdir}/llvm-rust/lib/LLVMHello.so"
FILES_${PN}-bugpointpasses = "${libdir}/BugpointPasses.so" FILES:${PN}-liblto = "${libdir}/llvm-rust/lib/libLTO.so.*"
FILES_${PN}-llvmhello = "${libdir}/LLVMHello.so" FILES:${PN}-staticdev =+ "${libdir}/llvm-rust/*/*.a"
FILES_${PN}-liblto = "${libdir}/libLTO.so" FILES:${PN} += "${libdir}/libLLVM*.so.* ${libdir}/llvm-rust/lib/*.so.* ${libdir}/llvm-rust/bin"
FILES:${PN}-dev += "${datadir}/llvm ${libdir}/llvm-rust/lib/*.so ${libdir}/llvm-rust/include ${libdir}/llvm-rust/share ${libdir}/llvm-rust/lib/cmake"
BBCLASSEXTEND = "native" BBCLASSEXTEND = "native"

View File

@@ -0,0 +1,31 @@
From 86940d87026432683fb6741cd8a34d3b9b18e40d Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 27 Nov 2020 10:11:08 +0000
Subject: [PATCH] AsmMatcherEmitter: sort ClassInfo lists by name as well
Otherwise, there are instances which are identical in
every other field and therefore sort non-reproducibly
(which breaks binary and source reproducibiliy).
Upstream-Status: Submitted [https://reviews.llvm.org/D97477]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
llvm/utils/TableGen/AsmMatcherEmitter.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
index ccf0959389b..1f801e83b7d 100644
--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
@@ -359,7 +359,10 @@ public:
// name of a class shouldn't be significant. However, some of the backends
// accidentally rely on this behaviour, so it will have to stay like this
// until they are fixed.
- return ValueName < RHS.ValueName;
+ if (ValueName != RHS.ValueName)
+ return ValueName < RHS.ValueName;
+ // All else being equal, we should sort by name, for source and binary reproducibility
+ return Name < RHS.Name;
}
};

View File

@@ -0,0 +1,33 @@
From 7111770e8290082530d920e120995bf81431b0aa Mon Sep 17 00:00:00 2001
From: Martin Kelly <mkelly@xevo.com>
Date: Fri, 19 May 2017 00:22:57 -0700
Subject: [PATCH 12/18] llvm: allow env override of exe path
When using a native llvm-config from inside a sysroot, we need llvm-config to
return the libraries, include directories, etc. from inside the sysroot rather
than from the native sysroot. Thus provide an env override for calling
llvm-config from a target sysroot.
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Martin Kelly <mkelly@xevo.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
llvm/tools/llvm-config/llvm-config.cpp | 7 +++++++
1 file changed, 7 insertions(+)
--- a/llvm/tools/llvm-config/llvm-config.cpp
+++ b/llvm/tools/llvm-config/llvm-config.cpp
@@ -226,6 +226,13 @@ Typical components:\n\
/// Compute the path to the main executable.
std::string GetExecutablePath(const char *Argv0) {
+ // Hack for Yocto: we need to override the root path when we are using
+ // llvm-config from within a target sysroot.
+ const char *Sysroot = std::getenv("YOCTO_ALTERNATE_EXE_PATH");
+ if (Sysroot != nullptr) {
+ return Sysroot;
+ }
+
// This just needs to be some symbol in the binary; C++ doesn't
// allow taking the address of ::main however.
void *P = (void *)(intptr_t)GetExecutablePath;

View File

@@ -0,0 +1,25 @@
Subject: LLVM_INCLUDE_BENCHMARKS with llvm 14.0.1 failing to build
https://github.com/llvm/llvm-project/issues/54941
The LLVM_INCLUDE_BENCHMARKS is turned OFF to fix the build error as
per the discussions in the above link. We will work on the issue and
replace the workaround with actual fix once committed in LLVM.
Please refer the following link for more discussions on the issue:-
https://github.com/rust-lang/rust/issues/96054
Upstream-Status: Pending
Signed-off-by: Pgowda <pgowda.cve@gmail.com>
--- a/llvm/CMakeLists.txt 2022-04-22 00:45:30.543445478 -0700
+++ b/llvm/CMakeLists.txt 2022-04-22 00:45:42.095232974 -0700
@@ -615,7 +615,7 @@ option(LLVM_INCLUDE_GO_TESTS "Include th
option(LLVM_BUILD_BENCHMARKS "Add LLVM benchmark targets to the list of default
targets. If OFF, benchmarks still could be built using Benchmarks target." OFF)
-option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." ON)
+option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." OFF)
option (LLVM_BUILD_DOCS "Build the llvm documentation." OFF)
option (LLVM_INCLUDE_DOCS "Generate build targets for llvm documentation." ON)

View File

@@ -1,16 +0,0 @@
require rust-llvm.inc
require rust-source-${PV}.inc
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=43fdaa303c1c5589ad60f4ffc6a0b9ce"
do_install_prepend () {
# the install does a sed on this without installing the file
# we don't need it for anything
mkdir -p "${D}/usr/share/llvm/cmake"
touch "${D}/usr/share/llvm/cmake/LLVMExports-noconfig.cmake"
}
do_install_append () {
# we don't need any of this stuff to build Rust
rm -rf "${D}/usr/lib/cmake"
}

Some files were not shown because too many files have changed in this diff Show More