Skip to content

Commit dcb64da

Browse files
Add option to build embedd broker as shared library
Signed-off-by: Norbert Heusser <[email protected]>
1 parent 9fddc7c commit dcb64da

17 files changed

+260
-90
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ man/mqtt.7
9393
out/
9494

9595
src/mosquitto
96-
src/mosquitto_broker.a
96+
src/libmosquitto_broker.a
97+
src/libmosquitto_broker.so*
9798

9899
test/broker/broker.pid
99100
test/test_client

CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ if(WITH_THREADING)
8989
endif()
9090
endif()
9191

92+
option(WITH_EMBEDD_BROKER, "Create a library mosquitto_broker to embedd the broker" OFF)
93+
9294
option(WITH_DLT "Include DLT support?" OFF)
9395
message(STATUS "WITH_DLT = ${WITH_DLT}")
9496
if(WITH_DLT)

Makefile

+4
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ endif
116116
$(INSTALL) include/mosquitto_plugin.h "${DESTDIR}${prefix}/include/mosquitto_plugin.h"
117117
$(INSTALL) include/mosquittopp.h "${DESTDIR}${prefix}/include/mosquittopp.h"
118118
$(INSTALL) include/mqtt_protocol.h "${DESTDIR}${prefix}/include/mqtt_protocol.h"
119+
ifeq ($(WITH_EMBEDD_BROKER),yes)
120+
$(INSTALL) include/mosquitto/embedded_broker.h "${DESTDIR}${prefix}/include/mosquitto/"
121+
endif
119122

120123
uninstall :
121124
set -e; for d in ${DIRS}; do $(MAKE) -C $${d} uninstall; done
@@ -133,6 +136,7 @@ uninstall :
133136
rm -f "${DESTDIR}${prefix}/include/mosquitto_plugin.h"
134137
rm -f "${DESTDIR}${prefix}/include/mosquittopp.h"
135138
rm -f "${DESTDIR}${prefix}/include/mqtt_protocol.h"
139+
rm -f "${DESTDIR}${prefix}/include/mosquitto/embedded_broker.h"
136140

137141
dist : reallyclean
138142
set -e; for d in ${DISTDIRS}; do $(MAKE) -C $${d} dist; done

config.mk

+9
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ CLIENT_STATIC_LDADD:=
106106
# Build shared libraries
107107
WITH_SHARED_LIBRARIES:=yes
108108

109+
# Build the broker additionally as a library, which can be used to
110+
# embedd a broker into an own executable.
111+
WITH_EMBEDD_BROKER:=no
112+
109113
# Build with async dns lookup support for bridges (temporary). Requires glibc.
110114
#WITH_ADNS:=yes
111115

@@ -232,6 +236,7 @@ ifeq ($(WITH_SHARED_LIBRARIES),yes)
232236
else
233237
LIBMOSQ:=${R}/lib/libmosquitto.a
234238
endif
239+
235240
LIBMOSQ_COMMON:=-Wl,--whole-archive ${R}/libcommon/libmosquitto_common.a -Wl,--no-whole-archive -lcjson
236241

237242
ifeq ($(WITH_TLS),yes)
@@ -288,6 +293,10 @@ ifeq ($(WITH_COVERAGE),yes)
288293
LOCAL_LDFLAGS+=-coverage
289294
endif
290295

296+
ifeq ($(WITH_SHARED_LIBRARIES),yes)
297+
LOCAL_CFLAGS+=-fPIC
298+
endif
299+
291300
ifeq ($(WITH_FUZZING),yes)
292301
MAKE_ALL+=fuzzing
293302
LOCAL_CPPFLAGS+=-DWITH_FUZZING

fuzzing/broker/Makefile

