meson.build (9258B)
1 project('libsodium', 'c', 2 default_options : [ 3 'warning_level=0', 4 'optimization=2', 5 ], 6 ) 7 8 fs = import('fs') 9 10 c_compiler = meson.get_compiler('c') 11 12 compile_args = [] 13 14 # passed to (some) compiler checks 15 check_args = [] 16 17 add_project_arguments('-D_GNU_SOURCE', language: 'c') 18 19 if host_machine.endian() == 'little' 20 add_project_arguments('-DNATIVE_LITTLE_ENDIAN', language: 'c') 21 check_args += '-DNATIVE_LITTLE_ENDIAN' 22 else 23 add_project_arguments('-DNATIVE_BIG_ENDIAN', language: 'c') 24 check_args += '-DNATIVE_BIG_ENDIAN' 25 endif 26 27 if c_compiler.has_header('alloca.h') 28 add_project_arguments('-DHAVE_ALLOCA_H', language: 'c') 29 endif 30 31 if c_compiler.has_function('alloca') 32 add_project_arguments('-DHAVE_ALLOCA', language: 'c') 33 endif 34 35 if c_compiler.has_function('arc4random') 36 add_project_arguments('-DHAVE_ARC4RANDOM', language: 'c') 37 endif 38 39 if c_compiler.has_function('arc4random_buf') 40 add_project_arguments('-DHAVE_ARC4RANDOM_BUF', language: 'c') 41 endif 42 43 # FIXME: actually check! 44 add_project_arguments('-DHAVE_C_VARARRAYS', language: 'c') 45 46 message('check args', check_args) 47 48 add_project_arguments('-DHAVE_PTHREADS', language: 'c') 49 50 add_project_arguments('-DFORTIFY_SOURCE=2', language: 'c') 51 52 if get_option('arch_opt') 53 compile_args += c_compiler.get_supported_arguments( 54 '-Ofast', 55 '-ftree-vectorize', 56 '-ftree-slp-vectorize', 57 '-fomit-frame-pointer', 58 '-march=native', 59 ) 60 endif 61 62 have_rdrand = c_compiler.compiles(fs.read('checkprogs/rdrand.c'), args : ['-mrdrnd']) 63 message('have_rdrand:', have_rdrand) 64 if have_rdrand 65 compile_args += '-mrdrnd' 66 add_project_arguments('-DHAVE_RDRAND', language: 'c') 67 endif 68 69 have_mmx = c_compiler.compiles(fs.read('checkprogs/mmx.c'), args : ['-mmmx']) 70 message('have_mmx:', have_mmx) 71 if have_mmx 72 compile_args += '-mmmx' 73 add_project_arguments('-DHAVE_MMX', language: 'c') 74 endif 75 76 if c_compiler.compiles('checkprogs/inline_asm.c') 77 add_project_arguments('-DHAVE_INLINE_ASM', language: 'c') 78 endif 79 80 have_ti_mode = c_compiler.compiles(fs.read('checkprogs/ti_mode.c'), args : check_args) 81 message('have TI mode:', have_ti_mode) 82 if have_ti_mode 83 add_project_arguments('-DHAVE_TI_MODE', language: 'c') 84 endif 85 86 have_cpuid = c_compiler.compiles(fs.read('checkprogs/cpuid.c')) 87 message('have cpuid:', have_cpuid) 88 89 if have_cpuid 90 add_project_arguments('-DHAVE_CPUID', language: 'c') 91 endif 92 93 have_amd64_asm = c_compiler.compiles(fs.read('checkprogs/amd64_asm.c')) 94 message('have_amd64_asm:', have_amd64_asm) 95 if have_amd64_asm 96 add_project_arguments('-DHAVE_AMD64_ASM', language: 'c') 97 endif 98 99 have_avx_asm = c_compiler.compiles(fs.read('checkprogs/avx_asm.c')) 100 message('have_avx_asm:', have_avx_asm) 101 if have_avx_asm 102 add_project_arguments('-DHAVE_AVX_ASM', language: 'c') 103 endif 104 105 have_xgetbv = c_compiler.compiles(fs.read('checkprogs/xgetbv.c')) 106 message('have_xgetbv', have_xgetbv) 107 if have_xgetbv 108 add_project_arguments('-DHAVE__XGETBV', language: 'c') 109 endif 110 111 compile_args += c_compiler.get_supported_arguments( 112 '-fno-strict-aliasing', 113 ) 114 115 compile_args += c_compiler.first_supported_argument( 116 '-fno-strict-overflow', 117 '-fwrapv', 118 ) 119 120 add_project_arguments(compile_args, language: 'c') 121 122 add_project_arguments('-DCONFIGURED', language: 'c') 123 124 125 conf_data = configuration_data() 126 conf_data.set('VERSION', '1.0.20') 127 conf_data.set('SODIUM_LIBRARY_VERSION_MAJOR', 26) 128 conf_data.set('SODIUM_LIBRARY_VERSION_MINOR', 2) 129 conf_data.set('SODIUM_LIBRARY_MINIMAL_DEF', '') 130 subdir('src/libsodium/include/sodium') 131 132 libsodium_base_src = [ 133 'src/libsodium/crypto_aead/aegis128l/aead_aegis128l.c', 134 'src/libsodium/crypto_aead/aegis128l/aegis128l_soft.c', 135 'src/libsodium/crypto_aead/aegis256/aead_aegis256.c', 136 'src/libsodium/crypto_aead/aegis256/aegis256_soft.c', 137 'src/libsodium/crypto_aead/aes256gcm/aead_aes256gcm.c', 138 'src/libsodium/crypto_aead/chacha20poly1305/aead_chacha20poly1305.c', 139 'src/libsodium/crypto_aead/xchacha20poly1305/aead_xchacha20poly1305.c', 140 'src/libsodium/crypto_auth/crypto_auth.c', 141 'src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c', 142 'src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c', 143 'src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256.c', 144 'src/libsodium/crypto_box/crypto_box.c', 145 'src/libsodium/crypto_box/crypto_box_easy.c', 146 'src/libsodium/crypto_box/crypto_box_seal.c', 147 'src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c', 148 'src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c', 149 'src/libsodium/crypto_core/hchacha20/core_hchacha20.c', 150 'src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c', 151 'src/libsodium/crypto_core/hsalsa20/core_hsalsa20.c', 152 'src/libsodium/crypto_core/salsa/ref/core_salsa_ref.c', 153 'src/libsodium/crypto_core/softaes/softaes.c', 154 'src/libsodium/crypto_generichash/crypto_generichash.c', 155 'src/libsodium/crypto_generichash/blake2b/generichash_blake2.c', 156 'src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.c', 157 'src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.c', 158 'src/libsodium/crypto_generichash/blake2b/ref/generichash_blake2b.c', 159 'src/libsodium/crypto_hash/crypto_hash.c', 160 'src/libsodium/crypto_hash/sha256/hash_sha256.c', 161 'src/libsodium/crypto_hash/sha256/cp/hash_sha256_cp.c', 162 'src/libsodium/crypto_hash/sha512/hash_sha512.c', 163 'src/libsodium/crypto_hash/sha512/cp/hash_sha512_cp.c', 164 'src/libsodium/crypto_kdf/blake2b/kdf_blake2b.c', 165 'src/libsodium/crypto_kdf/crypto_kdf.c', 166 'src/libsodium/crypto_kdf/hkdf/kdf_hkdf_sha256.c', 167 'src/libsodium/crypto_kdf/hkdf/kdf_hkdf_sha512.c', 168 'src/libsodium/crypto_kx/crypto_kx.c', 169 'src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c', 170 'src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c', 171 'src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.c', 172 'src/libsodium/crypto_pwhash/argon2/argon2-core.c', 173 'src/libsodium/crypto_pwhash/argon2/argon2-encoding.c', 174 'src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c', 175 'src/libsodium/crypto_pwhash/argon2/argon2.c', 176 'src/libsodium/crypto_pwhash/argon2/blake2b-long.c', 177 'src/libsodium/crypto_pwhash/argon2/pwhash_argon2i.c', 178 'src/libsodium/crypto_pwhash/argon2/pwhash_argon2id.c', 179 'src/libsodium/crypto_pwhash/crypto_pwhash.c', 180 'src/libsodium/crypto_scalarmult/crypto_scalarmult.c', 181 'src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c', 182 'src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.c', 183 'src/libsodium/crypto_secretbox/crypto_secretbox.c', 184 'src/libsodium/crypto_secretbox/crypto_secretbox_easy.c', 185 'src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305.c', 186 'src/libsodium/crypto_secretstream/xchacha20poly1305/secretstream_xchacha20poly1305.c', 187 'src/libsodium/crypto_shorthash/crypto_shorthash.c', 188 'src/libsodium/crypto_shorthash/siphash24/shorthash_siphash24.c', 189 'src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24_ref.c', 190 'src/libsodium/crypto_sign/crypto_sign.c', 191 'src/libsodium/crypto_sign/ed25519/sign_ed25519.c', 192 'src/libsodium/crypto_sign/ed25519/ref10/keypair.c', 193 'src/libsodium/crypto_sign/ed25519/ref10/open.c', 194 'src/libsodium/crypto_sign/ed25519/ref10/sign.c', 195 'src/libsodium/crypto_stream/chacha20/stream_chacha20.c', 196 'src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.c', 197 'src/libsodium/crypto_stream/crypto_stream.c', 198 'src/libsodium/crypto_stream/salsa20/stream_salsa20.c', 199 'src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.c', 200 'src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20.c', 201 'src/libsodium/crypto_verify/verify.c', 202 'src/libsodium/randombytes/randombytes.c', 203 'src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c', 204 'src/libsodium/sodium/codecs.c', 205 'src/libsodium/sodium/core.c', 206 'src/libsodium/sodium/runtime.c', 207 'src/libsodium/sodium/utils.c', 208 'src/libsodium/sodium/version.c', 209 ] 210 211 libsodium_avx_src = [ 212 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts_namespace.h', 213 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c', 214 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.h', 215 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe.h', 216 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51.h', 217 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_invert.c', 218 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_namespace.h', 219 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c', 220 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.h', 221 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_namespace.h', 222 'src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S', 223 ] 224 225 libsodium_amd64_src = [ 226 'src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S', 227 'src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.c', 228 'src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.h', 229 ] 230 231 libsodium_all_src = [] 232 libsodium_all_src += libsodium_base_src 233 234 if have_avx_asm 235 libsodium_all_src += libsodium_avx_src 236 endif 237 238 if have_amd64_asm 239 libsodium_all_src += libsodium_amd64_src 240 endif 241 242 libsodium = static_library('sodium', libsodium_all_src, 243 include_directories:['src/libsodium/include/sodium']) 244 245 sodium_dep = declare_dependency( 246 include_directories : ['src/libsodium/include'], 247 link_with : [libsodium], 248 )