You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

207 lines
7.3 KiB

#!/bin/bash -e
# List of files required in output. Every other file generated will be skipped.
OUTFILES=(
com.android.apex.test.bar_stripped.v1.libvX.apex
com.android.apex.test.bar_stripped.v2.libvY.apex
com.android.apex.test.bar.v1.libvX.apex
com.android.apex.test.bar.v2.libvY.apex
com.android.apex.test.baz_stripped.v1.libvX.apex
com.android.apex.test.foo_stripped.v1.libvX.apex
com.android.apex.test.foo_stripped.v2.libvY.apex
com.android.apex.test.foo.v1.libvX.apex
com.android.apex.test.foo.v2.libvY.apex
com.android.apex.test.pony_stripped.v1.libvZ.apex
com.android.apex.test.pony.v1.libvZ.apex
com.android.apex.test.sharedlibs_generated.v1.libvX.apex
com.android.apex.test.sharedlibs_generated.v2.libvY.apex
com.android.apex.test.sharedlibs_secondary_generated.v1.libvZ.apex
)
# "apex" type build targets to build.
APEX_TARGETS=(
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.bar:com.android.apex.test.bar
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.foo:com.android.apex.test.foo
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.pony:com.android.apex.test.pony
)
# "genrule" type build targets to build, and directory they are built from.
GENRULE_TARGETS=(
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.bar:com.android.apex.test.bar_stripped
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.baz:com.android.apex.test.baz_stripped
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.foo:com.android.apex.test.foo_stripped
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.pony:com.android.apex.test.pony_stripped
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.sharedlibs:com.android.apex.test.sharedlibs_generated
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.sharedlibs_secondary:com.android.apex.test.sharedlibs_secondary_generated
)
if [ ! -e "build/make/core/Makefile" ]; then
echo "$0 must be run from the top of the tree"
exit 1
fi
OUT_DIR=$(source build/envsetup.sh > /dev/null; TARGET_PRODUCT= get_build_var OUT_DIR)
DIST_DIR=$(source build/envsetup.sh > /dev/null; TARGET_PRODUCT= get_build_var DIST_DIR)
TMPDIR=$(source build/envsetup.sh > /dev/null; TARGET_PRODUCT= get_build_var TMPDIR)
manifestdirs=()
for t in "${APEX_TARGETS[@]}" "${GENRULE_TARGETS[@]}"; do
IFS=: read -a ar <<< "${t}"
manifestdirs+=( ${ar[0]})
done
manifestdirs=($(printf "%s\n" "${manifestdirs[@]}" | sort -u))
generated_artifacts=()
archs=(
arm
arm64
x86
x86_64
)
apexversions=(
1
2
)
libversions=(
X
Y
Z
)
for arch in "${archs[@]}"; do
for apexversion in "${apexversions[@]}"; do
apexfingerprint="VERSION_${apexversion}"
sed -i "s/#define FINGERPRINT .*/#define FINGERPRINT \"${apexfingerprint}\"/g" \
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.bar/bar_test.cc \
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.baz/baz_test.cc \
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.foo/foo_test.cc \
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.pony/pony_test.cc
for d in "${manifestdirs[@]}"; do
sed -i "s/ \"version\": .*/ \"version\": ${apexversion}/g" \
${d}/manifest.json
done
for libversion in "${libversions[@]}"; do
# Check if we need to build this combination of versions.
found=n
for t in "${APEX_TARGETS[@]}" "${GENRULE_TARGETS[@]}"; do
IFS=: read -a ar <<< "${t}"
outfile=${ar[1]}.v${apexversion}.libv${libversion}.apex
if printf '%s\n' "${OUTFILES[@]}" | grep -q -F "${outfile}"; then
found=y
break
fi
done
if [ "${found}" != "y" ]; then
# Skipping this combination.
continue
fi
echo "Building combination arch: ${arch}, apexversion: ${apexversion}, libversion: ${libversion}"
libfingerprint="VERSION_${libversion}"
sed -i "s/#define FINGERPRINT .*/#define FINGERPRINT \"${libfingerprint}\"/g" \
system/apex/tests/testdata/sharedlibs/build/sharedlibstest.cpp
build/soong/soong_ui.bash \
--make-mode \
TARGET_PRODUCT=aosp_${arch} \
dist sharedlibs_test
for t in "${APEX_TARGETS[@]}" "${GENRULE_TARGETS[@]}"; do
IFS=: read -a ar <<< "${t}"
outfile=${ar[1]}.v${apexversion}.libv${libversion}.apex
if printf '%s\n' "${OUTFILES[@]}" | grep -q -P "^${outfile}\$"; then
cp -v \
"${DIST_DIR}"/"${ar[1]}".apex \
system/apex/tests/testdata/sharedlibs/prebuilts/${arch}/${outfile}
generated_artifacts+=(system/apex/tests/testdata/sharedlibs/prebuilts/${arch}/${outfile})
fi
done
done
done
done
# Generate the Android.bp file for the prebuilts.
tmpfile=$(mktemp)
cat > "${tmpfile}" << EOF
// Copyright (C) 2020 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// This file is auto-generated by
// ./system/apex/tests/testdata/sharedlibs/build/build_artifacts.sh
// Do NOT edit manually.
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
EOF
artifacts_filenames=()
for artifact in "${generated_artifacts[@]}"; do
artifacts_filenames+=($(basename ${artifact}))
done
artifacts_filenames=($(printf '%s\n' "${artifacts_filenames[@]}" | sort -u))
for artifact in "${artifacts_filenames[@]}"; do
outfile=$(basename "${artifact}")
# remove .apex suffix
rulename=${outfile%.apex}
cat >> "${tmpfile}" << EOF
prebuilt_apex {
name: "${rulename}_prebuilt",
arch: {
EOF
for arch in "${archs[@]}"; do
cat >> "${tmpfile}" << EOF
${arch}: {
src: "${arch}/${outfile}",
},
EOF
done
cat >> "${tmpfile}" << EOF
},
filename: "${outfile}",
installable: false,
}
EOF
done
mv "${tmpfile}" system/apex/tests/testdata/sharedlibs/prebuilts/Android.bp
# Restore the default version string to avoid bogus diffs.
sed -i "s/#define FINGERPRINT .*/#define FINGERPRINT \"VERSION_XXX\"/g" \
system/apex/tests/testdata/sharedlibs/build/sharedlibstest.cpp \
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.bar/bar_test.cc \
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.baz/baz_test.cc \
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.foo/foo_test.cc \
system/apex/tests/testdata/sharedlibs/build/com.android.apex.test.pony/pony_test.cc
for d in "${manifestdirs[@]}"; do
sed -i "s/ \"version\": .*/ \"version\": 1/g" \
${d}/manifest.json
done
ls -l "${generated_artifacts[@]}"