project('libsodium', 'c', default_options : [ 'warning_level=0', 'optimization=2', ], ) fs = import('fs') c_compiler = meson.get_compiler('c') compile_args = [] # passed to (some) compiler checks check_args = [] add_project_arguments('-D_GNU_SOURCE', language: 'c') if host_machine.endian() == 'little' add_project_arguments('-DNATIVE_LITTLE_ENDIAN', language: 'c') check_args += '-DNATIVE_LITTLE_ENDIAN' else add_project_arguments('-DNATIVE_BIG_ENDIAN', language: 'c') check_args += '-DNATIVE_BIG_ENDIAN' endif if c_compiler.has_header('alloca.h') add_project_arguments('-DHAVE_ALLOCA_H', language: 'c') endif if c_compiler.has_function('alloca') add_project_arguments('-DHAVE_ALLOCA', language: 'c') endif if c_compiler.has_function('arc4random') add_project_arguments('-DHAVE_ARC4RANDOM', language: 'c') endif if c_compiler.has_function('arc4random_buf') add_project_arguments('-DHAVE_ARC4RANDOM_BUF', language: 'c') endif # FIXME: actually check! add_project_arguments('-DHAVE_C_VARARRAYS', language: 'c') message('check args', check_args) add_project_arguments('-DHAVE_PTHREADS', language: 'c') add_project_arguments('-DFORTIFY_SOURCE=2', language: 'c') if get_option('arch_opt') compile_args += c_compiler.get_supported_arguments( '-Ofast', '-ftree-vectorize', '-ftree-slp-vectorize', '-fomit-frame-pointer', '-march=native', ) endif have_rdrand = c_compiler.compiles(fs.read('checkprogs/rdrand.c'), args : ['-mrdrnd']) message('have_rdrand:', have_rdrand) if have_rdrand compile_args += '-mrdrnd' add_project_arguments('-DHAVE_RDRAND', language: 'c') endif have_mmx = c_compiler.compiles(fs.read('checkprogs/mmx.c'), args : ['-mmmx']) message('have_mmx:', have_mmx) if have_mmx compile_args += '-mmmx' add_project_arguments('-DHAVE_MMX', language: 'c') endif if c_compiler.compiles('checkprogs/inline_asm.c') add_project_arguments('-DHAVE_INLINE_ASM', language: 'c') endif have_ti_mode = c_compiler.compiles(fs.read('checkprogs/ti_mode.c'), args : check_args) message('have TI mode:', have_ti_mode) if have_ti_mode add_project_arguments('-DHAVE_TI_MODE', language: 'c') endif have_cpuid = c_compiler.compiles(fs.read('checkprogs/cpuid.c')) message('have cpuid:', have_cpuid) if have_cpuid add_project_arguments('-DHAVE_CPUID', language: 'c') endif have_amd64_asm = c_compiler.compiles(fs.read('checkprogs/amd64_asm.c')) message('have_amd64_asm:', have_amd64_asm) if have_amd64_asm add_project_arguments('-DHAVE_AMD64_ASM', language: 'c') endif have_avx_asm = c_compiler.compiles(fs.read('checkprogs/avx_asm.c')) message('have_avx_asm:', have_avx_asm) if have_avx_asm add_project_arguments('-DHAVE_AVX_ASM', language: 'c') endif have_xgetbv = c_compiler.compiles(fs.read('checkprogs/xgetbv.c')) message('have_xgetbv', have_xgetbv) if have_xgetbv add_project_arguments('-DHAVE__XGETBV', language: 'c') endif compile_args += c_compiler.get_supported_arguments( '-fno-strict-aliasing', ) compile_args += c_compiler.first_supported_argument( '-fno-strict-overflow', '-fwrapv', ) add_project_arguments(compile_args, language: 'c') add_project_arguments('-DCONFIGURED', language: 'c') conf_data = configuration_data() conf_data.set('VERSION', '1.0.18') conf_data.set('SODIUM_LIBRARY_VERSION_MAJOR', 10) conf_data.set('SODIUM_LIBRARY_VERSION_MINOR', 3) conf_data.set('SODIUM_LIBRARY_MINIMAL_DEF', '') subdir('src/libsodium/include/sodium') libsodium_base_src = [ 'src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c', 'src/libsodium/crypto_aead/xchacha20poly1305/sodium/aead_xchacha20poly1305.c', 'src/libsodium/crypto_auth/crypto_auth.c', 'src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c', 'src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c', 'src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256.c', 'src/libsodium/crypto_box/crypto_box.c', 'src/libsodium/crypto_box/crypto_box_easy.c', 'src/libsodium/crypto_box/crypto_box_seal.c', 'src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c', 'src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c', 'src/libsodium/crypto_core/hchacha20/core_hchacha20.c', 'src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c', 'src/libsodium/crypto_core/hsalsa20/core_hsalsa20.c', 'src/libsodium/crypto_core/salsa/ref/core_salsa_ref.c', 'src/libsodium/crypto_generichash/crypto_generichash.c', 'src/libsodium/crypto_generichash/blake2b/generichash_blake2.c', 'src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.c', 'src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.c', 'src/libsodium/crypto_generichash/blake2b/ref/generichash_blake2b.c', 'src/libsodium/crypto_hash/crypto_hash.c', 'src/libsodium/crypto_hash/sha256/hash_sha256.c', 'src/libsodium/crypto_hash/sha256/cp/hash_sha256_cp.c', 'src/libsodium/crypto_hash/sha512/hash_sha512.c', 'src/libsodium/crypto_hash/sha512/cp/hash_sha512_cp.c', 'src/libsodium/crypto_kdf/blake2b/kdf_blake2b.c', 'src/libsodium/crypto_kdf/crypto_kdf.c', 'src/libsodium/crypto_kx/crypto_kx.c', 'src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c', 'src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c', 'src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.c', 'src/libsodium/crypto_pwhash/argon2/argon2-core.c', 'src/libsodium/crypto_pwhash/argon2/argon2-encoding.c', 'src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c', 'src/libsodium/crypto_pwhash/argon2/argon2.c', 'src/libsodium/crypto_pwhash/argon2/blake2b-long.c', 'src/libsodium/crypto_pwhash/argon2/pwhash_argon2i.c', 'src/libsodium/crypto_pwhash/argon2/pwhash_argon2id.c', 'src/libsodium/crypto_pwhash/crypto_pwhash.c', 'src/libsodium/crypto_scalarmult/crypto_scalarmult.c', 'src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c', 'src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.c', 'src/libsodium/crypto_secretbox/crypto_secretbox.c', 'src/libsodium/crypto_secretbox/crypto_secretbox_easy.c', 'src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305.c', 'src/libsodium/crypto_secretstream/xchacha20poly1305/secretstream_xchacha20poly1305.c', 'src/libsodium/crypto_shorthash/crypto_shorthash.c', 'src/libsodium/crypto_shorthash/siphash24/shorthash_siphash24.c', 'src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24_ref.c', 'src/libsodium/crypto_sign/crypto_sign.c', 'src/libsodium/crypto_sign/ed25519/sign_ed25519.c', 'src/libsodium/crypto_sign/ed25519/ref10/keypair.c', 'src/libsodium/crypto_sign/ed25519/ref10/open.c', 'src/libsodium/crypto_sign/ed25519/ref10/sign.c', 'src/libsodium/crypto_stream/chacha20/stream_chacha20.c', 'src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.c', 'src/libsodium/crypto_stream/crypto_stream.c', 'src/libsodium/crypto_stream/salsa20/stream_salsa20.c', 'src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.c', 'src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20.c', 'src/libsodium/crypto_verify/sodium/verify.c', 'src/libsodium/randombytes/randombytes.c', 'src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c', 'src/libsodium/sodium/codecs.c', 'src/libsodium/sodium/core.c', 'src/libsodium/sodium/runtime.c', 'src/libsodium/sodium/utils.c', 'src/libsodium/sodium/version.c', ] libsodium_avx_src = [ 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts_namespace.h', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.h', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe.h', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51.h', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_invert.c', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_namespace.h', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.h', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base.h', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base_namespace.h', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_namespace.h', 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S', ] libsodium_amd64_src = [ 'src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S', 'src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.c', 'src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.h', ] libsodium_all_src = [] libsodium_all_src += libsodium_base_src if have_avx_asm libsodium_all_src += libsodium_avx_src endif if have_amd64_asm libsodium_all_src += libsodium_amd64_src endif libsodium = static_library('sodium', libsodium_all_src, include_directories:['src/libsodium/include/sodium']) sodium_dep = declare_dependency( include_directories : ['src/libsodium/include'], link_with : [libsodium], )