blob: 71cb44b7c8d56c019ba838942899cec88756671c [file] [log] [blame]
# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2
EAPI=5
# We can drop this if cros-uniboard stops using cros-board.
CROS_BOARDS=( none )
inherit cros-unibuild toolchain-funcs
DESCRIPTION="Chromium OS-specific configuration"
HOMEPAGE="http://www.chromium.org/"
SRC_URI=""
LICENSE="BSD-Google"
SLOT="0"
KEYWORDS="*"
DEPEND="
virtual/chromeos-config-bsp:=
"
RDEPEND="${DEPEND}"
# This ebuild creates the Chrome OS master configuration file stored in
# ${UNIBOARD_DTB}. See go/cros-unified-builds-design for more information.
# There is no workon source directory, so use the work directory.
S=${WORKDIR}
# Use the device-tree compiler to create and install a config.dtb file
# containing all the .dtsi files from ${UNIBOARD_DTS_DIR}.
# For YAML files, convert them into JSON for platform runtime access.
src_compile() {
local dts="${WORKDIR}/config.dts"
local dtb="${WORKDIR}/config.dtb"
local added=0
local dtsi
local files=( "${SYSROOT}${UNIBOARD_DTS_DIR}/"*.dtsi )
local schema_info="${WORKDIR}/_dir_targets.dtsi"
# Create a .dts file with all the includes.
cp "${FILESDIR}/skeleton.dts" "${dts}"
cros_config_host write-target-dirs >"${schema_info}" \
|| die "Failed to write directory targets"
cros_config_host write-phandle-properties >>"${schema_info}" \
|| die "Failed to write phandle properties"
# For YAML cases, we still need to generate a shell DTB file for
# now since mosys still attempts to link it in.
if [[ "${files[0]}" =~ .*[a-z_]+\.dtsi$ ]]; then
for dtsi in "${SYSROOT}${UNIBOARD_DTS_DIR}"/*.dtsi "${schema_info}"; do
einfo "Adding ${dtsi}"
[[ "${dtsi}" != "${schema_info}" ]] && cp "${dtsi}" "${WORKDIR}"
# Drop the directory path from ${dtsi} in the #include.
echo "#include \"${dtsi##*/}\"" >> "${dts}"
: $((added++))
done
einfo "${added} files found"
fi
# Use the preprocessor to handle the #include directives.
$(tc-getCPP) -P -x assembler-with-cpp "${dts}" -o "${dts}.tmp" \
|| die "Preprocessor failed"
# Compile it to produce the requird output file.
dtc -I dts -O dtb -Wno-unit_address_vs_reg -o "${dtb}" "${dts}.tmp" \
|| die "Device-tree compilation failed"
# Validate the config.
einfo "Validating config:"
validate_config "${dtb}" || die "Validation failed"
einfo "- OK"
# YAML config support.
local yaml_files=( "${SYSROOT}${UNIBOARD_YAML_DIR}/"*.yaml )
local input_yaml_files=()
local yaml="${WORKDIR}/config.yaml"
local c_file="${WORKDIR}/config.c"
local json="${WORKDIR}/config.json"
local gen_yaml="${SYSROOT}${UNIBOARD_YAML_DIR}/config.yaml"
if [[ "${yaml_files[0]}" =~ .*[a-z_]+\.yaml$ ]]; then
echo "# Generated YAML config file" > "${yaml}"
for source_yaml in "${yaml_files[@]}"; do
if [[ "${source_yaml}" != "${gen_yaml}" ]]; then
einfo "Adding source YAML file ${source_yaml}"
# Order matters here. This will control how YAML files
# are merged. To control the order, change the name
# of the input files to be in the order desired.
input_yaml_files+=("${source_yaml}")
fi
done
cros_config_schema -o "${yaml}" -m "${input_yaml_files[@]}" \
|| die "cros_config_schema failed for build config."
cros_config_schema -c "${yaml}" -o "${json}" -g "${c_file}" -f "True" \
|| die "cros_config_schema failed for platform config."
else
einfo "Emitting empty c interface config for mosys."
cp "${FILESDIR}/empty_config.c" "${c_file}"
fi
}
src_install() {
# Get the directory name only, and use that as the install directory.
if [[ -e "${WORKDIR}/config.dtb" ]]; then
insinto "${UNIBOARD_DTB_INSTALL_PATH%/*}"
doins config.dtb
fi
if [[ -e "${WORKDIR}/config.json" ]]; then
insinto "${UNIBOARD_JSON_INSTALL_PATH%/*}"
doins config.json
fi
insinto "${UNIBOARD_YAML_DIR}"
doins config.c
if [[ -e "${WORKDIR}/config.yaml" ]]; then
doins config.yaml
fi
}