# Copyright © 2017 Intel Corporation

# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:

# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

option(
  'platforms',
  type : 'string',
  value : 'x11,wayland,drm,surfaceless',
  description : 'comma separated list of window systems to support. wayland, x11, surfaceless, drm, etc.'
)
option(
  'dri3',
  type : 'combo',
  value : 'auto',
  choices : ['auto', 'true', 'false'],
  description : 'enable support for dri3'
)
option(
  'dri-drivers',
  type : 'string',
  value : 'i915,i965,r100,r200,nouveau',
  description : 'comma separated list of dri drivers to build.'
)
option(
  'dri-drivers-path',
  type : 'string',
  value : '',
  description : 'Location of dri drivers. Default: $libdir/dri.'
)
option(
  'gallium-drivers',
  type : 'string',
  value : 'pl111,radeonsi,nouveau,freedreno,swrast,vc4,etnaviv,imx',
  description : 'comma separated list of gallium drivers to build.'
)
option(
  'gallium-media',
  type : 'string',
  value : '',
  description : 'comma separated list of gallium media APIs to build (omx,va,vdpau,xvmc).'
)
option(
  'vulkan-drivers',
  type : 'string',
  value : 'intel,amd',
  description : 'comma separated list of vulkan drivers to build.'
)
option(
  'shader-cache',
  type : 'boolean',
  value : true,
  description : 'Build with on-disk shader cache support'
)
option(
  'vulkan-icd-dir',
  type : 'string',
  value : '',
  description : 'Location relative to prefix to put vulkan icds on install. Default: $datadir/vulkan/icd.d'
)
option(
  'shared-glapi',
  type : 'boolean',
  value : true,
  description : 'Whether to build a shared or static glapi'
)
option(
  'gles1',
  type : 'boolean',
  value : true,
  description : 'Build support for OpenGL ES 1.x'
)
option(
  'gles2',
  type : 'boolean',
  value : true,
  description : 'Build support for OpenGL ES 2.x and 3.x'
)
option(
  'opengl',
  type : 'boolean',
  value : true,
  description : 'Build support for OpenGL (all versions)'
)
option(
  'gbm',
  type : 'combo',
  value : 'auto',
  choices : ['auto', 'true', 'false'],
  description : 'Build support for gbm platform'
)
option(
  'glx',
  type : 'combo',
  value : 'auto',
  choices : ['auto', 'disabled', 'dri', 'xlib', 'gallium-xlib'],
  description : 'Build support for GLX platform'
)
option(
  'egl',
  type : 'combo',
  value : 'auto',
  choices : ['auto', 'true', 'false'],
  description : 'Build support for EGL platform'
)
option(
  'glvnd',
  type : 'boolean',
  value : false,
  description : 'Enable GLVND support.'
)
option(
  'asm',
  type : 'boolean',
  value : true,
  description : 'Build assembly code if possible'
)
option(
  'llvm',
  type : 'boolean',
  value : true,
  description : 'Build with LLVM support.'
)
option(
  'valgrind',
  type : 'combo',
  value : 'auto',
  choices : ['auto', 'true', 'false'],
  description : 'Build with valgrind support'
)
option(
  'libunwind',
  type : 'combo',
  value : 'auto',
  choices : ['auto', 'true', 'false'],
  description : 'Use libunwind for stack-traces'
)
option(
  'build-tests',
  type : 'boolean',
  value : false,
  description : 'Build unit tests. Currently this will build *all* unit tests, which may build more than expected.'
)
option(
  'texture-float',
  type : 'boolean',
  value : false,
  description : 'Enable floating point textures and renderbuffers. This option may be patent encumbered, please read docs/patents.txt and consult with your lawyer before turning this on.'
)
option(
  'selinux',
  type : 'boolean',
  value : false,
  description : 'Build an SELinux-aware Mesa'
)
option(
  'osmesa',
  type : 'combo',
  value : 'none',
  choices : ['none', 'classic', 'gallium'],
  description : 'Build OSmesa.'
)
option(
  'osmesa-bits',
  type : 'combo',
  value : '8',
  choices : ['8', '16', '32'],
  description : 'Number of channel bits for OSMesa.'
)
