# Copyright (c) 2006-2008 The Regents of The University of Michigan
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import os
import sys
from os.path import basename, exists, join as joinpath, normpath
from os.path import isdir, isfile, islink

spec_dist = os.environ.get("M5_CPU2000", "/dist/m5/cpu2000")


def copyfiles(srcdir, dstdir):
    from filecmp import cmp as filecmp
    from shutil import copyfile

    srcdir = normpath(srcdir)
    dstdir = normpath(dstdir)

    if not isdir(dstdir):
        os.mkdir(dstdir)

    for root, dirs, files in os.walk(srcdir):
        root = normpath(root)
        prefix = os.path.commonprefix([root, srcdir])

        root = root[len(prefix) :]
        if root.startswith("/"):
            root = root[1:]

        for entry in dirs:
            newdir = joinpath(dstdir, root, entry)
            if not isdir(newdir):
                os.mkdir(newdir)

        for entry in files:
            dest = normpath(joinpath(dstdir, root, entry))
            src = normpath(joinpath(srcdir, root, entry))
            if not isfile(dest) or not filecmp(src, dest):
                copyfile(src, dest)

    # some of the spec benchmarks expect to be run from one directory up.
    # just create some symlinks that solve the problem
    inlink = joinpath(dstdir, "input")
    outlink = joinpath(dstdir, "output")
    if not exists(inlink):
        os.symlink(".", inlink)
    if not exists(outlink):
        os.symlink(".", outlink)


class Benchmark(object):
    def __init__(self, isa, os, input_set):
        if not hasattr(self.__class__, "name"):
            self.name = self.__class__.__name__

        if not hasattr(self.__class__, "binary"):
            self.binary = self.name

        if not hasattr(self.__class__, "args"):
            self.args = []

        if not hasattr(self.__class__, "output"):
            self.output = f"{self.name}.out"

        if not hasattr(self.__class__, "simpoint"):
            self.simpoint = None

        try:
            func = getattr(self.__class__, input_set)
        except AttributeError:
            raise AttributeError(
                f"The benchmark {self.name} does not have the {input_set} input set"
            )

        executable = joinpath(spec_dist, "binaries", isa, os, self.binary)
        if not isfile(executable):
            raise AttributeError(f"{executable} not found")
        self.executable = executable

        # root of tree for input & output data files
        data_dir = joinpath(spec_dist, "data", self.name)
        # optional subtree with files shared across input sets
        all_dir = joinpath(data_dir, "all")
        # dirs for input & output files for this input set
        inputs_dir = joinpath(data_dir, input_set, "input")
        outputs_dir = joinpath(data_dir, input_set, "output")
        # keep around which input set was specified
        self.input_set = input_set

        if not isdir(inputs_dir):
            raise AttributeError(f"{inputs_dir} not found")

        self.inputs_dir = [inputs_dir]
        if isdir(all_dir):
            self.inputs_dir += [joinpath(all_dir, "input")]
        if isdir(outputs_dir):
            self.outputs_dir = outputs_dir

        if not hasattr(self.__class__, "stdin"):
            self.stdin = joinpath(inputs_dir, f"{self.name}.in")
            if not isfile(self.stdin):
                self.stdin = None

        if not hasattr(self.__class__, "stdout"):
            self.stdout = joinpath(outputs_dir, f"{self.name}.out")
            if not isfile(self.stdout):
                self.stdout = None

        func(self, isa, os)

    def makeProcessArgs(self, **kwargs):
        # set up default args for Process object
        process_args = {}
        process_args["cmd"] = [self.name] + self.args
        process_args["executable"] = self.executable
        if self.stdin:
            process_args["input"] = self.stdin
        if self.stdout:
            process_args["output"] = self.stdout
        if self.simpoint:
            process_args["simpoint"] = self.simpoint
        # explicit keywords override defaults
        process_args.update(kwargs)

        return process_args

    def makeProcess(self, **kwargs):
        process_args = self.makeProcessArgs(**kwargs)

        # figure out working directory: use m5's outdir unless
        # overridden by Process's cwd param
        cwd = process_args.get("cwd")

        if not cwd:
            from m5 import options

            cwd = options.outdir
            process_args["cwd"] = cwd
        if not isdir(cwd):
            os.makedirs(cwd)
        # copy input files to working directory
        for d in self.inputs_dir:
            copyfiles(d, cwd)
        # generate Process object
        from m5.objects import Process

        return Process(**process_args)

    def __str__(self):
        return self.name


