# -*- mode:python -*-

# Copyright (c) 2015-2018 Advanced Micro Devices, Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. 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.
#
# 3. Neither the name of the copyright holder 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 HOLDER 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('*')

if not env['CONF']['BUILD_GPU']:
    Return()

SimObject('GPU.py', sim_objects=[
    'PoolManager', 'SimplePoolManager', 'DynPoolManager', 'RegisterFile',
    'ScalarRegisterFile', 'VectorRegisterFile', 'RegisterManager', 'Wavefront',
    'ComputeUnit', 'Shader', 'GPUComputeDriver', 'GPURenderDriver',
    'GPUDispatcher', 'GPUCommandProcessor'],
    enums=['PrefetchType', 'GfxVersion', 'StorageClassType'])
SimObject('GPUStaticInstFlags.py', enums=['GPUStaticInstFlags'])
SimObject('LdsState.py', sim_objects=['LdsState'])

Source('comm.cc')
Source('compute_unit.cc')
Source('dispatcher.cc')
Source('exec_stage.cc')
Source('fetch_stage.cc')
Source('fetch_unit.cc')
Source('global_memory_pipeline.cc')
Source('gpu_command_processor.cc')
Source('gpu_compute_driver.cc')
Source('gpu_dyn_inst.cc')
Source('gpu_exec_context.cc')
Source('gpu_render_driver.cc')
Source('gpu_static_inst.cc')
Source('lds_state.cc')
Source('local_memory_pipeline.cc')
Source('pool_manager.cc')
Source('register_file.cc')
Source('register_manager.cc')
Source('scalar_memory_pipeline.cc')
Source('scalar_register_file.cc')
Source('schedule_stage.cc')
Source('scheduler.cc')
Source('scoreboard_check_stage.cc')
Source('shader.cc')
Source('dyn_pool_manager.cc')
Source('simple_pool_manager.cc')
Source('static_register_manager_policy.cc')
Source('vector_register_file.cc')
Source('wavefront.cc')

DebugFlag('GPUAgentDisp')
DebugFlag('GPUCoalescer')
DebugFlag('GPUCommandProc')
DebugFlag('GPUDriver')
DebugFlag('GPUInitAbi')
DebugFlag('GPUDisp')
DebugFlag('GPUExec')
DebugFlag('GPUFetch')
DebugFlag('GPUInst')
DebugFlag('GPUKernelInfo')
DebugFlag('GPUMem')
DebugFlag('GPUPort')
DebugFlag('GPUPrefetch')
DebugFlag('GPUReg')
DebugFlag('GPURename')
DebugFlag('GPURF')
DebugFlag('GPURfState')
DebugFlag('GPUSched')
DebugFlag('GPUShader')
DebugFlag('GPUSRF')
DebugFlag('GPUSync')
DebugFlag('GPUTLB')
DebugFlag('GPUVRF')
DebugFlag('GPUVRFSched')
DebugFlag('GPUWgLatency')
DebugFlag('Predictor')
DebugFlag('WavefrontStack')

CompoundFlag('GPUALL', ['GPUCoalescer', 'GPUDisp', 'GPUExec', 'GPUFetch',
                        'GPUMem', 'GPUPort', 'GPUSched', 'GPUSRF', 'GPUSync',
                        'GPUTLB', 'GPUVRF', 'GPUWgLatency', 'GPUKernelInfo',
                        'GPUInitAbi'])
