#! /bin/bash
#
# Copyright 2022 Google LLC
#
# 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
#
#     https://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.

# CAmkES system image memory analyzer.

# Analyze the CAmkES-generated capDL spec for memory use.
# By default the memory foottprint of each component is displayed.
# The -d option will give a breakdown by memory type:
#  elf          .text + .data
#  bss          .bss
#  ipc_buffer   CAmkES per-thread ipc_buffer's
#  stack        CAmkES per-thread stack
#  bootinfo     Bootinfo page passed by the rooteserver
#  mmio         MMIO region (backed by devivce memory)
#
# Note mmio sections do not count against memory usage as they are
# allocated from dedicated memory that does not have physical
# memory backing.
#
# ROOTDIR must be set to the top of the shodan development tree
# (as done by build/setup.sh).

# Usage: kmem [-d]

if [[ -z "${ROOTDIR}" ]]; then
    echo "Source build/setup.sh first"
    exit 1
fi

TARGET=${TARGET:-riscv32-unknown-elf}

# Default is a summary of release build.
DETAILS=""
BUILD="release"
KERNEL="--kernel"
VERBOSE=""

function parseargv {
    local usage="Usage: kmem.sh [-h|--help] [-d|--details] [-D|--debug] [-R|--release] [-s|--summary] [-u|--user] [-v|--verbose]"
    local args=$(getopt -o dDRsuv --long details,debug,release,summary,user,verbose,help -n kmem.sh -- "$@")

    set -- $args

    for i; do
        case "$1" in
            -d|--details)
                DETAILS="--details"
                shift
                ;;

            -s|--summary)
                DETAILS=""
                shift
                ;;

            -D|--debug)
                BUILD="debug"
                shift
                ;;

            -R|--release)
                BUILD="release"
                shift
                ;;

            -u|--user)
                KERNEL=""
                shift
                ;;

            -v|--verbose)
                VERBOSE="--verbose"
                shift
                ;;

            --)
                shift
                break
                ;;

            -h|--help|*)
                echo "$usage" >/dev/stderr
                exit 1
                ;;
        esac
    done
}

parseargv "$@"

CANTRIP_OUT="${ROOTDIR}/out/cantrip/${TARGET}/${BUILD}"
PYTHONPATH="${PYTHONPATH}:${ROOTDIR}/cantrip/projects/capdl/python-capdl-tool"
exec python3 "${ROOTDIR}/cantrip/tools/seL4/kmem-tool/kmem.py" --object-state "${CANTRIP_OUT}/object-final.pickle" ${DETAILS} ${KERNEL} ${VERBOSE}