class DefaultBenchmark(Benchmark):
    def ref(self, isa, os):
        pass

    def test(self, isa, os):
        pass

    def train(self, isa, os):
        pass


class MinneDefaultBenchmark(DefaultBenchmark):
    def smred(self, isa, os):
        pass

    def mdred(self, isa, os):
        pass

    def lgred(self, isa, os):
        pass


class ammp(MinneDefaultBenchmark):
    name = "ammp"
    number = 188
    lang = "C"
    simpoint = 108 * 100e6


class applu(MinneDefaultBenchmark):
    name = "applu"
    number = 173
    lang = "F77"
    simpoint = 2179 * 100e6


class apsi(MinneDefaultBenchmark):
    name = "apsi"
    number = 301
    lang = "F77"
    simpoint = 3408 * 100e6


class art(DefaultBenchmark):
    name = "art"
    number = 179
    lang = "C"

    def test(self, isa, os):
        self.args = [
            "-scanfile",
            "c756hel.in",
            "-trainfile1",
            "a10.img",
            "-stride",
            "2",
            "-startx",
            "134",
            "-starty",
            "220",
            "-endx",
            "139",
            "-endy",
            "225",
            "-objects",
            "1",
        ]
        self.output = "test.out"

    def train(self, isa, os):
        self.args = [
            "-scanfile",
            "c756hel.in",
            "-trainfile1",
            "a10.img",
            "-stride",
            "2",
            "-startx",
            "134",
            "-starty",
            "220",
            "-endx",
            "184",
            "-endy",
            "240",
            "-objects",
            "3",
        ]
        self.output = "train.out"

    def lgred(self, isa, os):
        self.args = [
            "-scanfile",
            "c756hel.in",
            "-trainfile1",
            "a10.img",
            "-stride",
            "5",
            "-startx",
            "134",
            "-starty",
            "220",
            "-endx",
            "184",
            "-endy",
            "240",
            "-objects",
            "1",
        ]
        self.output = "lgred.out"


class art110(art):
    def ref(self, isa, os):
        self.args = [
            "-scanfile",
            "c756hel.in",
            "-trainfile1",
            "a10.img",
            "-trainfile2",
            "hc.img",
            "-stride",
            "2",
            "-startx",
            "110",
            "-starty",
            "200",
            "-endx",
            "160",
            "-endy",
            "240",
            "-objects",
            "10",
        ]
        self.output = "ref.1.out"
        self.simpoint = 340 * 100e6


class art470(art):
    def ref(self, isa, os):
        self.args = [
            "-scanfile",
            "c756hel.in",
            "-trainfile1",
            "a10.img",
            "-trainfile2",
            "hc.img",
            "-stride",
            "2",
            "-startx",
            "470",
            "-starty",
            "140",
            "-endx",
            "520",
            "-endy",
            "180",
            "-objects",
            "10",
        ]
        self.output = "ref.2.out"
        self.simpoint = 365 * 100e6


class equake(DefaultBenchmark):
    name = "equake"
    number = 183
    lang = "C"
    simpoint = 812 * 100e6

    def lgred(self, isa, os):
        pass


class facerec(MinneDefaultBenchmark):
    name = "facerec"
    number = 187
    lang = "F"
    simpoint = 375 * 100e6


