#!/usr/bin/env bash
#
# Copyright (c) 2022 Project CHIP Authors
#
# 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 script runs all targets taht are generating code
# in the given output directory
# CHIP_ROOT with a build environment activated.

set -e

OUT_DIR="$1"

if [ ! -d "$OUT_DIR" ]; then
    echo "Input directory '$OUT_DIR' does not exist. "
    echo "USAGE: $0 <build_dir>"
    exit 1
fi

# Code generation for build config files and asn1. Captures things like:
#
# gen_additional_data_payload_buildconfig
# gen_app_buildconfig
# gen_asn1oid
# gen_ble_buildconfig
# ...
#
# Most are buildconfig rules, but asn1oid is special
for name in $(ninja -C "$OUT_DIR" -t targets | grep -E '^gen_' | sed 's/: .*//'); do
    echo "Generating $name ..."
    ninja -C "$OUT_DIR" "$name"
done

# Code generation (based on zap/matter)
for name in $(ninja -C "$OUT_DIR" -t targets | grep -E -v '_no_codegen:' | grep -E '_codegen:' | sed 's/: .*//'); do
    echo "Generating $name ..."
    ninja -C "$OUT_DIR" "$name"
done

# Linus targets: dbus generate hdeaders
for name in $(ninja -C "$OUT_DIR" -t targets | grep -E 'dbus.*codegen:' | sed 's/: .*//'); do
    echo "Generating $name ..."
    ninja -C "$OUT_DIR" "$name"
done
