Commit 050a6ddb authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

refactor prepare_instrumentation.sh to remove PROJECT argument

parent 9324755c
Loading
Loading
Loading
Loading
Loading
+88 −81
Original line number Diff line number Diff line
@@ -36,13 +36,11 @@ function usage {
    echo "      $(basename $0) [OPTIONS]"
    echo
    echo "      -m MODE    one of [FULL|MEM_ONLY]"
    echo "      -p PROJECT one of [FLOAT|BASOP]"
    exit
}

# default values
MODE="FULL"
PROJECT="FLOAT"

while getopts "m:p:h" OPTIONS; do
    case ${OPTIONS} in
@@ -52,12 +50,6 @@ while getopts "m:p:h" OPTIONS; do
            usage
        fi
        ;;
    p)
        PROJECT=${OPTARG^^}
        if [ "$PROJECT" != "FLOAT" -a "$PROJECT" != "BASOP" ]; then
            usage
        fi
        ;;
    h | *)
        usage
        ;;
@@ -107,7 +99,7 @@ mkdir $targetdir
cp -R ../lib_* $targetdir
cp -R ../apps $targetdir
cp -R ../Makefile $targetdir
if [ "$PROJECT" = "FLOAT" ]; then
if [ -e ../CMakeLists.txt ]; then
    cp -R ../CMakeLists.txt $targetdir
fi
cp -R ../Workspace_msvc $targetdir
@@ -116,8 +108,22 @@ cp -R ../Workspace_msvc $targetdir
rm -f $ifdef_list
touch $ifdef_list

# LC3plus-related stuff -> only in float code
# Add LC3plus feature defines to options.h so that they are stripped correctly
### LC3plus code related modifications
if [ -d $targetdir/lib_lc3plus ]; then
    ISAR=1
    # Floating point code has lib_lc3plus/fft folder while BASOP code does not
    if [ -d $targetdir/lib_lc3plus/fft ]; then
        LC3PLUS_FFT=1
        lc3plus_fftdir="$targetdir/lib_lc3plus/fft/*.c"
    else
        lc3plus_fftdir=""
        LC3PLUS_FFT=0
    fi
else
    ISAR=0
fi

