IC设计为filelist添加`if/ifndef-`else-`endif, 提供不同场景下的filelist

假设有如下filelist(test.f):

`ifdef STUB_LPDDR
      debug point0
`else
     `ifndef FPGA
        `ifdef HAPS
        debug point1
        `else
        debug point2
        `endif
        debug point3

        `ifndef LPDDR
        debug point4
        `else
        debug point5
        `endif

     `else
        `ifndef LPDDR
        debug point6

            `ifdef HAPS
            debug point11
            `else
            debug point22
            `endif

        `else
        debug point7
        -f ${SOC_VV_DIR}/etc/flist/soc_tb.f
        `endif

        debug point8

     `endif
`endif

可以看到为不同的场景,定义了不同的选项,可以使用下面的python脚本来打平整个filelist:

import os
import sys

def parse_file(file_path, defines):
    lines = []
    condition_stack = []
    current_include = True

    with open(file_path, 'r') as file:
        for line in file:
            stripped_line = line.strip()
            if not stripped_line:
                continue
            stripped_line = os.path.expandvars(stripped_line)
            #print("debug point line0", stripped_line)

            if stripped_line.startswith('`ifdef'):
                condition = stripped_line.split()[1]
                condition_stack.append(current_include)
                current_include = current_include and (condition in defines)
                #print("debug point current_include0", current_include, condition in defines, condition, defines)
            elif stripped_line.startswith('`ifndef'):
                condition = stripped_line.split()[1]
                condition_stack.append(current_include)
                current_include = current_include and (condition not in defines)
                #print("debug point current_include1", current_include)
            elif stripped_line.startswith('`else'):
                if condition_stack:
                    previous_include = condition_stack[-1]
                    current_include = previous_include and not current_include
            elif stripped_line.startswith('`endif'):
                if condition_stack:
                    current_include = condition_stack.pop()
            elif stripped_line.startswith('-f'):
                included_file = stripped_line.split()[1]
                if current_include:
                    lines.extend(parse_file(included_file, defines))
            else:
                #print("debug point current_include3", current_include)
                if current_include:
                    #print("debug point line1", stripped_line)
                    lines.append(stripped_line)

    return lines

def main():
    if '-f' not in sys.argv or '-o' not in sys.argv:
        #print("Usage: python flatf.py -f <input_file> -o <output_file> -define <definitions>")
        return

    input_file = sys.argv[sys.argv.index('-f') + 1]
    output_file = sys.argv[sys.argv.index('-o') + 1]

    if '-define' in sys.argv:
        define_index = sys.argv.index('-define') + 1
        defines = set()
        while define_index < len(sys.argv) and not sys.argv[define_index].startswith('-'):
            defines.add(sys.argv[define_index])
            define_index += 1
    else:
        defines = set()

    #print("debug point defines", defines)

    expanded_lines = parse_file(input_file, defines)

    with open(output_file, 'w') as file:
        for line in expanded_lines:
            file.write(line + '\n')

if __name__ == "__main__":
    main()

使用方法如下:-define必须放在最后
python3 test.py -f test.f -o output.f -define FPGA LPDDR HAPS

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值