project('webrtc-audio-processing', 'c', 'cpp', version : '1.1', meson_version : '>= 0.54', default_options : [ 'warning_level=1', 'buildtype=debugoptimized', 'c_std=c11', 'cpp_std=c++14', ] ) version_split = meson.project_version().split('.') # This will be incremented each time a breaking API change occurs major_version = version_split[0] # This will be incremented when there are backwards-compatible changes minor_version = version_split[1] # We maintain per-package versions to not have to break API for one if only the # other has breaking changes apm_major_version = major_version apm_minor_version = minor_version apm_version = apm_major_version + '.' + apm_minor_version apm_project_name = 'webrtc-audio-processing-' + apm_major_version ac_major_version = major_version ac_minor_version = minor_version ac_version = ac_major_version + '.' + ac_minor_version ac_project_name = 'webrtc-audio-coding-' + ac_major_version include_subdir = apm_project_name cc = meson.get_compiler('c') cpp = meson.get_compiler('cpp') host_system = host_machine.system() platform_cflags = [] os_cflags = [] os_deps = [] have_posix = false have_win = false absl_dep = dependency('absl', method : 'cmake', modules : [ 'absl::base', 'absl::flags_parse', 'absl::strings', 'absl::synchronization', ] ) if ['darwin', 'ios'].contains(host_system) os_cflags = ['-DWEBRTC_MAC'] if host_system == 'ios' os_cflags += ['-DWEBRTC_IOS'] endif have_posix = true elif host_system == 'android' os_cflags += ['-DWEBRTC_ANDROID', '-DWEBRTC_LINUX'] os_deps += [cc.find_library('log')] os_deps += [dependency('gnustl', required : get_option('gnustl'))] have_posix = true elif host_system == 'linux' os_cflags += ['-DWEBRTC_LINUX', '-DWEBRTC_THREAD_RR'] os_deps += [cc.find_library('rt', required : false)] os_deps += [dependency('threads')] have_posix = true elif host_system == 'windows' platform_cflags += ['-DWEBRTC_WIN', '-D_WIN32', '-U__STRICT_ANSI__'] os_deps += [cc.find_library('winmm')] have_win = true endif if have_posix platform_cflags += ['-DWEBRTC_POSIX'] endif arch_cflags = [] have_arm = false have_armv7 = false have_neon = false have_mips = false have_mips64 = false have_x86 = false have_avx2 = false if ['arm', 'armv7'].contains(host_machine.cpu_family()) if cc.compiles('''#ifdef __ARM_ARCH_ISA_ARM #error no arm arch #endif''') have_arm = true arch_cflags += ['-DWEBRTC_ARCH_ARM'] endif if cc.compiles('''#ifndef __ARM_ARCH_7A__ #error no armv7 arch #endif''') have_armv7 = true arch_cflags += ['-DWEBRTC_ARCH_ARM_V7'] endif endif if cc.compiles('''#ifndef __aarch64__ #error no aarch64 arch #endif''') have_neon = true arch_cflags += ['-DWEBRTC_ARCH_ARM64', '-DWEBRTC_HAS_NEON'] endif if ['mips', 'mips64'].contains(host_machine.cpu_family()) have_mips = true arch_cflags += ['WEBRTC_ARCH_MIPS_FAMILY'] endif if host_machine.cpu_family() == 'mips64' have_mips64 = true endif if ['x86', 'x86_64'].contains(host_machine.cpu_family()) have_x86 = true # This is unconditionally enabled for now, actual usage is determined by # runtime CPU detection, so we're just assuming the compiler supports avx2 have_avx2 = true arch_cflags += ['-DWEBRTC_ENABLE_AVX2'] endif neon_opt = get_option('neon') if neon_opt != 'no' if neon_opt != 'runtime' if cc.compiles('#include ', args : '-mfpu=neon') arch_cflags += ['-mfpu=neon', '-DWEBRTC_HAS_NEON'] have_neon = true endif else neon_opt += ['-DWEBRTC_DETECT_NEON', '-mfpu=neon'] have_neon = true endif endif common_cflags = [ '-DWEBRTC_LIBRARY_IMPL', '-DWEBRTC_ENABLE_SYMBOL_EXPORT', '-DNDEBUG' ] + platform_cflags + os_cflags + arch_cflags common_cxxflags = common_cflags common_deps = os_deps + [absl_dep] webrtc_inc = include_directories('.') subdir('webrtc') pkgconfig = import('pkgconfig') pkgconfig.generate( name: apm_project_name, description: 'WebRTC Audio Processing library', version: apm_major_version + '.' + apm_minor_version, filebase: apm_project_name, subdirs: include_subdir, extra_cflags: [ '-DWEBRTC_LIBRARY_IMPL', ] + platform_cflags, libraries: libwebrtc_audio_processing, ) audio_processing_dep = declare_dependency(link_with : libwebrtc_audio_processing, include_directories : [webrtc_inc]) meson.override_dependency(apm_project_name, audio_processing_dep) pkgconfig.generate( name: ac_project_name, description: 'WebRTC Audio Coding library', version: ac_major_version + '.' + ac_minor_version, filebase: ac_project_name, subdirs: include_subdir, extra_cflags: [ '-DWEBRTC_LIBRARY_IMPL', ] + platform_cflags, libraries: libwebrtc_audio_coding, ) audio_coding_dep = declare_dependency(link_with : libwebrtc_audio_coding, include_directories : [webrtc_inc]) meson.override_dependency(ac_project_name, audio_coding_dep)