#!/usr/bin/bash
# Copyright 2023 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
#
#     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.

# Run this script in $ROOTDIR/hw/matcha:
#     ./util/gen_syn_filelist.sh
# The script generates synthesis filelist in:
#     build/lowrisc_systems_top_matcha_0.1/syn-icarus

export proj_root=$ROOTDIR/hw/matcha
export titan_root=$ROOTDIR/hw/opentitan-upstream
fusesoc --cores-root ${titan_root}/hw/ip \
        --cores-root ${titan_root}/hw/dv \
        --cores-root ${titan_root}/hw/vendor \
        --cores-root ${proj_root}/../ip/isp \
        --cores-root ${proj_root}/hw \
        run \
        --flag=fileset_top \
        --target=syn \
        --setup lowrisc:systems:top_matcha:0.1
