Import('env')

# 
# Auxiliary modules
#

SConscript('auxiliary/SConscript')

#
# Drivers
#

# These are common and work across all platforms
SConscript([
    'drivers/galahad/SConscript',
    'drivers/identity/SConscript',
    'drivers/llvmpipe/SConscript',
    'drivers/rbug/SConscript',
    'drivers/softpipe/SConscript',
    'drivers/svga/SConscript',
    'drivers/trace/SConscript',
])

if not env['msvc']:
    # These drivers do not build on MSVC compilers
    SConscript([
        'drivers/i915/SConscript',
    ])

#
# State trackers
#

# Needed by some state trackers
SConscript('winsys/sw/null/SConscript')

if not env['embedded']:
    SConscript('state_trackers/vega/SConscript')
    if env['platform'] not in ('cygwin', 'darwin', 'haiku', 'sunos'):
        SConscript('state_trackers/egl/SConscript')

    if env['x11']:
        SConscript('state_trackers/glx/xlib/SConscript')

    if env['dri']:
        SConscript('state_trackers/dri/SConscript')

    if env['dri'] and env['xorg']:
        SConscript('state_trackers/xorg/SConscript')

    if env['platform'] == 'windows':
        SConscript('state_trackers/wgl/SConscript')

#
# Winsys
# 

SConscript([
    'winsys/sw/wrapper/SConscript',
])
    
if env['x11']:
    SConscript([
        'winsys/sw/xlib/SConscript',
    ])

if env['platform'] == 'windows':
    SConscript([
        'winsys/sw/gdi/SConscript',
    ])

if not env['msvc']:
    SConscript([
        'winsys/i915/sw/SConscript',
    ])

if env['platform'] == 'haiku':
    SConscript([
        'winsys/sw/hgl/SConscript',
    ])

if env['dri']:
    SConscript([
        'winsys/sw/dri/SConscript',
    ])

    SConscript([
        'winsys/svga/drm/SConscript',
    ])

    if env['drm_intel']:
        SConscript([
            'winsys/i915/drm/SConscript',
        ])

#
# Targets
#

SConscript([
    'targets/graw-null/SConscript',
])

if not env['embedded']:
    if env['platform'] not in ('cygwin', 'darwin', 'freebsd', 'haiku', 'sunos'):
        SConscript([
            'targets/egl-static/SConscript'
        ])

    if env['x11']:
        SConscript([
            'targets/graw-xlib/SConscript',
            'targets/libgl-xlib/SConscript',
        ])

    if env['platform'] == 'windows':
        SConscript([
            'targets/graw-gdi/SConscript',
            'targets/libgl-gdi/SConscript',
        ])

    if env['platform'] == 'haiku':
        SConscript([
            'targets/haiku-softpipe/SConscript',
            'targets/libgl-haiku/SConscript',
        ])

    if env['dri']:
        SConscript([
            'targets/SConscript.dri',
            'targets/dri-swrast/SConscript',
            'targets/dri-vmwgfx/SConscript',
        ])
        if env['drm_intel']:
            SConscript([
                'targets/dri-i915/SConscript',
            ])

    if env['xorg'] and env['drm']:
        SConscript([
            #'targets/xorg-i915/SConscript',
        ])


#
# Unit tests & tools
#

if not env['embedded']:
    SConscript('tests/unit/SConscript')
    SConscript('tests/graw/SConscript')