+7-8
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,36 @@ LOCAL_CPPFLAGS+=-I${R}/include/ -I${R}/src -I${R}/lib -I${R} -I${R}/common -I${R
1717
-DWITH_SYS_TREE -DWITH_TLS -DWITH_TLS_PSK -DWITH_UNIX_SOCKETS -DWITH_WEBSOCKETS=WS_IS_BUILTIN
1818
LOCAL_CXXFLAGS+=-g -Wall -Werror -pthread
1919
LOCAL_LDFLAGS+=
20-
LOCAL_LIBADD+=$(LIB_FUZZING_ENGINE) ${R}/src/mosquitto_broker.a -lssl -lcrypto -lcjson -lm ${R}/libcommon/libmosquitto_common.a -Wl,-Bdynamic -Wl,-Bstatic -largon2 -Wl,-Bdynamic
21-
20+
LOCAL_LIBADD+=$(LIB_FUZZING_ENGINE) ${R}/src/libmosquitto_broker.a -lssl -lcrypto -lcjson -lm ${R}/libcommon/libmosquitto_common.a -Wl,-Bdynamic -Wl,-Bstatic -largon2 -Wl,-Bdynamic
2221
all: $(FUZZERS)
2322

24-
broker_fuzz_acl_file : broker_fuzz_acl_file.cpp ${R}/src/mosquitto_broker.a
23+
broker_fuzz_acl_file : broker_fuzz_acl_file.cpp ${R}/src/libmosquitto_broker.a
2524
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
2625
install $@ ${OUT}/$@
2726
cp ${R}/fuzzing/corpora/broker_acl_file_seed_corpus.zip ${OUT}/$@_seed_corpus.zip
2827
cp ${R}/fuzzing/corpora/broker_acl_file.dict ${OUT}/$@.dict
2928

30-
broker_fuzz_password_file : broker_fuzz_password_file.cpp ${R}/src/mosquitto_broker.a
29+
broker_fuzz_password_file : broker_fuzz_password_file.cpp ${R}/src/libmosquitto_broker.a
3130
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
3231
install $@ ${OUT}/$@
3332
cp ${R}/fuzzing/corpora/broker_password_file_seed_corpus.zip ${OUT}/$@_seed_corpus.zip
3433

35-
broker_fuzz_psk_file : broker_fuzz_psk_file.cpp ${R}/src/mosquitto_broker.a
34+
broker_fuzz_psk_file : broker_fuzz_psk_file.cpp ${R}/src/libmosquitto_broker.a
3635
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
3736
install $@ ${OUT}/$@
3837
cp ${R}/fuzzing/corpora/broker_psk_file_seed_corpus.zip ${OUT}/$@_seed_corpus.zip
3938

40-
broker_fuzz_queue_msg : broker_fuzz_queue_msg.cpp ${R}/src/mosquitto_broker.a
39+
broker_fuzz_queue_msg : broker_fuzz_queue_msg.cpp ${R}/src/libmosquitto_broker.a
4140
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
4241
install $@ ${OUT}/$@
4342
cp ${R}/fuzzing/corpora/broker_queue_msg_seed_corpus.zip ${OUT}/$@_seed_corpus.zip
4443

45-
broker_fuzz_read_handle : broker_fuzz_read_handle.cpp ${R}/src/mosquitto_broker.a
44+
broker_fuzz_read_handle : broker_fuzz_read_handle.cpp ${R}/src/libmosquitto_broker.a
4645
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
4746
install $@ ${OUT}/$@
4847
cp ${R}/fuzzing/corpora/broker_packet_seed_corpus.zip ${OUT}/$@_seed_corpus.zip
4948

50-
broker_fuzz_test_config : broker_fuzz_test_config.cpp ${R}/src/mosquitto_broker.a
49+
broker_fuzz_test_config : broker_fuzz_test_config.cpp ${R}/src/libmosquitto_broker.a
5150
$(CXX) $(LOCAL_CXXFLAGS) $(LOCAL_CPPFLAGS) $(LOCAL_LDFLAGS) -o $@ $< $(LOCAL_LIBADD)
5251
install $@ ${OUT}/$@
5352
cp ${R}/fuzzing/corpora/broker_fuzz_test_config_seed_corpus.zip ${OUT}/$@_seed_corpus.zip

fuzzing/broker/broker_fuzz.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
3333
#define PORT 1883
3434

3535
/* The broker fuzz-only main function. */
36-
extern "C" int mosquitto_fuzz_main(int argc, char *argv[]);
36+
extern "C" int mosquitto_broker_main(int argc, char *argv[]);
3737

3838
void *run_broker(void *args)
3939
{
@@ -45,7 +45,7 @@ void *run_broker(void *args)
4545
argv[2] = strdup("-c");
4646
argv[3] = strdup("/tmp/mosquitto.conf");
4747

48-
mosquitto_fuzz_main(argc, argv);
48+
mosquitto_broker_main(argc, argv);
4949

5050
for(int i=0; i<argc; i++){
5151
free(argv[i]);

fuzzing/broker/broker_fuzz_test_config.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
3030
*/
3131

3232
/* The broker fuzz-only main function. */
33-
extern "C" int mosquitto_fuzz_main(int argc, char *argv[]);
33+
extern "C" int mosquitto_broker_main(int argc, char *argv[]);
3434

3535
void run_broker(char *filename)
3636
{
@@ -43,7 +43,7 @@ void run_broker(char *filename)
4343
argv[3] = strdup("-c");
4444
argv[4] = strdup(filename);
4545

46-
mosquitto_fuzz_main(argc, argv);
46+
mosquitto_broker_main(argc, argv);
4747

4848
for(int i=0; i<argc; i++){
4949
free(argv[i]);

fuzzing/broker/broker_fuzz_with_init.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
3333
#define PORT 1883
3434

3535
/* The broker fuzz-only main function. */
36-
extern "C" int mosquitto_fuzz_main(int argc, char *argv[]);
36+
extern "C" int mosquitto_broker_main(int argc, char *argv[]);
3737

3838
void *run_broker(void *args)
3939
{
@@ -45,7 +45,7 @@ void *run_broker(void *args)
4545
argv[2] = strdup("-c");
4646
argv[3] = strdup("/tmp/mosquitto.conf");
4747

48-
mosquitto_fuzz_main(argc, argv);
48+
mosquitto_broker_main(argc, argv);
4949

5050
for(int i=0; i<argc; i++){
5151
free(argv[i]);

fuzzing/plugins/dynamic-security/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ LOCAL_CXXFLAGS+=-g -Wall -Werror -pthread
1515
LOCAL_LDFLAGS+=
1616
LOCAL_LIBADD+=$(LIB_FUZZING_ENGINE) \
1717
${R}/plugins/dynamic-security/mosquitto_dynamic_security.a \
18-
${R}/src/mosquitto_broker.a \
18+
${R}/src/libmosquitto_broker.a \
1919
${R}/libcommon/libmosquitto_common.a \
2020
-lssl -lcrypto -lcjson -lm \
2121
-Wl,-Bdynamic -Wl,-Bstatic -largon2 -Wl,-Bdynamic

include/mosquitto/embedded_broker.h

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
Copyright (c) 2009-2021 Roger Light <[email protected]>
3+
4+
All rights reserved. This program and the accompanying materials
5+
are made available under the terms of the Eclipse Public License 2.0
6+
and Eclipse Distribution License v1.0 which accompany this distribution.
7+
8+
The Eclipse Public License is available at
9+
https://www.eclipse.org/legal/epl-2.0/
10+
and the Eclipse Distribution License is available at
11+
http://www.eclipse.org/org/documents/edl-v10.php.
12+
13+
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
14+
15+
Contributors:
16+
*/
17+
18+
/*
19+
* File: mosquitto_broker.h
20+
*
21+
* This header contains functions for use by plugins.
22+
*/
23+
#ifndef MOSQUITTO_EMBEDDED_BROKER_H
24+
#define MOSQUITTO_EMBEDDED_BROKER_H
25+
26+
#ifdef __cplusplus
27+
extern "C" {
28+
#endif
29+
30+
#if defined(WIN32) && defined(mosquitto_EXPORTS)
31+
# define mosq_EXPORT __declspec(dllexport)
32+
#else
33+
# define mosq_EXPORT
34+
#endif
35+
36+
mosq_EXPORT int mosquitto_broker_main(int argc, char *argv[]);
37+
38+
mosq_EXPORT void mosquitto_broker_stop();
39+
40+
#ifdef __cplusplus
41+
}
42+
#endif
43+
44+
#endif

0 commit comments

Comments
 (0)