#!/bin/bash
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

### generate a compilation database for the current build configuration

## usage: fx compdb <-z>
##        -z|--zircon to additonally generate compile_commands.json for Zircon
##        -z option also concatenates the two compile_commands.json

generate_zircon () {
    zirc_compdb=$(which compiledb || echo)
    if [[ -z ${zirc_compdb} ]]; then
        echo "Could not find compiledb, cannot generate Zircon compile_commands.json"
        exit
    fi

    ( cd ${FUCHSIA_DIR}/zircon; compiledb -o compile_commands.json -n make ${FUCHSIA_ARCH}) \
    || echo "An unknown error has occurred"     #TODO what errors could this be?
}

main () {
    zirc=0 #boolean for if compiledb has been run

    case $1 in
        -z|--zircon)
            zirc=1
        ;;
        -h|--help)
            echo "Script to generate compile_commands.json files"
            echo "-z|--zircon to additonally generate compile_commands.json for Zircon"
            echo "-z option also concatenates the two compile_commands.json"
            echo
            exit
        ;;
    esac

    source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"/lib/vars.sh
    fx-config-read

    # TODO(BLD-165): This is a temporary workaround, as it uses the specific rule names
    # generated by GN for each arch's shared directory. A better solution is to
    # teach GN itself to output the compdb.
    "${FUCHSIA_DIR}/buildtools/ninja" -C "${FUCHSIA_BUILD_DIR}" -t compdb cc cxx ${FUCHSIA_ARCH}-shared_cc ${FUCHSIA_ARCH}-shared_cxx > "${FUCHSIA_BUILD_DIR}/compile_commands.json"
    ln -sf "${FUCHSIA_BUILD_DIR}/compile_commands.json" "${FUCHSIA_DIR}/compile_commands.json"

    echo "Note: The compile_commands may be incomplete if you are building with variants other than arch."


    if [[ $zirc -eq 1 ]]; then
        generate_zircon
        #concatenate the two files together by making a tmp file and then removing it when done
        
        ${FUCHSIA_DIR}/scripts/editors/cat_compile_commands.py ${FUCHSIA_DIR}/zircon/compile_commands.json \
        ${FUCHSIA_DIR}/out/${FUCHSIA_ARCH}/compile_commands.json > ${FUCHSIA_DIR}/compile_commands-tmp.json \
        && cp ${FUCHSIA_DIR}/compile_commands-tmp.json ${FUCHSIA_DIR}/compile_commands.json \
        && rm ${FUCHSIA_DIR}/compile_commands-tmp.json
    fi
}

main "$@"