class fma3d(MinneDefaultBenchmark):
    name = "fma3d"
    number = 191
    lang = "F"
    simpoint = 2541 * 100e6


class galgel(MinneDefaultBenchmark):
    name = "galgel"
    number = 178
    lang = "F"
    simpoint = 2491 * 100e6


class lucas(MinneDefaultBenchmark):
    name = "lucas"
    number = 189
    lang = "F"
    simpoint = 545 * 100e6


class mesa(Benchmark):
    name = "mesa"
    number = 177
    lang = "C"
    stdin = None

    def __set_args(self, frames):
        self.args = [
            "-frames",
            frames,
            "-meshfile",
            f"{self.name}.in",
            "-ppmfile",
            f"{self.name}.ppm",
        ]

    def test(self, isa, os):
        self.__set_args("10")

    def train(self, isa, os):
        self.__set_args("500")

    def ref(self, isa, os):
        self.__set_args("1000")
        self.simpoint = 1135 * 100e6

    def lgred(self, isa, os):
        self.__set_args("1")


class mgrid(MinneDefaultBenchmark):
    name = "mgrid"
    number = 172
    lang = "F77"
    simpoint = 3292 * 100e6


class sixtrack(DefaultBenchmark):
    name = "sixtrack"
    number = 200
    lang = "F77"
    simpoint = 3043 * 100e6

    def lgred(self, isa, os):
        pass


class swim(MinneDefaultBenchmark):
    name = "swim"
    number = 171
    lang = "F77"
    simpoint = 2079 * 100e6


class wupwise(DefaultBenchmark):
    name = "wupwise"
    number = 168
    lang = "F77"
    simpoint = 3237 * 100e6

    def lgred(self, isa, os):
        pass


class bzip2(DefaultBenchmark):
    name = "bzip2"
    number = 256
    lang = "C"

    def test(self, isa, os):
        self.args = ["input.random"]

    def train(self, isa, os):
        self.args = ["input.compressed"]


class bzip2_source(bzip2):
    def ref(self, isa, os):
        self.simpoint = 977 * 100e6
        self.args = ["input.source", "58"]

    def lgred(self, isa, os):
        self.args = ["input.source", "1"]


class bzip2_graphic(bzip2):
    def ref(self, isa, os):
        self.simpoint = 718 * 100e6
        self.args = ["input.graphic", "58"]

    def lgred(self, isa, os):
        self.args = ["input.graphic", "1"]


class bzip2_program(bzip2):
    def ref(self, isa, os):
        self.simpoint = 458 * 100e6
        self.args = ["input.program", "58"]

    def lgred(self, isa, os):
        self.args = ["input.program", "1"]


class crafty(MinneDefaultBenchmark):
    name = "crafty"
    number = 186
    lang = "C"
    simpoint = 774 * 100e6


class eon(MinneDefaultBenchmark):
    name = "eon"
    number = 252
    lang = "CXX"
    stdin = None


class eon_kajiya(eon):
    args = [
        "chair.control.kajiya",
        "chair.camera",
        "chair.surfaces",
        "chair.kajiya.ppm",
        "ppm",
        "pixels_out.kajiya",
    ]
    output = "kajiya_log.out"


class eon_cook(eon):
    args = [
        "chair.control.cook",
        "chair.camera",
        "chair.surfaces",
        "chair.cook.ppm",
        "ppm",
        "pixels_out.cook",
    ]
    output = "cook_log.out"


class eon_rushmeier(eon):
    args = [
        "chair.control.rushmeier",
        "chair.camera",
        "chair.surfaces",
        "chair.rushmeier.ppm",
        "ppm",
        "pixels_out.rushmeier",
    ]
    output = "rushmeier_log.out"
    simpoint = 403 * 100e6


