summaryrefslogtreecommitdiffstats
path: root/meta/classes/cargo_common.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/cargo_common.bbclass')
-rw-r--r--meta/classes/cargo_common.bbclass129
1 files changed, 129 insertions, 0 deletions
diff --git a/meta/classes/cargo_common.bbclass b/meta/classes/cargo_common.bbclass
new file mode 100644
index 0000000000..b0b039a22e
--- /dev/null
+++ b/meta/classes/cargo_common.bbclass
@@ -0,0 +1,129 @@
1##
2## Purpose:
3## This class is to support building with cargo. It
4## must be different than cargo.bbclass because Rust
5## now builds with Cargo but cannot use cargo.bbclass
6## due to dependencies and assumptions in cargo.bbclass
7## that Rust & Cargo are already installed. So this
8## is used by cargo.bbclass and Rust
9##
10
11# add crate fetch support
12inherit crate-fetch
13inherit rust-common
14
15# Where we download our registry and dependencies to
16export CARGO_HOME = "${WORKDIR}/cargo_home"
17
18# The pkg-config-rs library used by cargo build scripts disables itself when
19# cross compiling unless this is defined. We set up pkg-config appropriately
20# for cross compilation, so tell it we know better than it.
21export PKG_CONFIG_ALLOW_CROSS = "1"
22
23# Don't instruct cargo to use crates downloaded by bitbake. Some rust packages,
24# for example the rust compiler itself, come with their own vendored sources.
25# Specifying two [source.crates-io] will not work.
26CARGO_DISABLE_BITBAKE_VENDORING ?= "0"
27
28# Used by libstd-rs to point to the vendor dir included in rustc src
29CARGO_VENDORING_DIRECTORY ?= "${CARGO_HOME}/bitbake"
30
31CARGO_RUST_TARGET_CCLD ?= "${RUST_TARGET_CCLD}"
32cargo_common_do_configure () {
33 mkdir -p ${CARGO_HOME}/bitbake
34
35 cat <<- EOF > ${CARGO_HOME}/config
36 # EXTRA_OECARGO_PATHS
37 paths = [
38 $(for p in ${EXTRA_OECARGO_PATHS}; do echo \"$p\",; done)
39 ]
40 EOF
41
42 cat <<- EOF >> ${CARGO_HOME}/config
43
44 # Local mirror vendored by bitbake
45 [source.bitbake]
46 directory = "${CARGO_VENDORING_DIRECTORY}"
47 EOF
48
49 if [ -z "${EXTERNALSRC}" ] && [ ${CARGO_DISABLE_BITBAKE_VENDORING} = "0" ]; then
50 cat <<- EOF >> ${CARGO_HOME}/config
51
52 [source.crates-io]
53 replace-with = "bitbake"
54 local-registry = "/nonexistant"
55 EOF
56 fi
57
58 cat <<- EOF >> ${CARGO_HOME}/config
59
60 [http]
61 # Multiplexing can't be enabled because http2 can't be enabled
62 # in curl-native without dependency loops
63 multiplexing = false
64
65 # Ignore the hard coded and incorrect path to certificates
66 cainfo = "${STAGING_ETCDIR_NATIVE}/ssl/certs/ca-certificates.crt"
67
68 EOF
69
70 if [ -n "${http_proxy}" ]; then
71 echo "proxy = \"${http_proxy}\"" >> ${CARGO_HOME}/config
72 fi
73
74 cat <<- EOF >> ${CARGO_HOME}/config
75
76 # HOST_SYS
77 [target.${HOST_SYS}]
78 linker = "${CARGO_RUST_TARGET_CCLD}"
79 EOF
80
81 if [ "${HOST_SYS}" != "${BUILD_SYS}" ]; then
82 cat <<- EOF >> ${CARGO_HOME}/config
83
84 # BUILD_SYS
85 [target.${BUILD_SYS}]
86 linker = "${RUST_BUILD_CCLD}"
87 EOF
88 fi
89
90 # Put build output in build directory preferred by bitbake instead of
91 # inside source directory unless they are the same
92 if [ "${B}" != "${S}" ]; then
93 cat <<- EOF >> ${CARGO_HOME}/config
94
95 [build]
96 # Use out of tree build destination to avoid poluting the source tree
97 target-dir = "${B}/target"
98 EOF
99 fi
100
101 cat <<- EOF >> ${CARGO_HOME}/config
102
103 [term]
104 progress.when = 'always'
105 progress.width = 80
106 EOF
107}
108
109oe_cargo_fix_env () {
110 export CC="${RUST_TARGET_CC}"
111 export CXX="${RUST_TARGET_CXX}"
112 export CFLAGS="${CFLAGS}"
113 export CXXFLAGS="${CXXFLAGS}"
114 export AR="${AR}"
115 export TARGET_CC="${RUST_TARGET_CC}"
116 export TARGET_CXX="${RUST_TARGET_CXX}"
117 export TARGET_CFLAGS="${CFLAGS}"
118 export TARGET_CXXFLAGS="${CXXFLAGS}"
119 export TARGET_AR="${AR}"
120 export HOST_CC="${RUST_BUILD_CC}"
121 export HOST_CXX="${RUST_BUILD_CXX}"
122 export HOST_CFLAGS="${BUILD_CFLAGS}"
123 export HOST_CXXFLAGS="${BUILD_CXXFLAGS}"
124 export HOST_AR="${BUILD_AR}"
125}
126
127EXTRA_OECARGO_PATHS ??= ""
128
129EXPORT_FUNCTIONS do_configure