merge binaries bmcweb and bmcwebd
Solution to reduce compressed rofs size.
Conclusion: The compiler is better at reducing binary size than the rofs
compression is at deduplicating sections of already compiled binaries,
in the case of bmcweb.
What's been changed?
`bmcweb` and `bmcwebd` have been merged into `bmcweb`.
The webserver can be started with `bmcweb daemon`.
Commands used to check size
```
wc -c build/s8030/tmp/work/*-openbmc-linux-gnueabi/obmc-phosphor-image/1.0/obmc-phosphor-image-1.0/static/image-rofs
wc -c build/s8030/tmp/deploy/images/s8030/image-rofs
xz -c build/s8030/tmp/work/*-openbmc-linux-gnueabi/obmc-phosphor-image/1.0/rootfs/bin/bmcweb | wc -c
xz -c build/s8030/tmp/work/*-openbmc-linux-gnueabi/obmc-phosphor-image/1.0/rootfs/usr/libexec/bmcwebd | wc -c
```
Base commit used for testing:
`2169e896448fac1b59c57516b381492e4b2161c7`
Results:
Before patch:
```
image-rofs compressed size:
25526272 build/s8030/tmp/work/s8030-openbmc-linux-gnueabi/obmc-phosphor-image/1.0/obmc-phosphor-image-1.0/static/image-rofs
rootfs
25526272 build/s8030/tmp/deploy/images/s8030/image-rofs
bmcweb cli
95424
bmcwebd
1016004
```
After patch:
```
image-rofs compressed size:
25477120 build/s8030/tmp/work/s8030-openbmc-linux-gnueabi/obmc-phosphor-image/1.0/obmc-phosphor-image-1.0/static/image-rofs
rootfs
25477120 build/s8030/tmp/deploy/images/s8030/image-rofs
bmcweb cli
96
bmcwebd
1059556
```
Calculating the difference in compressed rofs
25526272 - 25477120 = 49152
which is around 0.2% in terms of the total image but around 4.6% in
terms of bmcwebd binary.
Tested: on yosemite4 qemu
`bmcweb` cli interactions work as before.
```
root@yosemite4:~# bmcweb --help
BMCWeb CLI
Usage: bmcweb [OPTIONS] SUBCOMMAND
Options:
-h,--help Print this help message and exit
Subcommands:
loglevel Set bmcweb log level
daemon Run webserver
root@yosemite4:~# bmcweb loglevel info
<6>[webserver_cli.cpp:97] logging level changed to: INFO
root@yosemite4:~# bmcweb loglevel
level is required
Run with --help for more information.
root@yosemite4:~# bmcweb loglevel debug
<6>[webserver_cli.cpp:97] logging level changed to: DEBUG
```
systemd service still working
```
root@yosemite4:~# systemctl status bmcweb
● bmcweb.service - Start bmcweb server
Loaded: loaded (/usr/lib/systemd/system/bmcweb.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-04-03 13:35:45 PDT; 5 months 15 days ago
```
Change-Id: Ib5dde568ac1c12c5414294ed96404c6a69417424
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>
diff --git a/meson.build b/meson.build
index 96a9383..205ee90 100644
--- a/meson.build
+++ b/meson.build
@@ -66,8 +66,6 @@
),
]
-incdir_cli = include_directories('http', 'include')
-
# Add compiler arguments
boost_flags = ['-Wno-unused-parameter']
nghttp2_flags = []
@@ -210,7 +208,6 @@
# Find the dependency modules, if not found use meson wrap to get them
# automatically during the configure step
bmcweb_dependencies = []
-bmcweb_cli_dependencies = []
pam = cxx.find_library('pam', required: true)
atomic = cxx.find_library('atomic', required: true)
@@ -252,7 +249,6 @@
sdbusplus = dependency('sdbusplus')
bmcweb_dependencies += sdbusplus
-bmcweb_cli_dependencies += sdbusplus
cli11 = dependency('CLI11', required: false, include_type: 'system')
if not cli11.found()
@@ -260,8 +256,7 @@
cli11 = cli11_proj.get_variable('CLI11_dep')
cli11 = cli11.as_system('system')
endif
-bmcweb_cli_dependencies += cli11
-
+bmcweb_dependencies += cli11
tinyxml = dependency(
'tinyxml2',
@@ -316,7 +311,6 @@
if boost.found()
bmcweb_dependencies += [boost]
- bmcweb_cli_dependencies += [boost]
else
cmake = import('cmake')
opt = cmake.subproject_options()
@@ -345,14 +339,12 @@
foreach boost_lib : boost_libs
boost_lib_instance = boost.dependency('boost_' + boost_lib).as_system()
bmcweb_dependencies += [boost_lib_instance]
- bmcweb_cli_dependencies += [boost_lib_instance]
endforeach
endif
systemd_system_unit_dir = systemd.get_variable('systemd_system_unit_dir')
bindir = get_option('prefix') + '/' + get_option('bindir')
-libexec = get_option('prefix') + '/' + get_option('libexecdir')
summary(
{
@@ -369,7 +361,6 @@
# Config subdirectory
subdir('config')
bmcweb_dependencies += conf_h_dep
-bmcweb_cli_dependencies += conf_h_dep
test_sources = []
subdir('features')
@@ -407,6 +398,7 @@
'src/json_html_serializer.cpp',
'src/ossl_random.cpp',
'src/ssl_key_handler.cpp',
+ 'src/webserver_cli.cpp',
'src/webserver_run.cpp',
)
@@ -417,25 +409,15 @@
dependencies: bmcweb_dependencies,
)
-# Generate the bmcwebd daemon
+# Generate the bmcweb daemon
executable(
- 'bmcwebd',
+ 'bmcweb',
'src/webserver_main.cpp',
include_directories: incdir,
dependencies: bmcweb_dependencies,
link_with: bmcweblib,
link_args: '-Wl,--gc-sections',
install: true,
- install_dir: libexec,
-)
-
-# Generate the bmcweb CLI application
-executable(
- 'bmcweb',
- ['src/webserver_cli.cpp', 'src/boost_asio.cpp'],
- include_directories: incdir_cli,
- dependencies: bmcweb_cli_dependencies,
- install: true,
install_dir: bindir,
)