class gap(DefaultBenchmark):
    name = "gap"
    number = 254
    lang = "C"

    def __set_args(self, size):
        self.args = ["-l", "./", "-q", "-m", size]

    def test(self, isa, os):
        self.__set_args("64M")

    def train(self, isa, os):
        self.__set_args("128M")

    def ref(self, isa, os):
        self.__set_args("192M")
        self.simpoint = 674 * 100e6

    def lgred(self, isa, os):
        self.__set_args("64M")

    def mdred(self, isa, os):
        self.__set_args("64M")

    def smred(self, isa, os):
        self.__set_args("64M")


class gcc(DefaultBenchmark):
    name = "gcc"
    number = 176
    lang = "C"

    def test(self, isa, os):
        self.args = ["cccp.i", "-o", "cccp.s"]

    def train(self, isa, os):
        self.args = ["cp-decl.i", "-o", "cp-decl.s"]

    def smred(self, isa, os):
        self.args = ["c-iterate.i", "-o", "c-iterate.s"]

    def mdred(self, isa, os):
        self.args = ["rdlanal.i", "-o", "rdlanal.s"]

    def lgred(self, isa, os):
        self.args = ["cp-decl.i", "-o", "cp-decl.s"]


class gcc_166(gcc):
    def ref(self, isa, os):
        self.simpoint = 389 * 100e6
        self.args = ["166.i", "-o", "166.s"]


class gcc_200(gcc):
    def ref(self, isa, os):
        self.simpoint = 736 * 100e6
        self.args = ["200.i", "-o", "200.s"]


class gcc_expr(gcc):
    def ref(self, isa, os):
        self.simpoint = 36 * 100e6
        self.args = ["expr.i", "-o", "expr.s"]


class gcc_integrate(gcc):
    def ref(self, isa, os):
        self.simpoint = 4 * 100e6
        self.args = ["integrate.i", "-o", "integrate.s"]


class gcc_scilab(gcc):
    def ref(self, isa, os):
        self.simpoint = 207 * 100e6
        self.args = ["scilab.i", "-o", "scilab.s"]


class gzip(DefaultBenchmark):
    name = "gzip"
    number = 164
    lang = "C"

    def test(self, isa, os):
        self.args = ["input.compressed", "2"]

    def train(self, isa, os):
        self.args = ["input.combined", "32"]


class gzip_source(gzip):
    def ref(self, isa, os):
        self.simpoint = 334 * 100e6
        self.args = ["input.source", "1"]

    def smred(self, isa, os):
        self.args = ["input.source", "1"]

    def mdred(self, isa, os):
        self.args = ["input.source", "1"]

    def lgred(self, isa, os):
        self.args = ["input.source", "1"]


class gzip_log(gzip):
    def ref(self, isa, os):
        self.simpoint = 265 * 100e6
        self.args = ["input.log", "60"]

    def smred(self, isa, os):
        self.args = ["input.log", "1"]

    def mdred(self, isa, os):
        self.args = ["input.log", "1"]

    def lgred(self, isa, os):
        self.args = ["input.log", "1"]


class gzip_graphic(gzip):
    def ref(self, isa, os):
        self.simpoint = 653 * 100e6
        self.args = ["input.graphic", "60"]

    def smred(self, isa, os):
        self.args = ["input.graphic", "1"]

    def mdred(self, isa, os):
        self.args = ["input.graphic", "1"]

    def lgred(self, isa, os):
        self.args = ["input.graphic", "1"]


class gzip_random(gzip):
    def ref(self, isa, os):
        self.simpoint = 623 * 100e6
        self.args = ["input.random", "60"]

    def smred(self, isa, os):
        self.args = ["input.random", "1"]

    def mdred(self, isa, os):
        self.args = ["input.random", "1"]

    def lgred(self, isa, os):
        self.args = ["input.random", "1"]


class gzip_program(gzip):
    def ref(self, isa, os):
        self.simpoint = 1189 * 100e6
        self.args = ["input.program", "60"]

    def smred(self, isa, os):
        self.args = ["input.program", "1"]

    def mdred(self, isa, os):
        self.args = ["input.program", "1"]

    def lgred(self, isa, os):
        self.args = ["input.program", "1"]


