project('Circe', 'c', version: '0.1.0') ## EXTERNAL DEPENDENCIES tct_subproj = subproject('TinyCrypT') tct_dependency = tct_subproj.get_variable('TinyCrypT_dep') ## LIBCIRCE-COMMON common_build_args = [ '-O3', '-ffreestanding', '-nostdlib', '-lgcc', ] common_sources = [ 'common/cbor.c', 'common/memory.c', ] common_incdir = include_directories('common/') common_target = static_library( 'circe-common', common_sources, c_args: common_build_args, include_directories: common_incdir, ) common_dep = declare_dependency(include_directories: common_incdir, link_with: common_target) set_variable(meson.project_name() + '_common_dep', common_dep) # Post-quantum primitives from contrib/ (ML-KEM-768, ML-DSA-44). # Built freestanding; they route memcpy/memset/zeroize through common's # circe_memcpy/circe_memset, so they depend on common_dep. # Exposes _mlkem_dep and _mldsa_dep. subdir('contrib') mlkem_dependency = get_variable(meson.project_name() + '_mlkem_dep') mldsa_dependency = get_variable(meson.project_name() + '_mldsa_dep') ## LIBCIRCE-CORE core_build_args = [ '-O3', '-ffreestanding', '-nostdlib', '-lgcc', ] core_sources = [ 'core/core.c', ] core_incdir = include_directories('core/') core_target = static_library( 'circe-core', core_sources, c_args: core_build_args, include_directories: core_incdir, dependencies: [common_dep, tct_dependency, mlkem_dependency, mldsa_dependency], ) core_dep = declare_dependency(include_directories: core_incdir, link_with: core_target) set_variable(meson.project_name() + '_core_dep', core_dep) if not meson.is_subproject() and not meson.is_cross_build() # Tests go here endif