functions.cmake 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862
  1. function(add_option NAME HELP_STRING DEFAULT VALUES)
  2. list(FIND VALUES ${DEFAULT} IDX)
  3. if (${IDX} EQUAL -1)
  4. message(FATAL_ERROR "Failed to add option ${NAME}. Default value "
  5. "${DEFAULT} is not in list of possible values: ${VALUES}.")
  6. endif()
  7. if(DEFINED ${NAME})
  8. list(FIND VALUES ${${NAME}} IDX)
  9. if (${IDX} EQUAL -1)
  10. message(FATAL_ERROR "Failed to set option ${NAME}. Value "
  11. "${${NAME}} is not in list of possible values: ${VALUES}.")
  12. endif()
  13. endif()
  14. set(${NAME} ${DEFAULT} CACHE STRING ${HELP_STRING})
  15. set_property(CACHE ${NAME} PROPERTY STRINGS ${VALUES})
  16. endfunction()
  17. function(override_cache VAR VAL)
  18. get_property(VAR_TYPE CACHE ${VAR} PROPERTY TYPE)
  19. set(${VAR} ${VAL} CACHE ${VAR_TYPE} ${${VAR}_HELP_STRING} FORCE)
  20. endfunction()
  21. function(generate_build_flags)
  22. set(BUILD_DISTRO ${WOLFSSL_DISTRO} PARENT_SCOPE)
  23. set(BUILD_ALL ${WOLFSSL_ALL} PARENT_SCOPE)
  24. if(WOLFSSL_TLS13 OR WOLFSSL_USER_SETTINGS)
  25. set(BUILD_TLS13 "yes" PARENT_SCOPE)
  26. endif()
  27. if(WOLFSSL_RNG OR WOLFSSL_USER_SETTINGS)
  28. set(BUILD_RNG "yes" PARENT_SCOPE)
  29. endif()
  30. if(WOLFSSL_SCTP OR WOLFSSL_USER_SETTINGS)
  31. set(BUILD_SCTP "yes" PARENT_SCOPE)
  32. endif()
  33. set(BUILD_MCAST ${WOLFSSL_MCAST} PARENT_SCOPE)
  34. set(BUILD_IPV6 ${WOLFSSL_IPV6} PARENT_SCOPE)
  35. set(BUILD_LEAN_PSK ${WOLFSSL_LEAN_PSK} PARENT_SCOPE)
  36. set(BUILD_LEAN_TLS ${WOLFSSL_LEAN_TLS} PARENT_SCOPE)
  37. set(BUILD_LOWMEM ${WOLFSSL_LOWRESOURCE} PARENT_SCOPE)
  38. set(BUILD_PKCALLBACKS ${WOLFSSL_PKCALLBACKS} PARENT_SCOPE)
  39. set(BUILD_CRYPTOAUTHLIB ${WOLFSSL_CRYPTOAUTHLIB} PARENT_SCOPE)
  40. if(WOLFSSL_SNIFFER OR WOLFSSL_USER_SETTINGS)
  41. set(BUILD_SNIFFER "yes" PARENT_SCOPE)
  42. endif()
  43. set(BUILD_SNIFFTEST ${WOLFSSL_SNIFFTEST} PARENT_SCOPE)
  44. if(WOLFSSL_AESGCM OR WOLFSSL_USER_SETTINGS)
  45. set(BUILD_AESGCM "yes" PARENT_SCOPE)
  46. endif()
  47. if(WOLFSSL_AESCCM OR WOLFSSL_USER_SETTINGS)
  48. set(BUILD_AESCCM "yes" PARENT_SCOPE)
  49. endif()
  50. set(BUILD_ARM_ASM ${WOLFSSL_ARM_ASM} PARENT_SCOPE)
  51. set(BUILD_XILINX ${WOLFSSL_XILINX} PARENT_SCOPE)
  52. set(BUILD_AESNI ${WOLFSSL_AESNI} PARENT_SCOPE)
  53. set(BUILD_INTEL_ASM ${WOLFSSL_INTEL_ASM} PARENT_SCOPE)
  54. set(BUILD_AFALG ${WOLFSSL_AFALG} PARENT_SCOPE)
  55. set(BUILD_DEVCRYPTO ${WOLFSSL_DEVCRYPTO} PARENT_SCOPE)
  56. if(WOLFSSL_CAMELLIA OR WOLFSSL_USER_SETTINGS)
  57. set(BUILD_CAMELLIA "yes" PARENT_SCOPE)
  58. endif()
  59. if(WOLFSSL_MD2 OR WOLFSSL_USER_SETTINGS)
  60. set(BUILD_MD2 "yes" PARENT_SCOPE)
  61. endif()
  62. if(WOLFSSL_RIPEMD OR WOLFSSL_USER_SETTINGS)
  63. set(BUILD_RIPEMD "yes" PARENT_SCOPE)
  64. endif()
  65. if(WOLFSSL_BLAKE2 OR WOLFSSL_USER_SETTINGS)
  66. set(BUILD_BLAKE2 "yes" PARENT_SCOPE)
  67. endif()
  68. if(WOLFSSL_BLAKE2S OR WOLFSSL_USER_SETTINGS)
  69. set(BUILD_BLAKE2S "yes" PARENT_SCOPE)
  70. endif()
  71. if(WOLFSSL_SHA512 OR WOLFSSL_SHA384 OR WOLFSSL_USER_SETTINGS)
  72. set(BUILD_SHA512 "yes" PARENT_SCOPE)
  73. endif()
  74. if(WOLFSSL_DSA OR WOLFSSL_USER_SETTINGS)
  75. set(BUILD_DSA "yes" PARENT_SCOPE)
  76. endif()
  77. if(WOLFSSL_ECC OR WOLFSSL_USER_SETTINGS)
  78. set(BUILD_ECC "yes" PARENT_SCOPE)
  79. endif()
  80. if(WOLFSSL_ED25519 OR WOLFSSL_USER_SETTINGS)
  81. set(BUILD_ED25519 "yes" PARENT_SCOPE)
  82. endif()
  83. if(WOLFSSL_ED25519_SMALL OR WOLFSSL_USER_SETTINGS)
  84. set(BUILD_ED25519_SMALL "yes" PARENT_SCOPE)
  85. endif()
  86. if(WOLFSSL_FEMATH OR WOLFSSL_USER_SETTINGS)
  87. set(BUILD_FEMATH "yes" PARENT_SCOPE)
  88. endif()
  89. if(WOLFSSL_GEMATH OR WOLFSSL_USER_SETTINGS)
  90. set(BUILD_GEMATH "yes" PARENT_SCOPE)
  91. endif()
  92. if(WOLFSSL_CURVE25519 OR WOLFSSL_USER_SETTINGS)
  93. set(BUILD_CURVE25519 "yes" PARENT_SCOPE)
  94. endif()
  95. if(WOLFSSL_CURVE25519_SMALL OR WOLFSSL_USER_SETTINGS)
  96. set(BUILD_CURVE25519_SMALL "yes" PARENT_SCOPE)
  97. endif()
  98. if(WOLFSSL_ED448 OR WOLFSSL_USER_SETTINGS)
  99. set(BUILD_ED448 "yes" PARENT_SCOPE)
  100. endif()
  101. set(BUILD_ED448_SMALL ${WOLFSSL_ED448_SMALL} PARENT_SCOPE)
  102. if(WOLFSSL_FE448 OR WOLFSSL_USER_SETTINGS)
  103. set(BUILD_FE448 "yes" PARENT_SCOPE)
  104. endif()
  105. if(WOLFSSL_GE448 OR WOLFSSL_USER_SETTINGS)
  106. set(BUILD_GE448 "yes" PARENT_SCOPE)
  107. endif()
  108. if(WOLFSSL_CURVE448 OR WOLFSSL_USER_SETTINGS)
  109. set(BUILD_CURVE448 "yes" PARENT_SCOPE)
  110. endif()
  111. if(WOLFSSL_CURVE448_SMALL OR WOLFSSL_USER_SETTINGS)
  112. set(BUILD_CURVE448_SMALL "yes" PARENT_SCOPE)
  113. endif()
  114. if(WOLFSSL_MEMORY OR WOLFSSL_USER_SETTINGS)
  115. set(BUILD_MEMORY "yes" PARENT_SCOPE)
  116. endif()
  117. if(WOLFSSL_RSA OR WOLFSSL_USER_SETTINGS)
  118. set(BUILD_RSA "yes" PARENT_SCOPE)
  119. endif()
  120. if(WOLFSSL_DH OR WOLFSSL_USER_SETTINGS)
  121. set(BUILD_DH "yes" PARENT_SCOPE)
  122. endif()
  123. if(WOLFSSL_ASN OR WOLFSSL_USER_SETTINGS)
  124. set(BUILD_ASN "yes" PARENT_SCOPE)
  125. endif()
  126. if(WOLFSSL_AES OR WOLFSSL_USER_SETTINGS)
  127. set(BUILD_AES "yes" PARENT_SCOPE)
  128. endif()
  129. if(WOLFSSL_CODING OR WOLFSSL_USER_SETTINGS)
  130. set(BUILD_CODING "yes" PARENT_SCOPE)
  131. endif()
  132. if(WOLFSSL_IDEA OR WOLFSSL_USER_SETTINGS)
  133. set(BUILD_IDEA "yes" PARENT_SCOPE)
  134. endif()
  135. if(WOLFSSL_ARC4 OR WOLFSSL_USER_SETTINGS)
  136. set(BUILD_RC4 "yes" PARENT_SCOPE)
  137. endif()
  138. if(WOLFSSL_MD5 OR WOLFSSL_USER_SETTINGS)
  139. set(BUILD_MD5 "yes" PARENT_SCOPE)
  140. endif()
  141. if(WOLFSSL_SHA OR WOLFSSL_USER_SETTINGS)
  142. set(BUILD_SHA "yes" PARENT_SCOPE)
  143. endif()
  144. if(WOLFSSL_HC128 OR WOLFSSL_USER_SETTINGS)
  145. set(BUILD_HC128 "yes" PARENT_SCOPE)
  146. endif()
  147. if(WOLFSSL_RABBIT OR WOLFSSL_USER_SETTINGS)
  148. set(BUILD_RABBIT "yes" PARENT_SCOPE)
  149. endif()
  150. set(BUILD_FIPS ${WOLFSSL_FIPS} PARENT_SCOPE)
  151. if("${FIPS_VERSION}" STREQUAL "v1")
  152. set(BUILD_FIPS_V1 "yes" PARENT_SCOPE)
  153. endif()
  154. if("${FIPS_VERSION}" STREQUAL "v2")
  155. set(BUILD_FIPS_V2 "yes" PARENT_SCOPE)
  156. endif()
  157. if("${FIPS_VERSION}" STREQUAL "rand")
  158. set(BUILD_FIPS_RAND "yes" PARENT_SCOPE)
  159. endif()
  160. set(BUILD_FIPS_READY ${FIPS_READY} PARENT_SCOPE)
  161. if(WOLFSSL_CMAC OR WOLFSSL_USER_SETTINGS)
  162. set(BUILD_CMAC "yes" PARENT_SCOPE)
  163. endif()
  164. set(BUILD_SELFTEST ${WOLFSSL_SELFTEST} PARENT_SCOPE)
  165. if(WOLFSSL_SHA224 OR WOLFSSL_USER_SETTINGS)
  166. set(BUILD_SHA224 "yes" PARENT_SCOPE)
  167. endif()
  168. if(WOLFSSL_SHA3 OR WOLFSSL_USER_SETTINGS)
  169. set(BUILD_SHA3 "yes" PARENT_SCOPE)
  170. endif()
  171. if(WOLFSSL_POLY1305 OR WOLFSSL_USER_SETTINGS)
  172. set(BUILD_POLY1305 "yes" PARENT_SCOPE)
  173. endif()
  174. if(WOLFSSL_CHACHA OR WOLFSSL_USER_SETTINGS)
  175. set(BUILD_CHACHA "yes" PARENT_SCOPE)
  176. endif()
  177. if(WOLFSSL_XCHACHA OR WOLFSSL_USER_SETTINGS)
  178. set(BUILD_XCHACHA "yes" PARENT_SCOPE)
  179. endif()
  180. set(BUILD_INLINE ${WOLFSSL_INLINE} PARENT_SCOPE)
  181. if(WOLFSSL_OCSP OR WOLFSSL_USER_SETTINGS)
  182. set(BUILD_OCSP "yes" PARENT_SCOPE)
  183. endif()
  184. set(BUILD_OCSP_STAPLING ${WOLFSSL_CERTIFICATE_STATUS_REQUEST} PARENT_SCOPE)
  185. set(BUILD_OCSP_STAPLING_V2 ${WOLFSSL_CERTIFICATE_STATUS_REQUEST_V2} PARENT_SCOPE)
  186. if(WOLFSSL_CRL OR WOLFSSL_USER_SETTINGS)
  187. set(BUILD_CRL "yes" PARENT_SCOPE)
  188. endif()
  189. if(WOLFSSL_CRL_MONITOR)
  190. set(BUILD_CRL_MONITOR "yes" PARENT_SCOPE)
  191. endif()
  192. set(BUILD_USER_RSA ${WOLFSSL_USER_RSA} PARENT_SCOPE)
  193. set(BUILD_USER_CRYPTO ${WOLFSSL_USER_CRYPTO} PARENT_SCOPE)
  194. set(BUILD_NTRU ${WOLFSSL_NTRU} PARENT_SCOPE)
  195. set(BUILD_WNR ${WOLFSSL_WNR} PARENT_SCOPE)
  196. if(WOLFSSL_SRP OR WOLFSSL_USER_SETTINGS)
  197. set(BUILD_SRP "yes" PARENT_SCOPE)
  198. endif()
  199. set(USE_VALGRIND ${WOLFSSL_VALGRIND})
  200. if(WOLFSSL_MD4 OR WOLFSSL_USER_SETTINGS)
  201. set(BUILD_MD4 "yes" PARENT_SCOPE)
  202. endif()
  203. if(WOLFSSL_PWDBASED OR WOLFSSL_USER_SETTINGS)
  204. set(BUILD_PWDBASED "yes" PARENT_SCOPE)
  205. endif()
  206. if(WOLFSSL_SCRYPT OR WOLFSSL_USER_SETTINGS)
  207. set(BUILD_SCRYPT "yes" PARENT_SCOPE)
  208. endif()
  209. if(WOLFSSL_CRYPT_ONLY AND NOT WOLFSSL_OPENSSL_EXTRA)
  210. set(BUILD_CRYPTONLY "yes" PARENT_SCOPE)
  211. endif()
  212. if(WOLFSSL_FAST_MATH OR WOLFSSL_USER_SETTINGS)
  213. set(BUILD_FAST_MATH "yes" PARENT_SCOPE)
  214. endif()
  215. if(WOLFSSL_SLOW_MATH OR WOLFSSL_USER_SETTINGS)
  216. set(BUILD_SLOW_MATH "yes" PARENT_SCOPE)
  217. endif()
  218. if(WOLFSSL_EXAMPLES AND NOT WOLFSSL_LEAN_TLS)
  219. set(BUILD_EXAMPLE_SERVERS "yes" PARENT_SCOPE)
  220. endif()
  221. set(BUILD_EXAMPLE_CLIENTS ${WOLFSSL_EXAMPLES} PARENT_SCOPE)
  222. set(BUILD_TESTS ${WOLFSSL_EXAMPLES} PARENT_SCOPE)
  223. if(NOT WOLFSSL_SINGLETHREADED AND WOLFSSL_EXAMPLES AND NOT WOLFSSL_LEAN_TLS)
  224. set(BUILD_THREADED_EXAMPLES "yes" PARENT_SCOPE)
  225. endif()
  226. set(BUILD_WOLFCRYPT_TESTS ${WOLFSSL_CRYPT_TESTS} PARENT_SCOPE)
  227. set(BUILD_LIBZ ${WOLFSSL_LIBZ} PARENT_SCOPE)
  228. if(WOLFSSL_PKCS11 OR WOLFSSL_USER_SETTINGS)
  229. set(BUILD_PKCS11 "yes" PARENT_SCOPE)
  230. endif()
  231. if(WOLFSSL_PKCS12 OR WOLFSSL_USER_SETTINGS)
  232. set(BUILD_PKCS12 "yes" PARENT_SCOPE)
  233. endif()
  234. set(BUILD_CAVIUM ${WOLFSSL_CAVIUM} PARENT_SCOPE)
  235. set(BUILD_CAVIUM_V ${WOLFSSL_CAVIUM_V} PARENT_SCOPE)
  236. set(BUILD_OCTEON_SYNC ${WOLFSSL_OCTEON_SYNC} PARENT_SCOPE)
  237. set(BUILD_INTEL_QA ${WOLFSSL_INTEL_QA} PARENT_SCOPE)
  238. set(BUILD_INTEL_QA_SYNC ${WOLFSSL_INTEL_QA_SYNC} PARENT_SCOPE)
  239. if(WOLFSSL_SP OR WOLFSSL_USER_SETTINGS)
  240. set(BUILD_SP "yes" PARENT_SCOPE)
  241. endif()
  242. if((WOLFSSL_SP AND NOT WOLFSSL_SP_ASM) OR WOLFSSL_USER_SETTINGS)
  243. set(BUILD_SP_C "yes" PARENT_SCOPE)
  244. endif()
  245. if(WOLFSSL_SP_ARM64_ASM OR WOLFSSL_USER_SETTINGS)
  246. set(BUILD_SP_ARM64 "yes" PARENT_SCOPE)
  247. endif()
  248. if(WOLFSSL_SP_ARM32_ASM OR WOLFSSL_USER_SETTINGS)
  249. set(BUILD_SP_ARM32 "yes" PARENT_SCOPE)
  250. endif()
  251. if(WOLFSSL_SP_ARM_THUMB_ASM OR WOLFSSL_USER_SETTINGS)
  252. set(BUILD_SP_ARM_THUMB "yes" PARENT_SCOPE)
  253. endif()
  254. if(WOLFSSL_SP_ARM_CORTEX_ASM OR WOLFSSL_USER_SETTINGS)
  255. set(BUILD_SP_ARM_CORTEX "yes" PARENT_SCOPE)
  256. endif()
  257. if(WOLFSSL_SP_X86_64_ASM OR WOLFSSL_USER_SETTINGS)
  258. set(BUILD_SP_X86_64 "yes" PARENT_SCOPE)
  259. endif()
  260. if(WOLFSSL_SP_MATH OR WOLFSSL_USER_SETTINGS)
  261. set(BUILD_SP_INT "yes" PARENT_SCOPE)
  262. endif()
  263. set(BUILD_FAST_RSA ${WOLFSSL_FAST_RSA} PARENT_SCOPE)
  264. set(BUILD_MCAPI ${WOLFSSL_MCAPI} PARENT_SCOPE)
  265. set(BUILD_ASYNCCRYPT ${WOLFSSL_ASYNCCRYPT} PARENT_SCOPE)
  266. set(BUILD_WOLFEVENT ${WOLFSSL_ASYNCCRYPT} PARENT_SCOPE)
  267. if(WOLFSSL_CRYPTOCB OR WOLFSSL_USER_SETTINGS)
  268. set(BUILD_CRYPTOCB "yes" PARENT_SCOPE)
  269. endif()
  270. set(BUILD_PSK ${WOLFSSL_PSK} PARENT_SCOPE)
  271. set(BUILD_TRUST_PEER_CERT ${WOLFSSL_TRUSTED_PEER_CERT} PARENT_SCOPE)
  272. set(BUILD_PKI ${WOLFSSL_PKI} PARENT_SCOPE)
  273. if(WOLFSSL_DES3 OR WOLFSSL_USER_SETTINGS)
  274. set(BUILD_DES3 "yes" PARENT_SCOPE)
  275. endif()
  276. if(WOLFSSL_PKCS7 OR WOLFSSL_USER_SETTINGS)
  277. set(BUILD_PKCS7 "yes" PARENT_SCOPE)
  278. endif()
  279. set(BUILD_HASHFLAGS ${WOLFSSL_HASHFLAGS} PARENT_SCOPE)
  280. set(BUILD_LINUX_KM ${WOLFSSL_LINUX_KM} PARENT_SCOPE)
  281. set(BUILD_NO_LIBRARY ${WOLFSSL_NO_LIBRARY} PARENT_SCOPE)
  282. if(WOLFSSL_DEBUG OR WOLFSSL_STACK_SIZE)
  283. set(BUILD_DEBUG "yes" PARENT_SCOPE)
  284. endif()
  285. set(BUILD_RC2 ${WOLFSSL_RC2} PARENT_SCOPE)
  286. set(BUILD_FLAGS_GENERATED "yes" PARENT_SCOPE)
  287. endfunction()
  288. function(generate_lib_src_list LIB_SOURCES)
  289. if(NOT BUILD_FLAGS_GENERATED)
  290. message(FATAL_ERROR "Cannot call generate_lib_src_list without calling generate_build_flags first.")
  291. endif()
  292. # Corresponds to src/include.am
  293. if(BUILD_FIPS)
  294. if(BUILD_FIPS_V1)
  295. # fips first file
  296. list(APPEND LIB_SOURCES ctaocrypt/src/wolfcrypt_first.c)
  297. list(APPEND LIB_SOURCES
  298. ctaocrypt/src/hmac.c
  299. ctaocrypt/src/random.c
  300. ctaocrypt/src/sha256.c)
  301. if(BUILD_RSA)
  302. list(APPEND LIB_SOURCES ctaocrypt/src/rsa.c)
  303. endif()
  304. if(BUILD_AES)
  305. list(APPEND LIB_SOURCES ctaocrypt/src/aes.c)
  306. endif()
  307. if(BUILD_DES3)
  308. list(APPEND LIB_SOURCES ctaocrypt/src/des3.c)
  309. endif()
  310. if(BUILD_SHA)
  311. list(APPEND LIB_SOURCES ctaocrypt/src/sha.c)
  312. endif()
  313. if(BUILD_SHA512)
  314. list(APPEND LIB_SOURCES ctaocrypt/src/sha512.c)
  315. endif()
  316. list(APPEND LIB_SOURCES
  317. ctaocrypt/src/fips.c
  318. ctaocrypt/src/fips_test.c)
  319. # fips last file
  320. list(APPEND LIB_SOURCES ctaocrypt/src/wolfcrypt_last.c)
  321. endif()
  322. if(BUILD_FIPS_V2)
  323. # FIPSv2 first file
  324. list(APPEND LIB_SOURCES wolfcrypt/src/wolfcrypt_first.c)
  325. list(APPEND LIB_SOURCES
  326. wolfcrypt/src/hmac.c
  327. wolfcrypt/src/random.c
  328. wolfcrypt/src/sha256.c)
  329. if(BUILD_RSA)
  330. list(APPEND LIB_SOURCES wolfcrypt/src/rsa.c)
  331. endif()
  332. if(BUILD_ECC)
  333. list(APPEND LIB_SOURCES wolfcrypt/src/ecc.c)
  334. endif()
  335. if(BUILD_AES)
  336. list(APPEND LIB_SOURCES wolfcrypt/src/aes.c)
  337. if(BUILD_ARMASM AND BUILD_FIPS_READY)
  338. list(APPEND LIB_SOURCES wolfcrypt/src/port/arm/armv8-aes.c)
  339. endif()
  340. endif()
  341. if(BUILD_AESNI)
  342. list(APPEND LIB_SOURCES wolfcrypt/src/aes_asm.S)
  343. if(BUILD_INTELASM)
  344. list(APPEND LIB_SOURCES wolfcrypt/src/aes_gcm_asm.S)
  345. endif()
  346. endif()
  347. if(BUILD_DES3)
  348. list(APPEND LIB_SOURCES wolfcrypt/src/des3.c)
  349. endif()
  350. if(BUILD_SHA)
  351. list(APPEND LIB_SOURCES wolfcrypt/src/sha.c)
  352. endif()
  353. if(BUILD_ARMASM AND BUILD_FIPS_READY)
  354. list(APPEND LIB_SOURCES wolfcrypt/src/port/arm/armv8-sha256.c)
  355. endif()
  356. if(BUILD_INTELASM)
  357. list(APPEND LIB_SOURCES wolfcrypt/src/sha256_asm.S)
  358. endif()
  359. if(BUILD_SHA512)
  360. list(APPEND LIB_SOURCES wolfcrypt/src/sha512.c)
  361. if(BUILD_ARMASM AND BUILD_FIPS_READY)
  362. list(APPEND LIB_SOURCES
  363. wolfcrypt/src/port/arm/armv8-sha512.c
  364. wolfcrypt/src/port/arm/armv8-sha512-asm.S
  365. wolfcrypt/src/port/arm/armv8-32-sha512-asm.S)
  366. endif()
  367. if(BUILD_INTELASM)
  368. list(APPEND LIB_SOURCES wolfcrypt/src/sha512_asm.S)
  369. endif()
  370. endif()
  371. if(BUILD_SHA3)
  372. list(APPEND LIB_SOURCES wolfcrypt/src/sha3.c)
  373. endif()
  374. if(BUILD_DH)
  375. list(APPEND LIB_SOURCES wolfcrypt/src/dh.c)
  376. endif()
  377. if(BUILD_CMAC)
  378. list(APPEND LIB_SOURCES wolfcrypt/src/cmac.c)
  379. endif()
  380. list(APPEND LIB_SOURCES
  381. wolfcrypt/src/fips.c
  382. wolfcrypt/src/fips_test.c)
  383. # fips last file
  384. list(APPEND LIB_SOURCES wolfcrypt/src/wolfcrypt_last.c)
  385. endif()
  386. if(BUILD_FIPS_RAND)
  387. list(APPEND LIB_SOURCES
  388. wolfcrypt/src/wolfcrypt_first.c
  389. wolfcrypt/src/hmac.c
  390. wolfcrypt/src/random.c
  391. wolfcrypt/src/sha256.c
  392. wolfcrypt/src/sha256_asm.S
  393. wolfcrypt/src/fips.c
  394. wolfcrypt/src/fips_test.c
  395. wolfcrypt/src/wolfcrypt_last.c)
  396. endif()
  397. endif()
  398. # For wolfRand, exclude everything else.
  399. if(NOT BUILD_FIPS_RAND)
  400. # For FIPSV2, exclude the wolfCrypt files included above.
  401. # For wolfRand, exclude just a couple files.
  402. # For old FIPS, keep the wolfCrypt versions of the
  403. # CtaoCrypt files included above.
  404. if(NOT BUILD_FIPS_V2)
  405. list(APPEND LIB_SOURCES wolfcrypt/src/hmac.c)
  406. endif()
  407. # CAVP self test
  408. if(BUILD_SELFTEST)
  409. list(APPEND LIB_SOURCES wolfcrypt/src/selftest.c)
  410. endif()
  411. endif()
  412. list(APPEND LIB_SOURCES
  413. wolfcrypt/src/hash.c
  414. wolfcrypt/src/cpuid.c)
  415. if(NOT BUILD_FIPS_RAND)
  416. if(NOT BUILD_FIPS_V2 AND BUILD_RNG)
  417. list(APPEND LIB_SOURCES wolfcrypt/src/random.c)
  418. endif()
  419. if(NOT BUILD_FIPS_V2)
  420. if(BUILD_ARMASM)
  421. list(APPEND LIB_SOURCES wolfcrypt/src/port/arm/armv8-sha256.c)
  422. else()
  423. list(APPEND LIB_SOURCES wolfcrypt/src/sha256.c)
  424. if(BUILD_INTELASM)
  425. list(APPEND LIB_SOURCES wolfcrypt/src/sha256_asm.S)
  426. endif()
  427. endif()
  428. endif()
  429. if(BUILD_AFALG)
  430. list(APPEND LIB_SOURCES wolfcrypt/src/port/af_alg/afalg_hash.c)
  431. endif()
  432. if(BUILD_WOLFEVENT)
  433. list(APPEND LIB_SOURCES wolfcrypt/src/wolfevent.c)
  434. endif()
  435. if(BUILD_ASYNCCRYPT)
  436. list(APPEND LIB_SOURCES wolfcrypt/src/async.c)
  437. endif()
  438. if(NOT BUILD_USER_RSA AND BUILD_RSA)
  439. if(BUILD_FAST_RSA)
  440. list(APPEND LIB_SOURCES wolfcrypt/user-crypto/src/rsa.c)
  441. else()
  442. if(NOT BUILD_FIPS_V2)
  443. list(APPEND LIB_SOURCES wolfcrypt/src/rsa.c)
  444. endif()
  445. endif()
  446. endif()
  447. if(BUILD_SP)
  448. if(BUILD_SP_C)
  449. list(APPEND LIB_SOURCES
  450. wolfcrypt/src/sp_c32.c
  451. wolfcrypt/src/sp_c64.c)
  452. endif()
  453. if(BUILD_SP_X86_64)
  454. list(APPEND LIB_SOURCES
  455. wolfcrypt/src/sp_x86_64.c
  456. wolfcrypt/src/sp_x86_64_asm.S)
  457. endif()
  458. if(NOT BUILD_FIPS_V2 AND BUILD_SP_ARM32)
  459. list(APPEND LIB_SOURCES wolfcrypt/src/sp_arm32.c)
  460. endif()
  461. if(BUILD_SP_ARM_THUMB)
  462. list(APPEND LIB_SOURCES wolfcrypt/src/sp_armthumb.c)
  463. endif()
  464. if(BUILD_SP_ARM64)
  465. list(APPEND LIB_SOURCES wolfcrypt/src/sp_arm64.c)
  466. endif()
  467. if(BUILD_SP_INT)
  468. list(APPEND LIB_SOURCES wolfcrypt/src/sp_int.c)
  469. endif()
  470. if(BUILD_SP_ARM_CORTEX)
  471. list(APPEND LIB_SOURCES wolfcrypt/src/sp_cortexm.c)
  472. endif()
  473. endif()
  474. if(NOT BUILD_FIPS_V2)
  475. if(BUILD_AES)
  476. list(APPEND LIB_SOURCES wolfcrypt/src/aes.c)
  477. if(BUILD_ARMASM)
  478. list(APPEND LIB_SOURCES wolfcrypt/src/port/arm/armv8-aes.c)
  479. endif()
  480. if(BUILD_AFALG)
  481. list(APPEND LIB_SOURCES wolfcrypt/src/port/af_alg/afalg_aes.c)
  482. endif()
  483. endif()
  484. endif()
  485. if(NOT BUILD_FIPS_V2 AND BUILD_CMAC)
  486. list(APPEND LIB_SOURCES wolfcrypt/src/cmac.c)
  487. endif()
  488. if(NOT BUILD_FIPS_V2 AND BUILD_DES3)
  489. list(APPEND LIB_SOURCES wolfcrypt/src/des3.c)
  490. endif()
  491. if(NOT BUILD_FIPS_V2 AND BUILD_SHA)
  492. list(APPEND LIB_SOURCES wolfcrypt/src/sha.c)
  493. endif()
  494. if(NOT BUILD_FIPS_V2 AND BUILD_SHA512)
  495. if(BUILD_ARMASM)
  496. list(APPEND LIB_SOURCES
  497. wolfcrypt/src/port/arm/armv8-sha512.c
  498. wolfcrypt/src/port/arm/armv8-sha512-asm.S
  499. wolfcrypt/src/port/arm/armv8-32-sha512-asm.S)
  500. else()
  501. list(APPEND LIB_SOURCES wolfcrypt/src/sha512.c)
  502. if(BUILD_INTELASM)
  503. list(APPEND LIB_SOURCES wolfcrypt/src/sha512_asm.S)
  504. endif()
  505. endif()
  506. endif()
  507. if(NOT BUILD_FIPS_V2 AND BUILD_SHA3)
  508. list(APPEND LIB_SOURCES wolfcrypt/src/sha3.c)
  509. endif()
  510. endif()
  511. list(APPEND LIB_SOURCES
  512. wolfcrypt/src/logging.c
  513. wolfcrypt/src/wc_port.c
  514. wolfcrypt/src/error.c)
  515. if(BUILD_DEBUG)
  516. list(APPEND LIB_SOURCES
  517. wolfcrypt/src/debug.c)
  518. endif()
  519. if(NOT BUILD_FIPS_RAND)
  520. list(APPEND LIB_SOURCES
  521. wolfcrypt/src/wc_encrypt.c
  522. wolfcrypt/src/signature.c
  523. wolfcrypt/src/wolfmath.c)
  524. endif()
  525. if(BUILD_MEMORY)
  526. list(APPEND LIB_SOURCES wolfcrypt/src/memory.c)
  527. endif()
  528. if(NOT BUILD_FIPS_RAND)
  529. if(NOT BUILD_FIPS_V2 AND BUILD_DH)
  530. list(APPEND LIB_SOURCES wolfcrypt/src/dh.c)
  531. endif()
  532. if(BUILD_ASN)
  533. list(APPEND LIB_SOURCES wolfcrypt/src/asn.c)
  534. endif()
  535. endif()
  536. if(BUILD_CODING)
  537. list(APPEND LIB_SOURCES wolfcrypt/src/coding.c)
  538. endif()
  539. if(NOT BUILD_FIPS_RAND)
  540. if(BUILD_POLY1305)
  541. if(BUILD_ARMASM)
  542. list(APPEND LIB_SOURCES wolfcrypt/src/port/arm/armv8-poly1305.c)
  543. endif()
  544. list(APPEND LIB_SOURCES wolfcrypt/src/poly1305.c)
  545. if(BUILD_INTELASM)
  546. list(APPEND LIB_SOURCES wolfcrypt/src/poly1305_asm.S)
  547. endif()
  548. endif()
  549. if(BUILD_RC4)
  550. list(APPEND LIB_SOURCES wolfcrypt/src/arc4.c)
  551. endif()
  552. if(BUILD_MD4)
  553. list(APPEND LIB_SOURCES wolfcrypt/src/md4.c)
  554. endif()
  555. if(BUILD_MD5)
  556. list(APPEND LIB_SOURCES wolfcrypt/src/md5.c)
  557. endif()
  558. if(BUILD_PWDBASED)
  559. list(APPEND LIB_SOURCES
  560. wolfcrypt/src/pwdbased.c
  561. wolfcrypt/src/pkcs12.c)
  562. endif()
  563. if(BUILD_DSA)
  564. list(APPEND LIB_SOURCES wolfcrypt/src/dsa.c)
  565. endif()
  566. if(NOT BUILD_FIPS_V2 AND BUILD_AESNI)
  567. list(APPEND LIB_SOURCES
  568. wolfcrypt/src/aes_asm.S
  569. wolfcrypt/src/aes_gcm_asm.S)
  570. endif()
  571. if(BUILD_CAMELLIA)
  572. list(APPEND LIB_SOURCES wolfcrypt/src/camellia.c)
  573. endif()
  574. if(BUILD_MD2)
  575. list(APPEND LIB_SOURCES wolfcrypt/src/md2.c)
  576. endif()
  577. if(BUILD_RIPEMD)
  578. list(APPEND LIB_SOURCES wolfcrypt/src/ripemd.c)
  579. endif()
  580. if(BUILD_BLAKE2)
  581. list(APPEND LIB_SOURCES wolfcrypt/src/blake2b.c)
  582. endif()
  583. if(BUILD_BLAKE2S)
  584. list(APPEND LIB_SOURCES wolfcrypt/src/blake2s.c)
  585. endif()
  586. if(BUILD_HC128)
  587. list(APPEND LIB_SOURCES wolfcrypt/src/hc128.c)
  588. endif()
  589. if(BUILD_RABBIT)
  590. list(APPEND LIB_SOURCES wolfcrypt/src/rabbit.c)
  591. endif()
  592. if(BUILD_CHACHA)
  593. if(BUILD_ARMASM)
  594. list(APPEND LIB_SOURCES wolfcrypt/src/port/arm/armv8-chacha.c)
  595. else()
  596. list(APPEND LIB_SOURCES wolfcrypt/src/chacha.c)
  597. if(BUILD_INTELASM)
  598. list(APPEND LIB_SOURCES wolfcrypt/src/chacha_asm.S)
  599. endif()
  600. endif()
  601. if(BUILD_POLY1305)
  602. list(APPEND LIB_SOURCES wolfcrypt/src/chacha20_poly1305.c)
  603. endif()
  604. endif()
  605. if(NOT BUILD_INLINE)
  606. list(APPEND LIB_SOURCES wolfcrypt/src/misc.c)
  607. endif()
  608. if(BUILD_FAST_MATH)
  609. list(APPEND LIB_SOURCES wolfcrypt/src/tfm.c)
  610. endif()
  611. if(BUILD_SLOW_MATH)
  612. list(APPEND LIB_SOURCES wolfcrypt/src/integer.c)
  613. endif()
  614. if(NOT BUILD_FIPS_V2 AND BUILD_ECC)
  615. list(APPEND LIB_SOURCES wolfcrypt/src/ecc.c)
  616. endif()
  617. if(BUILD_CURVE25519)
  618. list(APPEND LIB_SOURCES wolfcrypt/src/curve25519.c)
  619. endif()
  620. if(BUILD_ED25519)
  621. list(APPEND LIB_SOURCES wolfcrypt/src/ed25519.c)
  622. endif()
  623. if(BUILD_FEMATH)
  624. if(BUILD_CURVE25519_SMALL)
  625. list(APPEND LIB_SOURCES wolfcrypt/src/fe_low_mem.c)
  626. else()
  627. if(BUILD_INTELASM)
  628. list(APPEND LIB_SOURCES wolfcrypt/src/fe_x25519_asm.S)
  629. else()
  630. if(BUILD_ARMASM)
  631. list(APPEND LIB_SOURCES
  632. wolfcrypt/src/port/arm/armv8-32-curve25519.S
  633. wolfcrypt/src/port/arm/armv8-curve25519.S)
  634. else()
  635. list(APPEND LIB_SOURCES wolfcrypt/src/fe_operations.c)
  636. endif()
  637. endif()
  638. endif()
  639. endif()
  640. if(BUILD_GEMATH)
  641. if(BUILD_ED25519_SMALL)
  642. list(APPEND LIB_SOURCES wolfcrypt/src/ge_low_mem.c)
  643. else()
  644. list(APPEND LIB_SOURCES wolfcrypt/src/ge_operations.c)
  645. if(NOT BUILD_FEMATH)
  646. if(BUILD_INTELASM)
  647. list(APPEND LIB_SOURCES wolfcrypt/src/fe_x25519_asm.S)
  648. else()
  649. if(BUILD_ARMASM)
  650. list(APPEND LIB_SOURCES wolfcrypt/src/port/arm/armv8-curve25519.S)
  651. else()
  652. list(APPEND LIB_SOURCES wolfcrypt/src/fe_operations.c)
  653. endif()
  654. endif()
  655. endif()
  656. endif()
  657. endif()
  658. if(BUILD_CURVE448)
  659. list(APPEND LIB_SOURCES wolfcrypt/src/curve448.c)
  660. endif()
  661. if(BUILD_ED448)
  662. list(APPEND LIB_SOURCES wolfcrypt/src/ed448.c)
  663. endif()
  664. if(BUILD_FE448)
  665. list(APPEND LIB_SOURCES wolfcrypt/src/fe_448.c)
  666. endif()
  667. if(BUILD_GE448)
  668. list(APPEND LIB_SOURCES wolfcrypt/src/ge_448.c)
  669. if(NOT BUILD_FE448)
  670. list(APPEND LIB_SOURCES wolfcrypt/src/fe_448.c)
  671. endif()
  672. endif()
  673. if(BUILD_LIBZ)
  674. list(APPEND LIB_SOURCES wolfcrypt/src/compress.c)
  675. endif()
  676. if(BUILD_PKCS7)
  677. list(APPEND LIB_SOURCES wolfcrypt/src/pkcs7.c)
  678. endif()
  679. if(BUILD_SRP)
  680. list(APPEND LIB_SOURCES wolfcrypt/src/srp.c)
  681. endif()
  682. if(BUILD_IDEA)
  683. list(APPEND LIB_SOURCES wolfcrypt/src/idea.c)
  684. endif()
  685. if(BUILD_AFALG)
  686. list(APPEND LIB_SOURCES wolfcrypt/src/port/af_alg/wc_afalg.c)
  687. endif()
  688. if(NOT BUILD_CRYPTONLY)
  689. # ssl files
  690. list(APPEND LIB_SOURCES
  691. src/internal.c
  692. src/wolfio.c
  693. src/keys.c
  694. src/ssl.c
  695. src/tls.c)
  696. if(BUILD_TLS13)
  697. list(APPEND LIB_SOURCES src/tls13.c)
  698. endif()
  699. if(BUILD_OCSP)
  700. list(APPEND LIB_SOURCES src/ocsp.c)
  701. endif()
  702. if(BUILD_CRL)
  703. list(APPEND LIB_SOURCES src/crl.c)
  704. endif()
  705. if(BUILD_SNIFFER)
  706. list(APPEND LIB_SOURCES src/sniffer.c)
  707. endif()
  708. endif()
  709. endif()
  710. # Corresponds to wolfcrypt/src/include.am
  711. if(BUILD_CRYPTOCB)
  712. list(APPEND LIB_SOURCES wolfcrypt/src/cryptocb.c)
  713. endif()
  714. if(BUILD_PKCS11)
  715. list(APPEND LIB_SOURCES wolfcrypt/src/wc_pkcs11.c)
  716. endif()
  717. if(BUILD_DEVCRYPTO)
  718. list(APPEND LIB_SOURCES
  719. wolfcrypt/src/port/devcrypto/devcrypto_hash.c
  720. wolfcrypt/src/port/devcrypto/devcrypto_aes.c
  721. wolfcrypt/src/port/devcrypto/wc_devcrypto.c)
  722. endif()
  723. if(BUILD_CAVIUM)
  724. list(APPEND LIB_SOURCES wolfcrypt/src/port/cavium/cavium_nitrox.c)
  725. endif()
  726. if(BUILD_OCTEON_SYNC)
  727. list(APPEND LIB_SOURCES wolfcrypt/src/port/cavium/cavium_octeon_sync.c)
  728. endif()
  729. if(BUILD_INTEL_QA)
  730. list(APPEND LIB_SOURCES
  731. wolfcrypt/src/port/intel/quickassist.c
  732. wolfcrypt/src/port/intel/quickassist_mem.c)
  733. endif()
  734. if(BUILD_INTEL_QA_SYNC)
  735. list(APPEND LIB_SOURCES wolfcrypt/src/port/intel/quickassist_sync.c)
  736. endif()
  737. if(BUILD_CRYPTOAUTHLIB)
  738. list(APPEND LIB_SOURCES wolfcrypt/src/port/atmel/atmel.c)
  739. endif()
  740. set(LIB_SOURCES ${LIB_SOURCES} PARENT_SCOPE)
  741. endfunction()