class mcf(MinneDefaultBenchmark):
    name = "mcf"
    number = 181
    lang = "C"
    args = ["mcf.in"]
    simpoint = 553 * 100e6


class parser(MinneDefaultBenchmark):
    name = "parser"
    number = 197
    lang = "C"
    args = ["2.1.dict", "-batch"]
    simpoint = 1146 * 100e6


class perlbmk(DefaultBenchmark):
    name = "perlbmk"
    number = 253
    lang = "C"

    def test(self, isa, os):
        self.args = ["-I.", "-I", "lib", "test.pl"]
        self.stdin = "test.in"


class perlbmk_diffmail(perlbmk):
    def ref(self, isa, os):
        self.simpoint = 141 * 100e6
        self.args = [
            "-I",
            "lib",
            "diffmail.pl",
            "2",
            "550",
            "15",
            "24",
            "23",
            "100",
        ]

    def train(self, isa, os):
        self.args = [
            "-I",
            "lib",
            "diffmail.pl",
            "2",
            "350",
            "15",
            "24",
            "23",
            "150",
        ]


class perlbmk_scrabbl(perlbmk):
    def train(self, isa, os):
        self.args = ["-I.", "-I", "lib", "scrabbl.pl"]
        self.stdin = "scrabbl.in"


class perlbmk_makerand(perlbmk):
    def ref(self, isa, os):
        self.simpoint = 11 * 100e6
        self.args = ["-I", "lib", "makerand.pl"]

    def lgred(self, isa, os):
        self.args = ["-I.", "-I", "lib", "lgred.makerand.pl"]

    def mdred(self, isa, os):
        self.args = ["-I.", "-I", "lib", "mdred.makerand.pl"]

    def smred(self, isa, os):
        self.args = ["-I.", "-I", "lib", "smred.makerand.pl"]


class perlbmk_perfect(perlbmk):
    def ref(self, isa, os):
        self.simpoint = 5 * 100e6
        self.args = ["-I", "lib", "perfect.pl", "b", "3", "m", "4"]

    def train(self, isa, os):
        self.args = ["-I", "lib", "perfect.pl", "b", "3"]


class perlbmk_splitmail1(perlbmk):
    def ref(self, isa, os):
        self.simpoint = 405 * 100e6
        self.args = [
            "-I",
            "lib",
            "splitmail.pl",
            "850",
            "5",
            "19",
            "18",
            "1500",
        ]


class perlbmk_splitmail2(perlbmk):
    def ref(self, isa, os):
        self.args = [
            "-I",
            "lib",
            "splitmail.pl",
            "704",
            "12",
            "26",
            "16",
            "836",
        ]


class perlbmk_splitmail3(perlbmk):
    def ref(self, isa, os):
        self.args = [
            "-I",
            "lib",
            "splitmail.pl",
            "535",
            "13",
            "25",
            "24",
            "1091",
        ]


class perlbmk_splitmail4(perlbmk):
    def ref(self, isa, os):
        self.args = [
            "-I",
            "lib",
            "splitmail.pl",
            "957",
            "12",
            "23",
            "26",
            "1014",
        ]


class twolf(Benchmark):
    name = "twolf"
    number = 300
    lang = "C"
    stdin = None

    def test(self, isa, os):
        self.args = ["test"]

    def train(self, isa, os):
        self.args = ["train"]

    def ref(self, isa, os):
        self.simpoint = 1066 * 100e6
        self.args = ["ref"]

    def smred(self, isa, os):
        self.args = ["smred"]

    def mdred(self, isa, os):
        self.args = ["mdred"]

    def lgred(self, isa, os):
        self.args = ["lgred"]


