from lit.llvm import llvm_config

if not config.mlir_include_integration_tests:
    config.unsupported = True


def configure_aarch64_mcr_cmd():
    mcr_cmd = "mlir-cpu-runner"

    # NOTE: If the SVE tests are disabled and the SME tests are enabled to run
    # under emulation, the SVE specific RUN lines in the SparseTensor tests
    # will run under emulation.
    if not (config.mlir_run_arm_sve_tests or config.mlir_run_arm_sme_tests):
        return mcr_cmd

    config.substitutions.append(
        (
            "%mlir_native_utils_lib_dir",
            config.arm_emulator_utils_lib_dir or config.mlir_lib_dir,
        )
    )

    if config.arm_emulator_executable:
        if config.arm_emulator_mlir_cpu_runner_executable:
            mcr_cmd = config.arm_emulator_mlir_cpu_runner_executable
        else:
            # Top-level LIT config adds llvm_tools_dir to PATH but this is lost
            # when running under an emulator. If the user didn't specify an
            # mlir-cpu-runner executable, use absolute path
            # %llvm_tools_dir/mlir-cpu-runner.
            mcr_cmd = llvm_config.use_llvm_tool(
                "mlir-cpu-runner",
                search_env="MLIR_CPU_RUNNER",
                required=True,
                search_paths=[config.mlir_tools_dir],
                use_installed=False,
            )

        # Run test in emulator (qemu or armie)
        emulation_cmd = (
            f"{config.arm_emulator_executable} {config.arm_emulator_options}"
        )

        mcr_cmd = f"{emulation_cmd} {mcr_cmd}"

    return mcr_cmd


aarch64_mcr_cmd = configure_aarch64_mcr_cmd()

# AArch64 tests will run under emulation if configured at build time by the
# following CMake options:
#
# * ARM_EMULATOR_EXECUTABLE     - emulator to use.
# * ARM_EMULATOR_OPTIONS        - options for emulator.
# * ARM_EMULATOR_MLIR_CPU_RUNNER_EXECUTABLE - AArch64 native mlir-cpu-runner to
#                                             support cross-compilation
# * ARM_EMULATOR_UTILS_LIB_DIR - AArch64 native utilites library to support
#                                cross-compilation.
config.substitutions.append(("%mcr_aarch64_cmd", aarch64_mcr_cmd))