if [ $ISAR -eq 1 ]; then
    # Generate list of active defines in LC3plus defines.h
    lc3plus_defines=$(
        gcc -E -dM $targetdir/lib_lc3plus/defines.h -I $targetdir/lib_com -I $targetdir/lib_debug |
@@ -142,7 +148,9 @@ echo "
    $lc3plus_defines_filtered
    " >>$targetdir/lib_com/options.h

if [ "$PROJECT" = "BASOP" ]; then
    # only for fixed point code
    if [ $LC3PLUS_FFT -eq 0 ]; then
        # append additional defines for stripping
        echo "
        #define ENABLE_HR_MODE
        //#define DYNMEM_COUNT
@@ -154,32 +162,29 @@ if [ "$PROJECT" = "BASOP" ]; then
        #define SUBSET_FB
        #define SUBSET_UB
        " >>$targetdir/lib_com/options.h
fi

echo "
#endif /* OPTIONS_H_LC3_DEFINES */
" >>$targetdir/lib_com/options.h

if [ "$PROJECT" = "BASOP" ]; then
    # Clean out memory tool which breaks wmc_tool instrumentation
        # clean out memory tool which breaks wmc_tool instrumentation
        perl -i -0777 -pe 's/Dyn_Mem_Deluxe_In\(((.|\s)*?)\);/$1/g' $targetdir/lib_lc3plus/*.c
        perl -i -0777 -pe 's/Dyn_Mem_Deluxe_Out\s*\([^)]*\)\s*;/;/sg' $targetdir/lib_lc3plus/*.c
        perl -i -0777 -pe 's/\sDyn_Mem_In\((.|\s)*?\);//g' $targetdir/lib_lc3plus/*.c
        perl -i -0777 -pe 's/Dyn_Mem_Out\s*\([^)]*\)\s*;/;/sg' $targetdir/lib_lc3plus/*.c
        perl -i -0777 -pe 's/scratchAlign\(\s*((?:.|\s)*?)\s*,\s*((?:.|\s)*?)\s*\);/(void *)(((uintptr_t)($1) + ($2) + 0x3) & ~0x3);/g' $targetdir/lib_lc3plus/*.c
    # expand LC3plus BASOP macros
        # expand LC3plus specific BASOP macros to avoid instrumentation
        perl -i -0777 -pe 's/cplxMpy32_32_32_2\(\s*([^,]+?),\s*([^,]+?),\s*([^,]+?),\s*([^,]+?),\s*([^,]+?),\s*([^,]+?)\s*\);/do { $1 = L_sub(Mpy_32_32_0($3, $5), Mpy_32_32_0($4, $6)); $2 = L_add(Mpy_32_32_0($3, $6), Mpy_32_32_0($4, $5)); } while (0);/g' $targetdir/lib_lc3plus/*.c
        perl -i -0777 -pe 's/cplxMpy32_32_16_2\(\s*([^,]+?),\s*([^,]+?),\s*([^,]+?),\s*([^,]+?),\s*([^,]+?),\s*([^,]+?)\s*\);/do { $1 = L_sub(L_shr_pos(Mpy_32_16_lc3plus($3, $5), 1), L_shr_pos(Mpy_32_16_lc3plus($4, $6), 1)); $2 = L_add(L_shr_pos(Mpy_32_16_lc3plus($3, $6), 1), L_shr_pos(Mpy_32_16_lc3plus($4, $5), 1)); } while (0);/g' $targetdir/lib_lc3plus/*.c
        perl -i -0777 -pe 's/extractW16/extract_h/g' $targetdir/lib_lc3plus/*.c
        perl -i -0777 -pe 's/(UL_l|l|L_|)(sh[lr](_r)?)(?:_pos){1,2}/$1$2/g' $targetdir/lib_lc3plus/*.c
    # perl -i -0777 -pe 's/BASOP_sub(_sub)?_start/push_wmops/g' $targetdir/lib_lc3plus/*.c
    # perl -i -0777 -pe 's/BASOP_sub(_sub)?_end/pop_wmops/g' $targetdir/lib_lc3plus/*.c
    # perl -i -0777 -pe 's/#if\s*WMOPS/#ifdef WMOPS/g' $targetdir/lib_lc3plus/*.c
    fi

    # remove spaces in preprocessor directives
    perl -i -0777 -pe 's/#\s+(if|else|elif|endif|define)/#$1/g' $targetdir/lib_lc3plus/*.[ch]
    perl -i -0777 -pe 's/#(ifdef|ifndef)\s{2,}/#ifdef /g' $targetdir/lib_lc3plus/*.[ch]

    echo "
    #endif /* OPTIONS_H_LC3_DEFINES */
    " >>$targetdir/lib_com/options.h
fi # ISAR -eq 1

# get switches from options.h and append it to $ifdef_list
parse_options_opt=""
if coan_exists; then
@@ -193,12 +198,6 @@ if [ $? -ne 0 ]; then
    exit -1
fi

# Floating point code has lib_lc3plus/fft folder while BASOP code does not
fftdir=""
if [ -d $targetdir/lib_lc3plus/fft ]; then
    fftdir="$targetdir/lib_lc3plus/fft/*.c"
fi

# strip switches, to remove the macros (turn on extended globing to allow !(pattern*) matching)
shopt -s extglob
if coan_exists; then
@@ -207,11 +206,14 @@ if coan_exists; then
    sed -i "/-UMEM_COUNT_DETAILS/d" $ifdef_list

    coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/apps/*.[hc]
    coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_{com,dec,enc,isar,rend,util,debug}/!(wmc_auto*).[hc]
    coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_lc3plus/!(wmc_auto*).[hc]
    if [ -n "$fftdir" ]; then
    coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_{com,dec,enc,rend,util,debug}/!(wmc_auto*).[hc]
    if [ $ISAR -eq 1 ]; then
        coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_{isar,lib_lc3plus}/!(wmc_auto*).[hc]
        if [ $LC3PLUS_FFT -eq 1 ]; then
            coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_lc3plus/fft/!(wmc_auto*).[hc]
        fi
    fi
    coan source --replace --no-transients -E -K --file $ifdef_list $targetdir/lib_lc3plus/!(wmc_auto*).[hc]
else
    ./strip_defines_cppp.sh $targetdir $ifdef_list
fi
@@ -225,12 +227,17 @@ set -e
"tools/$system/wmc_tool" $wmc_opt -m "$targetdir/apps/encoder.c" "$targetdir/lib_enc/*.c" "$targetdir/lib_com/*.c" >>wmc_tool_output.txt 2>&1
"tools/$system/wmc_tool" $wmc_opt -m "$targetdir/apps/decoder.c" "$targetdir/lib_dec/*.c" "$targetdir/lib_rend/*.c" >>wmc_tool_output.txt 2>&1
for bak_file in $targetdir/lib_rend/*.bak; do mv "$bak_file" "${bak_file%.*}"; done # restore fresh .c files to avoid time-consuming des-instrumentation of files by the WMC tool
"tools/$system/wmc_tool" $wmc_opt -m "$targetdir/apps/renderer.c" "$targetdir/lib_rend/*.c" "$targetdir/lib_lc3plus/*.c" "$fftdir" >>wmc_tool_output.txt 2>&1
if [ $ISAR -eq 0 ]; then
    "tools/$system/wmc_tool" $wmc_opt -m "$targetdir/apps/renderer.c" "$targetdir/lib_rend/*.c" >>wmc_tool_output.txt 2>&1
else
    "tools/$system/wmc_tool" $wmc_opt -m "$targetdir/apps/renderer.c" "$targetdir/lib_rend/*.c" "$targetdir/lib_lc3plus/*.c" "$lc3plus_fftdir" >>wmc_tool_output.txt 2>&1
    for bak_file in $targetdir/lib_lc3plus/*.bak; do mv "$bak_file" "${bak_file%.*}"; done # restore fresh .c files to avoid time-consuming des-instrumentation of files by the WMC tool
if [ -n "$fftdir" ]; then
    if [ -n "$lc3plus_fftdir" ]; then
        for bak_file in $targetdir/lib_lc3plus/fft/*.bak; do mv "$bak_file" "${bak_file%.*}"; done # restore fresh .c files to avoid time-consuming des-instrumentation of files by the WMC tool
    fi
    # ISAR post rend
    "tools/$system/wmc_tool" $wmc_opt -m "$targetdir/apps/isar_post_rend.c" "$targetdir/lib_isar/*.c" "$targetdir/lib_lc3plus/*.c" "$fftdir" >>wmc_tool_output.txt 2>&1
fi
set +e

# automatically enable #define WMOPS in options.h