class vortex(Benchmark):
    name = "vortex"
    number = 255
    lang = "C"
    stdin = None

    def __init__(self, isa, os, input_set):
        if isa in ("arm", "thumb", "aarch64"):
            self.endian = "lendian"
        elif isa == "sparc" or isa == "sparc32":
            self.endian = "bendian"
        else:
            raise AttributeError(f"unknown ISA {isa}")

        super(vortex, self).__init__(isa, os, input_set)

    def test(self, isa, os):
        self.args = [f"{self.endian}.raw"]
        self.output = "vortex.out"

    def train(self, isa, os):
        self.args = [f"{self.endian}.raw"]
        self.output = "vortex.out"

    def smred(self, isa, os):
        self.args = [f"{self.endian}.raw"]
        self.output = "vortex.out"

    def mdred(self, isa, os):
        self.args = [f"{self.endian}.raw"]
        self.output = "vortex.out"

    def lgred(self, isa, os):
        self.args = [f"{self.endian}.raw"]
        self.output = "vortex.out"


class vortex1(vortex):
    def ref(self, isa, os):
        self.args = [f"{self.endian}1.raw"]
        self.output = "vortex1.out"
        self.simpoint = 271 * 100e6


class vortex2(vortex):
    def ref(self, isa, os):
        self.simpoint = 1024 * 100e6
        self.args = [f"{self.endian}2.raw"]
        self.output = "vortex2.out"


class vortex3(vortex):
    def ref(self, isa, os):
        self.simpoint = 564 * 100e6
        self.args = [f"{self.endian}3.raw"]
        self.output = "vortex3.out"


class vpr(MinneDefaultBenchmark):
    name = "vpr"
    number = 175
    lang = "C"


# not sure about vpr minnespec place.in
class vpr_place(vpr):
    args = [
        "net.in",
        "arch.in",
        "place.out",
        "dum.out",
        "-nodisp",
        "-place_only",
        "-init_t",
        "5",
        "-exit_t",
        "0.005",
        "-alpha_t",
        "0.9412",
        "-inner_num",
        "2",
    ]
    output = "place_log.out"


class vpr_route(vpr):
    simpoint = 476 * 100e6
    args = [
        "net.in",
        "arch.in",
        "place.in",
        "route.out",
        "-nodisp",
        "-route_only",
        "-route_chan_width",
        "15",
        "-pres_fac_mult",
        "2",
        "-acc_fac",
        "1",
        "-first_iter_pres_fac",
        "4",
        "-initial_pres_fac",
        "8",
    ]
    output = "route_log.out"


all = [
    ammp,
    applu,
    apsi,
    art,
    art110,
    art470,
    equake,
    facerec,
    fma3d,
    galgel,
    lucas,
    mesa,
    mgrid,
    sixtrack,
    swim,
    wupwise,
    bzip2_source,
    bzip2_graphic,
    bzip2_program,
    crafty,
    eon_kajiya,
    eon_cook,
    eon_rushmeier,
    gap,
    gcc_166,
    gcc_200,
    gcc_expr,
    gcc_integrate,
    gcc_scilab,
    gzip_source,
    gzip_log,
    gzip_graphic,
    gzip_random,
    gzip_program,
    mcf,
    parser,
    perlbmk_diffmail,
    perlbmk_makerand,
    perlbmk_perfect,
    perlbmk_splitmail1,
    perlbmk_splitmail2,
    perlbmk_splitmail3,
    perlbmk_splitmail4,
    twolf,
    vortex1,
    vortex2,
    vortex3,
    vpr_place,
    vpr_route,
]

__all__ = [x.__name__ for x in all]

if __name__ == "__main__":
    from pprint import pprint

    for bench in all:
        for input_set in "ref", "test", "train":
            print(f"class: {bench.__name__}")
            x = bench("x86", "linux", input_set)
            print(f"{x}: {input_set}")
            pprint(x.makeProcessArgs())
            print()
