# Copyright (c) 2023 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0

import pytest

from pathlib import Path

def pytest_addoption(parser):
    parser.addoption('--tool')
    parser.addoption('--tool-options')
    parser.addoption('--sys-clock-hw-cycles-per-sec', default=None)

@pytest.fixture()
def tool(request):
    return request.config.getoption('--tool')

@pytest.fixture()
def tool_options(request):
    return request.config.getoption('--tool-options')

@pytest.fixture()
def config(request):
    build_dir = Path(request.config.getoption('--build-dir'))
    file_name = build_dir / 'zephyr' / '.config'

    cfgs = {}
    with open(file_name) as fp:
        for line in fp:
            if line.startswith('CONFIG_'):
                k, v = line.split('=', maxsplit=1)
                cfgs[k[7:]] = v

    return cfgs

@pytest.fixture()
def sys_clock_hw_cycles_per_sec(request, config):
    if request.config.getoption('--sys-clock-hw-cycles-per-sec'):
        return int(request.config.getoption('--sys-clock-hw-cycles-per-sec'))

    return int(config['SYS_CLOCK_HW_CYCLES_PER_SEC'])
