hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
##
## 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
 
   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