def build(bld):
    speex_sources = [
        'speex/libspeex/bits.c',
        'speex/libspeex/cb_search.c',
        'speex/libspeex/exc_10_16_table.c',
        'speex/libspeex/exc_10_32_table.c',
        'speex/libspeex/exc_20_32_table.c',
        'speex/libspeex/exc_5_256_table.c',
        'speex/libspeex/exc_5_64_table.c',
        'speex/libspeex/exc_8_128_table.c',
        'speex/libspeex/filters.c',
        'speex/libspeex/gain_table.c',
        'speex/libspeex/gain_table_lbr.c',
        'speex/libspeex/hexc_10_32_table.c',
        'speex/libspeex/hexc_table.c',
        'speex/libspeex/high_lsp_tables.c',
        'speex/libspeex/kiss_fft.c',
        'speex/libspeex/kiss_fftr.c',
        'speex/libspeex/lpc.c',
        'speex/libspeex/lsp.c',
        'speex/libspeex/lsp_tables_nb.c',
        'speex/libspeex/ltp.c',
        'speex/libspeex/modes.c',
        'speex/libspeex/modes_wb.c',  # Enable wideband for 16kHz voice support
        'speex/libspeex/nb_celp.c',
        'speex/libspeex/quant_lsp.c',
        'speex/libspeex/sb_celp.c',  # Enable sub-band CELP for wideband support
        'speex/libspeex/smallft.c',
        'speex/libspeex/speex.c',
        'speex/libspeex/speex_callbacks.c',
        'speex/libspeex/speex_header.c',
        'speex/libspeex/stereo.c',  # Enable stereo encoding/decoding support
        'speex/libspeex/vbr.c',
        'speex/libspeex/vorbis_psy.c',
        'speex/libspeex/vq.c',
        'speex/libspeex/window.c',
    ]

    speex_includes = [
        '.',  # Include current directory for config.h
        'speex/include',  # Then include submodule includes
        'speex/libspeex',
    ]

    # Define necessary macros for Speex
    speex_defines = [
        'HAVE_CONFIG_H',
        'OS_SUPPORT_CUSTOM',  # Use custom OS support functions
        'FIXED_POINT',  # Use fixed-point math for embedded systems
        'DISABLE_FLOAT_API',  # Disable floating-point API
        'DISABLE_VBR',  # Disable variable bit rate if not needed
        'DISABLE_WARNINGS',  # Disable warning functions
        'DISABLE_NOTIFICATIONS',  # Disable notification functions
    ]

    # Define stack sizes for encoder and decoder
    speex_defines += [
        'NB_ENC_STACK=(2000*sizeof(spx_sig_t))',  # ~8 KiB
        'NB_DEC_STACK=(1500*sizeof(spx_sig_t))',  # ~6 KiB
    ]

    # Compiler flags to handle warnings
    speex_cflags = [
        '-Wno-implicit-function-declaration',
        '-Wno-builtin-declaration-mismatch'
    ]

    bld(export_includes=speex_includes, name='speex_includes')

    bld.stlib(source=speex_sources,
              includes=speex_includes,
              export_includes=speex_includes,
              defines=speex_defines,
              cflags=speex_cflags,
              target='speex',
              use=['pblibc'])
