blob: b08a2311246f5e807928abcf418bac9782cb3d87 [file] [log] [blame]
Roland Levillain72f67742019-03-06 15:48:08 +00001#! /bin/bash
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +01002#
3# Copyright (C) 2015 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
Orion Hodson44ab2cd2019-10-08 10:17:05 +010017set -e
18
Ulya Trafimovichcbf71ec2021-11-09 14:10:05 +000019. "$(dirname $0)/buildbot-utils.sh"
20
Martin Stjernholmfa37ba22020-09-01 18:54:06 +010021shopt -s failglob
22
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +010023if [ ! -d art ]; then
24 echo "Script needs to be run at the root of the android tree"
25 exit 1
26fi
27
Nicolas Geoffrayc631a242020-08-05 15:52:31 +010028TARGET_ARCH=$(source build/envsetup.sh > /dev/null; get_build_var TARGET_ARCH)
Colin Crosse0ef0a82017-07-27 21:29:18 +000029
Fredrik Roubertad9c4a32016-11-11 19:28:18 -080030# Logic for setting out_dir from build/make/core/envsetup.mk:
31if [[ -z $OUT_DIR ]]; then
32 if [[ -z $OUT_DIR_COMMON_BASE ]]; then
33 out_dir=out
34 else
35 out_dir=${OUT_DIR_COMMON_BASE}/${PWD##*/}
36 fi
37else
38 out_dir=${OUT_DIR}
39fi
40
Nicolas Geoffray4b29f382015-10-07 09:28:52 +010041java_libraries_dir=${out_dir}/target/common/obj/JAVA_LIBRARIES
Alex Light761ee212020-02-19 20:47:43 +000042common_targets="vogar core-tests apache-harmony-jdwp-tests-hostdex jsr166-tests libartpalette-system mockito-target"
David Srbeckyfe1c7b42021-04-23 15:43:51 +010043# These build targets have different names on device and host.
Nicolas Geoffraybbc4dc32021-06-03 18:06:05 +010044specific_targets="libjavacoretests libwrapagentproperties libwrapagentpropertiesd"
David Srbeckyfe1c7b42021-04-23 15:43:51 +010045build_host="no"
46build_target="no"
David Srbeckyaf30bf72021-05-04 17:49:17 +010047installclean="no"
Martin Stjernholmaf9aa662021-10-07 15:34:46 +010048skip_run_tests_build="no"
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +010049j_arg="-j$(nproc)"
Roland Levillainb8b93562015-08-20 17:49:56 +010050showcommands=
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +010051make_command=
52
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +010053while true; do
54 if [[ "$1" == "--host" ]]; then
David Srbeckyfe1c7b42021-04-23 15:43:51 +010055 build_host="yes"
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +010056 shift
57 elif [[ "$1" == "--target" ]]; then
David Srbeckyfe1c7b42021-04-23 15:43:51 +010058 build_target="yes"
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +010059 shift
David Srbeckyaf30bf72021-05-04 17:49:17 +010060 elif [[ "$1" == "--installclean" ]]; then
61 installclean="yes"
David Srbecky6de68dd2021-04-27 14:47:27 +010062 shift
Martin Stjernholmaf9aa662021-10-07 15:34:46 +010063 elif [[ "$1" == "--skip-run-tests-build" ]]; then
64 skip_run_tests_build="yes"
65 shift
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +010066 elif [[ "$1" == -j* ]]; then
Nicolas Geoffray667b99e2015-05-29 12:17:06 +010067 j_arg=$1
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +010068 shift
Roland Levillainb8b93562015-08-20 17:49:56 +010069 elif [[ "$1" == "--showcommands" ]]; then
70 showcommands="showcommands"
71 shift
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +010072 elif [[ "$1" == "" ]]; then
73 break
Andreas Gampe0dcee912017-02-01 22:07:45 -080074 else
75 echo "Unknown options $@"
76 exit 1
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +010077 fi
78done
79
David Srbeckyfe1c7b42021-04-23 15:43:51 +010080# If neither was selected, build both by default.
81if [[ $build_host == "no" ]] && [[ $build_target == "no" ]]; then
82 build_host="yes"
83 build_target="yes"
84fi
85
Andreas Gampe353d8182017-10-12 10:17:34 -070086# Allow to build successfully in master-art.
Martin Stjernholmfb2967e2020-06-12 15:12:26 +010087extra_args="SOONG_ALLOW_MISSING_DEPENDENCIES=true"
Andreas Gampe353d8182017-10-12 10:17:34 -070088
Martin Stjernholm69069102020-06-16 13:26:40 +010089# Switch the build system to unbundled mode in the reduced manifest branch.
Martin Stjernholm69069102020-06-16 13:26:40 +010090if [ ! -d frameworks/base ]; then
91 extra_args="$extra_args TARGET_BUILD_UNBUNDLED=true"
92fi
93
Martin Stjernholme2f97112020-05-21 14:59:42 +010094apexes=(
95 "com.android.art.testing"
96 "com.android.conscrypt"
97 "com.android.i18n"
98 "com.android.runtime"
99 "com.android.tzdata"
Eric Holk39d529f2021-02-17 12:48:53 -0800100 "com.android.os.statsd"
Martin Stjernholme2f97112020-05-21 14:59:42 +0100101)
102
David Srbeckyfe1c7b42021-04-23 15:43:51 +0100103make_command="build/soong/soong_ui.bash --make-mode $j_arg $extra_args $showcommands $common_targets"
104if [[ $build_host == "yes" ]]; then
Martin Stjernholmaf9aa662021-10-07 15:34:46 +0100105 make_command+=" build-art-host-gtests"
106 test $skip_run_tests_build == "yes" || make_command+=" build-art-host-run-tests"
Nicolas Geoffraybbc4dc32021-06-03 18:06:05 +0100107 make_command+=" dx-tests junit-host libjdwp-host"
David Srbeckyfe1c7b42021-04-23 15:43:51 +0100108 for LIB in ${specific_targets} ; do
109 make_command+=" $LIB-host"
110 done
111fi
112if [[ $build_target == "yes" ]]; then
Evgeny Astigeevich069391e2018-09-05 22:40:57 +0100113 if [[ -z "${ANDROID_PRODUCT_OUT}" ]]; then
114 echo 'ANDROID_PRODUCT_OUT environment variable is empty; did you forget to run `lunch`?'
Roland Levillainfe3e2bf2018-03-02 16:01:50 +0000115 exit 1
116 fi
Martin Stjernholmaf9aa662021-10-07 15:34:46 +0100117 make_command+=" build-art-target-gtests"
118 test $skip_run_tests_build == "yes" || make_command+=" build-art-target-run-tests"
119 make_command+=" debuggerd sh su toybox"
120 # Indirect dependencies in the platform, e.g. through heapprofd_client_api.
121 # These are built to go into system/lib(64) to be part of the system linker
122 # namespace.
123 make_command+=" libbacktrace libnetd_client-target libprocinfo libtombstoned_client libunwindstack"
Martin Stjernholm884c1472021-10-21 17:36:25 +0100124 # Extract jars from other APEX SDKs for use by vogar. Note these go into
125 # out/target/common/obj/JAVA_LIBRARIES which isn't removed by "m installclean".
126 make_command+=" conscrypt core-icu4j"
Evgeny Astigeevich069391e2018-09-05 22:40:57 +0100127 make_command+=" ${ANDROID_PRODUCT_OUT#"${ANDROID_BUILD_TOP}/"}/system/etc/public.libraries.txt"
Martin Stjernholme2f97112020-05-21 14:59:42 +0100128 # Targets required to generate a linker configuration for device within the
129 # chroot environment. The *.libraries.txt targets are required by
Martin Stjernholmc3c7dff2020-08-05 22:40:01 +0100130 # the source linkerconfig but not included in the prebuilt one.
Victor Changd6363c12020-11-26 16:49:46 +0000131 make_command+=" linkerconfig conv_linker_config sanitizer.libraries.txt vndkcorevariant.libraries.txt"
Victor Hsieh73c4f792021-10-01 18:13:52 +0000132 # Additional dependency in /system
133 make_command+=" libbinder_ndk"
Martin Stjernholme2f97112020-05-21 14:59:42 +0100134 # Additional targets needed for the chroot environment.
Martin Stjernholm4bb9f672020-05-19 01:33:47 +0100135 make_command+=" event-log-tags"
136 # Needed to extract prebuilt APEXes.
137 make_command+=" deapexer"
Martin Stjernholme2f97112020-05-21 14:59:42 +0100138 # Build/install the required APEXes.
139 make_command+=" ${apexes[*]}"
David Srbeckyfe1c7b42021-04-23 15:43:51 +0100140 make_command+=" ${specific_targets}"
Nicolas Geoffrayfbeca752015-05-29 10:54:12 +0100141fi
142
David Srbecky6de68dd2021-04-27 14:47:27 +0100143if [[ $installclean == "yes" ]]; then
144 echo "Perform installclean"
145 ANDROID_QUIET_BUILD=true build/soong/soong_ui.bash --make-mode $extra_args installclean
Martin Stjernholm0a746a72021-10-21 19:23:31 +0100146 # The common java library directory is not cleaned up by installclean. Do that
147 # explicitly to not overcache them in incremental builds.
148 rm -rf $java_libraries_dir
David Srbeckyaf30bf72021-05-04 17:49:17 +0100149else
150 echo "WARNING: Missing --installclean argument to buildbot-build.sh"
151 echo "WARNING: This is usually ok, but may cause rare odd failures."
152 echo ""
David Srbecky6de68dd2021-04-27 14:47:27 +0100153fi
Andreas Gampe6c3e1a02017-11-09 10:29:32 -0800154
Nicolas Geoffrayaadc9862015-09-29 14:56:31 +0100155echo "Executing $make_command"
Nicolas Geoffraya8e8cdf2018-10-16 09:44:58 +0100156# Disable path restrictions to enable luci builds using vpython.
Roland Levillainc3f2fe92020-02-12 19:40:20 +0000157eval "$make_command"
Roland Levillain79975902019-09-16 18:00:29 +0100158
David Srbeckyfe1c7b42021-04-23 15:43:51 +0100159if [[ $build_target == "yes" ]]; then
Martin Stjernholme2f97112020-05-21 14:59:42 +0100160 if [[ -z "${ANDROID_HOST_OUT}" ]]; then
161 echo "ANDROID_HOST_OUT environment variable is empty; using $out_dir/host/linux-x86"
162 ANDROID_HOST_OUT=$out_dir/host/linux-x86
163 fi
164
165 # Extract prebuilt APEXes.
166 debugfs=$ANDROID_HOST_OUT/bin/debugfs_static
167 for apex in ${apexes[@]}; do
168 dir="$ANDROID_PRODUCT_OUT/system/apex/${apex}"
Martin Stjernholmf513a762021-09-13 16:04:52 +0100169 apexbase="$ANDROID_PRODUCT_OUT/system/apex/${apex}"
170 unset file
171 if [ -f "${apexbase}.apex" ]; then
172 file="${apexbase}.apex"
173 elif [ -f "${apexbase}.capex" ]; then
174 file="${apexbase}.capex"
175 fi
176 if [ -n "${file}" ]; then
177 echo "Extracting APEX file: ${file}"
Martin Stjernholme2f97112020-05-21 14:59:42 +0100178 rm -rf $dir
179 mkdir -p $dir
180 $ANDROID_HOST_OUT/bin/deapexer --debugfs_path $debugfs extract $file $dir
181 fi
182 done
183
Nicolas Geoffrayc631a242020-08-05 15:52:31 +0100184 # Replace stub libraries with implemenation libraries: because we do chroot
185 # testing, we need to install an implementation of the libraries (and cannot
186 # rely on the one already installed on the device, if the device is post R and
187 # has it).
Martin Stjernholmf2893ad2021-03-09 17:43:59 +0000188 implementation_libs=(
189 "heapprofd_client_api.so"
190 "libartpalette-system.so"
191 "liblog.so"
192 )
Nicolas Geoffrayc631a242020-08-05 15:52:31 +0100193 if [ -d prebuilts/runtime/mainline/platform/impl ]; then
194 if [[ $TARGET_ARCH = arm* ]]; then
195 arch32=arm
196 arch64=arm64
197 else
198 arch32=x86
199 arch64=x86_64
200 fi
Martin Stjernholmf2893ad2021-03-09 17:43:59 +0000201 for so in ${implementation_libs[@]}; do
Nicolas Geoffrayc631a242020-08-05 15:52:31 +0100202 if [ -d "$ANDROID_PRODUCT_OUT/system/lib" ]; then
203 cmd="cp -p prebuilts/runtime/mainline/platform/impl/$arch32/$so $ANDROID_PRODUCT_OUT/system/lib/$so"
204 echo "Executing $cmd"
205 eval "$cmd"
206 fi
207 if [ -d "$ANDROID_PRODUCT_OUT/system/lib64" ]; then
208 cmd="cp -p prebuilts/runtime/mainline/platform/impl/$arch64/$so $ANDROID_PRODUCT_OUT/system/lib64/$so"
209 echo "Executing $cmd"
210 eval "$cmd"
211 fi
212 done
213 fi
214
Orion Hodson3a809c82020-01-03 14:53:14 +0000215 # Create canonical name -> file name symlink in the symbol directory for the
216 # Testing ART APEX.
217 #
218 # This mimics the logic from `art/Android.mk`. We made the choice not to
219 # implement this in `art/Android.mk`, as the Testing ART APEX is a test artifact
220 # that should never ship with an actual product, and we try to keep it out of
221 # standard build recipes
222 #
223 # TODO(b/141004137, b/129534335): Remove this, expose the Testing ART APEX in
224 # the `art/Android.mk` build logic, and add absence checks (e.g. in
225 # `build/make/core/main.mk`) to prevent the Testing ART APEX from ending up in a
226 # system image.
Roland Levillain79975902019-09-16 18:00:29 +0100227 target_out_unstripped="$ANDROID_PRODUCT_OUT/symbols"
228 link_name="$target_out_unstripped/apex/com.android.art"
229 link_command="mkdir -p $(dirname "$link_name") && ln -sf com.android.art.testing \"$link_name\""
230 echo "Executing $link_command"
Roland Levillainc3f2fe92020-02-12 19:40:20 +0000231 eval "$link_command"
Orion Hodson3a809c82020-01-03 14:53:14 +0000232
233 # Temporary fix for libjavacrypto.so dependencies in libcore and jvmti tests (b/147124225).
Martin Stjernholme2f97112020-05-21 14:59:42 +0100234 conscrypt_dir="$ANDROID_PRODUCT_OUT/system/apex/com.android.conscrypt"
Orion Hodson3a809c82020-01-03 14:53:14 +0000235 conscrypt_libs="libjavacrypto.so libcrypto.so libssl.so"
Nicolas Geoffraycb62cd82020-04-03 12:17:50 +0100236 if [ ! -d "${conscrypt_dir}" ]; then
237 echo -e "Missing conscrypt APEX in build output: ${conscrypt_dir}"
Orion Hodson3a809c82020-01-03 14:53:14 +0000238 exit 1
239 fi
Nicolas Geoffray81673f02020-04-22 16:43:54 +0100240 if [ ! -f "${conscrypt_dir}/javalib/conscrypt.jar" ]; then
241 echo -e "Missing conscrypt jar in build output: ${conscrypt_dir}"
242 exit 1
243 fi
Orion Hodson3a809c82020-01-03 14:53:14 +0000244 for l in lib lib64; do
Nicolas Geoffraycb62cd82020-04-03 12:17:50 +0100245 if [ ! -d "$ANDROID_PRODUCT_OUT/system/$l" ]; then
Orion Hodson3a809c82020-01-03 14:53:14 +0000246 continue
247 fi
248 for so in $conscrypt_libs; do
Nicolas Geoffraycb62cd82020-04-03 12:17:50 +0100249 src="${conscrypt_dir}/${l}/${so}"
Orion Hodson3a809c82020-01-03 14:53:14 +0000250 dst="$ANDROID_PRODUCT_OUT/system/${l}/${so}"
251 if [ "${src}" -nt "${dst}" ]; then
252 cmd="cp -p \"${src}\" \"${dst}\""
253 echo "Executing $cmd"
Roland Levillainc3f2fe92020-02-12 19:40:20 +0000254 eval "$cmd"
Orion Hodson3a809c82020-01-03 14:53:14 +0000255 fi
256 done
257 done
Martin Stjernholme2f97112020-05-21 14:59:42 +0100258
Martin Stjernholmac048ae2020-06-22 14:38:11 +0100259 # TODO(b/159355595): Ensure there is a tzdata in system to avoid warnings on
260 # stderr from Bionic.
261 if [ ! -f $ANDROID_PRODUCT_OUT/system/usr/share/zoneinfo/tzdata ]; then
262 mkdir -p $ANDROID_PRODUCT_OUT/system/usr/share/zoneinfo
263 cp $ANDROID_PRODUCT_OUT/system/apex/com.android.tzdata/etc/tz/tzdata \
264 $ANDROID_PRODUCT_OUT/system/usr/share/zoneinfo/tzdata
265 fi
266
Martin Stjernholm4bb9f672020-05-19 01:33:47 +0100267 # Create system symlinks for the Runtime APEX. Normally handled by
268 # installSymlinkToRuntimeApex in soong/cc/binary.go, but we have to replicate
269 # it here since we don't run the install rules for the Runtime APEX.
270 for b in linker{,_asan}{,64}; do
271 echo "Symlinking /apex/com.android.runtime/bin/$b to /system/bin"
272 ln -sf /apex/com.android.runtime/bin/$b $ANDROID_PRODUCT_OUT/system/bin/$b
273 done
Martin Stjernholmfa37ba22020-09-01 18:54:06 +0100274 for d in $ANDROID_PRODUCT_OUT/system/apex/com.android.runtime/lib{,64}/bionic; do
275 if [ -d $d ]; then
276 for p in $d/*; do
277 lib_dir=$(expr $p : '.*/\(lib[0-9]*\)/.*')
278 lib_file=$(basename $p)
279 src=/apex/com.android.runtime/${lib_dir}/bionic/${lib_file}
280 dst=$ANDROID_PRODUCT_OUT/system/${lib_dir}/${lib_file}
281 echo "Symlinking $src into /system/${lib_dir}"
282 mkdir -p $(dirname $dst)
283 ln -sf $src $dst
284 done
285 fi
Martin Stjernholm4bb9f672020-05-19 01:33:47 +0100286 done
287
Martin Stjernholme2f97112020-05-21 14:59:42 +0100288 # Create linker config files. We run linkerconfig on host to avoid problems
289 # building it statically for device in an unbundled tree.
290
Jooyung Hanf97a8592020-06-17 15:19:17 +0900291 # temporary root for linkerconfig
292 linkerconfig_root=$ANDROID_PRODUCT_OUT/art_linkerconfig_root
293
294 rm -rf $linkerconfig_root
295
296 # Linkerconfig reads files from /system/etc
297 mkdir -p $linkerconfig_root/system
298 cp -r $ANDROID_PRODUCT_OUT/system/etc $linkerconfig_root/system
299
Martin Stjernholme2f97112020-05-21 14:59:42 +0100300 # For linkerconfig to pick up the APEXes correctly we need to make them
Jooyung Hanf97a8592020-06-17 15:19:17 +0900301 # available in $linkerconfig_root/apex.
302 mkdir -p $linkerconfig_root/apex
Martin Stjernholme2f97112020-05-21 14:59:42 +0100303 for apex in ${apexes[@]}; do
304 src="$ANDROID_PRODUCT_OUT/system/apex/${apex}"
305 if [[ $apex == com.android.art.* ]]; then
Jooyung Hanf97a8592020-06-17 15:19:17 +0900306 dst="$linkerconfig_root/apex/com.android.art"
Martin Stjernholme2f97112020-05-21 14:59:42 +0100307 else
Jooyung Hanf97a8592020-06-17 15:19:17 +0900308 dst="$linkerconfig_root/apex/${apex}"
Martin Stjernholme2f97112020-05-21 14:59:42 +0100309 fi
310 echo "Copying APEX directory from $src to $dst"
311 rm -rf $dst
312 cp -r $src $dst
313 done
314
Martin Stjernholm7914e892020-09-02 20:47:05 +0100315 # Linkerconfig also looks at /apex/apex-info-list.xml to check for system APEXes.
316 apex_xml_file=$linkerconfig_root/apex/apex-info-list.xml
317 echo "Creating $apex_xml_file"
318 cat <<EOF > $apex_xml_file
319<?xml version="1.0" encoding="utf-8"?>
320<apex-info-list>
321EOF
322 for apex in ${apexes[@]}; do
323 [[ $apex == com.android.art.* ]] && apex=com.android.art
324 cat <<EOF >> $apex_xml_file
325 <apex-info moduleName="${apex}" modulePath="/system/apex/${apex}.apex" preinstalledModulePath="/system/apex/${apex}.apex" versionCode="1" versionName="" isFactory="true" isActive="true">
326 </apex-info>
327EOF
328 done
329 cat <<EOF >> $apex_xml_file
330</apex-info-list>
331EOF
332
Victor Changd6363c12020-11-26 16:49:46 +0000333 system_linker_config_pb=$linkerconfig_root/system/etc/linker.config.pb
Martin Stjernholm98e9a122021-04-25 17:55:31 +0100334 # This list needs to be synced with provideLibs in system/etc/linker.config.pb
335 # in the targeted platform image.
336 # TODO(b/186649223): Create a prebuilt for it in platform-mainline-sdk.
337 system_provide_libs=(
338 heapprofd_client_api.so
339 libEGL.so
340 libGLESv1_CM.so
341 libGLESv2.so
342 libGLESv3.so
343 libOpenMAXAL.so
344 libOpenSLES.so
345 libRS.so
346 libaaudio.so
347 libadbd_auth.so
348 libadbd_fs.so
349 libamidi.so
350 libandroid.so
351 libandroid_net.so
352 libartpalette-system.so
353 libbinder_ndk.so
354 libc.so
355 libcamera2ndk.so
356 libcgrouprc.so
357 libclang_rt.asan-i686-android.so
358 libclang_rt.asan-x86_64-android.so
359 libdl.so
360 libdl_android.so
361 libft2.so
362 libincident.so
363 libjnigraphics.so
364 liblog.so
365 libm.so
366 libmediametrics.so
367 libmediandk.so
368 libnativewindow.so
369 libneuralnetworks_packageinfo.so
370 libselinux.so
371 libstdc++.so
372 libsync.so
373 libvndksupport.so
374 libvulkan.so
375 libz.so
376 )
377
Victor Changd6363c12020-11-26 16:49:46 +0000378 echo "Encoding linker.config.json to $system_linker_config_pb"
Nicolas Geoffray29ce8432020-11-27 09:50:17 +0000379 $ANDROID_HOST_OUT/bin/conv_linker_config proto -s $ANDROID_BUILD_TOP/system/core/rootdir/etc/linker.config.json -o $system_linker_config_pb
Martin Stjernholm98e9a122021-04-25 17:55:31 +0100380 $ANDROID_HOST_OUT/bin/conv_linker_config append -s $system_linker_config_pb -o $system_linker_config_pb --key "provideLibs" --value "${system_provide_libs[*]}"
Victor Changd6363c12020-11-26 16:49:46 +0000381
Jooyung Hanf97a8592020-06-17 15:19:17 +0900382 # To avoid warnings from linkerconfig when it checks following two partitions
383 mkdir -p $linkerconfig_root/product
384 mkdir -p $linkerconfig_root/system_ext
385
Martin Stjernholme2f97112020-05-21 14:59:42 +0100386 platform_version=$(build/soong/soong_ui.bash --dumpvar-mode PLATFORM_VERSION)
Jooyung Hanf97a8592020-06-17 15:19:17 +0900387 linkerconfig_out=$ANDROID_PRODUCT_OUT/linkerconfig
388 echo "Generating linkerconfig in $linkerconfig_out"
389 rm -rf $linkerconfig_out
390 mkdir -p $linkerconfig_out
391 $ANDROID_HOST_OUT/bin/linkerconfig --target $linkerconfig_out --root $linkerconfig_root --vndk $platform_version
Ulya Trafimovichcbf71ec2021-11-09 14:10:05 +0000392 echo -e "${boldcyan}note:${nc} Don't be scared by \"Unable to access VNDK APEX\" message," \
393 " it's not fatal"
Roland Levillain79975902019-09-16 18:00:29 +0100394fi