{
  "errno": {
    "LIBC_CONF_ERRNO_MODE": {
      "value": "",
      "doc": "The implementation used for errno, acceptable values are LIBC_ERRNO_MODE_UNDEFINED, LIBC_ERRNO_MODE_THREAD_LOCAL, LIBC_ERRNO_MODE_SHARED, LIBC_ERRNO_MODE_EXTERNAL, and LIBC_ERRNO_MODE_SYSTEM."
    }
  },
  "printf": {
    "LIBC_CONF_PRINTF_DISABLE_FLOAT": {
      "value": false,
      "doc": "Disable printing floating point values in printf and friends."
    },
    "LIBC_CONF_PRINTF_DISABLE_INDEX_MODE": {
      "value": false,
      "doc": "Disable index mode in the printf format string."
    },
    "LIBC_CONF_PRINTF_DISABLE_WRITE_INT": {
      "value": false,
      "doc": "Disable handling of %n in printf format string."
    },
    "LIBC_CONF_PRINTF_FLOAT_TO_STR_USE_MEGA_LONG_DOUBLE_TABLE": {
      "value": false,
      "doc": "Use large table for better printf long double performance."
    },
    "LIBC_CONF_PRINTF_DISABLE_FIXED_POINT": {
      "value": false,
      "doc": "Disable printing fixed point values in printf and friends."
    }
  },
  "scanf": {
    "LIBC_CONF_SCANF_DISABLE_FLOAT": {
      "value": false,
      "doc": "Disable parsing floating point values in scanf and friends."
    },
    "LIBC_CONF_SCANF_DISABLE_INDEX_MODE": {
      "value": false,
      "doc": "Disable index mode in the scanf format string."
    }
  },
  "string": {
    "LIBC_CONF_STRING_UNSAFE_WIDE_READ": {
      "value": false,
      "doc": "Read more than a byte at a time to perform byte-string operations like strlen."
    },
    "LIBC_CONF_MEMSET_X86_USE_SOFTWARE_PREFETCHING": {
      "value": false,
      "doc": "Inserts prefetch for write instructions (PREFETCHW) for memset on x86 to recover performance when hardware prefetcher is disabled."
    }
  },
  "codegen": {
    "LIBC_CONF_KEEP_FRAME_POINTER": {
      "value": true,
      "doc": "Keep frame pointer in functions for better debugging experience."
    },
    "LIBC_CONF_ENABLE_STRONG_STACK_PROTECTOR": {
      "value": true,
      "doc": "Enable -fstack-protector-strong to defend against stack smashing attack."
    }
  },
  "pthread": {
    "LIBC_CONF_TIMEOUT_ENSURE_MONOTONICITY": {
      "value": true,
      "doc": "Automatically adjust timeout to CLOCK_MONOTONIC (default to true). POSIX API may require CLOCK_REALTIME, which can be unstable and leading to unexpected behavior. This option will convert the real-time timestamp to monotonic timestamp relative to the time of call."
    },
    "LIBC_CONF_RAW_MUTEX_DEFAULT_SPIN_COUNT": {
      "value": 100,
      "doc": "Default number of spins before blocking if a mutex is in contention (default to 100)."
    },
    "LIBC_CONF_RWLOCK_DEFAULT_SPIN_COUNT": {
      "value": 100,
      "doc": "Default number of spins before blocking if a rwlock is in contention (default to 100)."
    }
  },
  "malloc": {
    "LIBC_CONF_FREELIST_MALLOC_BUFFER_SIZE": {
      "value": 1073741824,
      "doc": "Default size for the constinit freelist buffer used for the freelist malloc implementation (default 1o 1GB)."
    }
  },
  "unistd": {
    "LIBC_CONF_ENABLE_TID_CACHE": {
      "value": true,
      "doc": "Enable caching mechanism for gettid to avoid syscall (only effective in fullbuild mode, default to true). Please refer to Undefined Behavior documentation for implications."
    },
    "LIBC_CONF_ENABLE_PID_CACHE": {
      "value": true,
      "doc": "Enable caching mechanism for getpid to avoid syscall (default to true). Please refer to Undefined Behavior documentation for implications."
    }
  },
  "math": {
    "LIBC_CONF_MATH_OPTIMIZATIONS": {
      "value": 0,
      "doc": "Configures optimizations for math functions. Values accepted are LIBC_MATH_SKIP_ACCURATE_PASS, LIBC_MATH_SMALL_TABLES, LIBC_MATH_NO_ERRNO, LIBC_MATH_NO_EXCEPT, and LIBC_MATH_FAST."
    }
  },
  "qsort": {
    "LIBC_CONF_QSORT_IMPL": {
      "value": "LIBC_QSORT_QUICK_SORT",
      "doc": "Configures sorting algorithm for qsort and qsort_r. Values accepted are LIBC_QSORT_QUICK_SORT, LIBC_QSORT_HEAP_SORT."
    }
  }
}