project('webrtc-audio-processing-1', 'c', 'cpp', version : '1.0', meson_version : '>= 0.52', 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 = meson.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 = [ cpp.find_library('absl_base'), cpp.find_library('absl_bad_optional_access'), cpp.find_library('absl_flags_internal'), cpp.find_library('absl_flags_marshalling'), cpp.find_library('absl_flags_parse'), cpp.find_library('absl_flags_registry'), cpp.find_library('absl_flags_usage_internal'), cpp.find_library('absl_raw_logging_internal'), cpp.find_library('absl_strings'), cpp.find_library('absl_synchronization'), cpp.find_library('absl_throw_delegate'), ] 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, ) 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, )