Signed-off-by: Alistair Francis <alistair.fran...@wdc.com> --- meson.build | 78 +++++++++++++++++++++++++++++++++++ .gitmodules | 3 ++ meson_options.txt | 3 ++ scripts/meson-buildoptions.sh | 3 ++ subprojects/.gitignore | 1 + subprojects/libspdm.wrap | 5 +++ 6 files changed, 93 insertions(+) create mode 100644 subprojects/libspdm.wrap
diff --git a/meson.build b/meson.build index 98e68ef0b1..3ac91defbc 100644 --- a/meson.build +++ b/meson.build @@ -1864,6 +1864,15 @@ elif get_option('vduse_blk_export').disabled() have_vduse_blk_export = false endif +have_libspdm = (targetos == 'linux') +if get_option('libspdm').enabled() + if targetos != 'linux' + error('libspdm requires linux') + endif +elif get_option('libspdm').disabled() + have_libspdm = false +endif + # libbpf libbpf = dependency('libbpf', required: get_option('bpf'), method: 'pkg-config') if libbpf.found() and not cc.links(''' @@ -2141,6 +2150,7 @@ config_host_data.set('CONFIG_VHOST_VDPA', have_vhost_vdpa) config_host_data.set('CONFIG_VMNET', vmnet.found()) config_host_data.set('CONFIG_VHOST_USER_BLK_SERVER', have_vhost_user_blk_server) config_host_data.set('CONFIG_VDUSE_BLK_EXPORT', have_vduse_blk_export) +config_host_data.set('CONFIG_LIBSPDM', have_libspdm) config_host_data.set('CONFIG_PNG', png.found()) config_host_data.set('CONFIG_VNC', vnc.found()) config_host_data.set('CONFIG_VNC_JPEG', jpeg.found()) @@ -3172,6 +3182,7 @@ blockdev_ss = ss.source_set() block_ss = ss.source_set() chardev_ss = ss.source_set() common_ss = ss.source_set() +libspdm_ss = ss.source_set() crypto_ss = ss.source_set() hwcore_ss = ss.source_set() io_ss = ss.source_set() @@ -3321,6 +3332,56 @@ if have_libvduse libvduse = libvduse_proj.get_variable('libvduse_dep') endif +libspdm = not_found +if have_libspdm + cmake = import('cmake') + libspdm_opt_var = cmake.subproject_options() + + libspdm_opt_var.add_cmake_defines({'ARCH': 'x64'}) + libspdm_opt_var.add_cmake_defines({'TOOLCHAIN': 'NONE'}) + libspdm_opt_var.add_cmake_defines({'TARGET': 'Release'}) + libspdm_opt_var.add_cmake_defines({'CRYPTO': 'openssl'}) + libspdm_opt_var.add_cmake_defines({'ENABLE_BINARY_BUILD': '1'}) + libspdm_opt_var.add_cmake_defines({'COMPILED_LIBCRYPTO_PATH': '/usr/lib'}) + libspdm_opt_var.add_cmake_defines({'COMPILED_LIBSSL_PATH': '/usr/lib'}) + libspdm_opt_var.add_cmake_defines({'DISABLE_TESTS': '1'}) + + libspdm_proj = cmake.subproject('libspdm', options: libspdm_opt_var) + + libspdm_lib = libspdm_proj.dependency('spdm_common_lib') + libspdm_ss.add(libspdm_lib) + + libspdm_lib = libspdm_proj.dependency('memlib') + libspdm_ss.add(libspdm_lib) + + libspdm_lib = libspdm_proj.dependency('malloclib') + libspdm_ss.add(libspdm_lib) + + libspdm_lib = libspdm_proj.dependency('spdm_crypt_lib') + libspdm_ss.add(libspdm_lib) + + libspdm_lib = libspdm_proj.dependency('spdm_responder_lib') + libspdm_ss.add(libspdm_lib) + + libspdm_lib = libspdm_proj.dependency('cryptlib_openssl') + libspdm_ss.add(libspdm_lib) + + libspdm_lib = libspdm_proj.dependency('spdm_device_secret_lib_null') + libspdm_ss.add(libspdm_lib) + + libspdm_lib = libspdm_proj.dependency('platform_lib_null') + libspdm_ss.add(libspdm_lib) + + libspdm_lib = libspdm_proj.dependency('spdm_secured_message_lib') + libspdm_ss.add(libspdm_lib) + + libspdm_lib = libspdm_proj.dependency('spdm_crypt_lib') + libspdm_ss.add(libspdm_lib) + + libspdm_lib = libspdm_proj.dependency('spdm_crypt_ext_lib') + libspdm_ss.add(libspdm_lib) +endif + # NOTE: the trace/ subdirectory needs the qapi_trace_events variable # that is filled in by qapi/. subdir('qapi') @@ -3593,6 +3654,19 @@ libcrypto = static_library('crypto', crypto_ss.sources() + genh, crypto = declare_dependency(link_whole: libcrypto, dependencies: [authz, qom]) +if have_libspdm + libspdm_ss = libspdm_ss.apply(config_host, strict: false) + libspdm = static_library('libspdm', libspdm_ss.sources() + genh, + dependencies: [libspdm_ss.dependencies()], + name_suffix: 'fa', + build_by_default: false) + + openssl = dependency('openssl', version : '>=3.0.9') + libspdm = declare_dependency(link_whole: libspdm, dependencies: [openssl]) + + common_user_inc += 'subprojects/libspdm/include' +endif + io_ss = io_ss.apply(config_host, strict: false) libio = static_library('io', io_ss.sources() + genh, dependencies: [io_ss.dependencies()], @@ -3668,6 +3742,10 @@ if emulator_modules.length() > 0 alias_target('modules', emulator_modules) endif +if have_libspdm + system_ss.add(libspdm) +endif + system_ss.add(authz, blockdev, chardev, crypto, io, qmp) common_ss.add(qom, qemuutil) diff --git a/.gitmodules b/.gitmodules index 73cae4cd4d..1bf93427ad 100644 --- a/.gitmodules +++ b/.gitmodules @@ -43,3 +43,6 @@ [submodule "tests/lcitool/libvirt-ci"] path = tests/lcitool/libvirt-ci url = https://gitlab.com/libvirt/libvirt-ci.git +[submodule "subprojects/libspdm"] + path = subprojects/libspdm + url = https://github.com/DMTF/libspdm.git diff --git a/meson_options.txt b/meson_options.txt index aaea5ddd77..b61a1f4515 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -292,6 +292,9 @@ option('libvduse', type: 'feature', value: 'auto', option('vduse_blk_export', type: 'feature', value: 'auto', description: 'VDUSE block export support') +option('libspdm', type: 'feature', value: 'auto', + description: 'build libspdm Library') + option('capstone', type: 'feature', value: 'auto', description: 'Whether and how to find the capstone library') option('fdt', type: 'combo', value: 'auto', diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh index 9da3fe299b..8a9d3ad01d 100644 --- a/scripts/meson-buildoptions.sh +++ b/scripts/meson-buildoptions.sh @@ -126,6 +126,7 @@ meson_options_help() { printf "%s\n" ' libudev Use libudev to enumerate host devices' printf "%s\n" ' libusb libusb support for USB passthrough' printf "%s\n" ' libvduse build VDUSE Library' + printf "%s\n" ' libspdm build libspdm Library' printf "%s\n" ' linux-aio Linux AIO support' printf "%s\n" ' linux-io-uring Linux io_uring support' printf "%s\n" ' live-block-migration' @@ -353,6 +354,8 @@ _meson_option_parse() { --disable-libusb) printf "%s" -Dlibusb=disabled ;; --enable-libvduse) printf "%s" -Dlibvduse=enabled ;; --disable-libvduse) printf "%s" -Dlibvduse=disabled ;; + --enable-libspdm) printf "%s" -Dlibspdm=enabled ;; + --disable-libspdm) printf "%s" -Dlibspdm=disabled ;; --enable-linux-aio) printf "%s" -Dlinux_aio=enabled ;; --disable-linux-aio) printf "%s" -Dlinux_aio=disabled ;; --enable-linux-io-uring) printf "%s" -Dlinux_io_uring=enabled ;; diff --git a/subprojects/.gitignore b/subprojects/.gitignore index adca0266be..5d0ac1be1a 100644 --- a/subprojects/.gitignore +++ b/subprojects/.gitignore @@ -5,4 +5,5 @@ /dtc /keycodemapdb /libvfio-user +/libspdm /slirp diff --git a/subprojects/libspdm.wrap b/subprojects/libspdm.wrap new file mode 100644 index 0000000000..ca3607fbaa --- /dev/null +++ b/subprojects/libspdm.wrap @@ -0,0 +1,5 @@ +[wrap-git] +url = https://github.com/DMTF/libspdm.git +revision = 55f5141436d2f6debf4b7cd57641cc78d8e4c6fc +depth = 1 +clone-recursive = true -- 2.41.0