group all drivers into a single object
This single object also contains the sr_drivers_init function, that will always be referenced. That ensures that the drivers object files won't be optimized out during static linking due to the fact that they are not referenced directly. This addresses (parts of) bug #802.
This commit is contained in:
parent
d1d3d2e0c4
commit
5d8b3913d4
124
Makefile.am
124
Makefile.am
|
@ -167,42 +167,49 @@ libsigrok_la_SOURCES += \
|
|||
src/scale/kern.c
|
||||
|
||||
# Hardware drivers
|
||||
noinst_LTLIBRARIES = src/libdrivers.la
|
||||
|
||||
# This entry must be placed before all drivers
|
||||
libsigrok_la_SOURCES += src/hardware/driver_list_start.c
|
||||
src/libdrivers.o: src/libdrivers.la
|
||||
$(AM_V_CCLD)$(LINK) src/libdrivers.la
|
||||
src/libdrivers.lo: src/libdrivers.o
|
||||
$(AM_V_GEN)echo "# Generated by libtool" > $@
|
||||
$(AM_V_at)echo "pic_object='libdrivers.o'" >> $@
|
||||
$(AM_V_at)echo "non_pic_object='libdrivers.o'" >> $@
|
||||
|
||||
src_libdrivers_la_SOURCES = src/drivers.c
|
||||
|
||||
if HW_AGILENT_DMM
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/agilent-dmm/api.c \
|
||||
src/hardware/agilent-dmm/agilent-dmm.h \
|
||||
src/hardware/agilent-dmm/sched.c
|
||||
endif
|
||||
if HW_APPA_55II
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/appa-55ii/protocol.h \
|
||||
src/hardware/appa-55ii/protocol.c \
|
||||
src/hardware/appa-55ii/api.c
|
||||
endif
|
||||
if HW_ARACHNID_LABS_RE_LOAD_PRO
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/arachnid-labs-re-load-pro/protocol.h \
|
||||
src/hardware/arachnid-labs-re-load-pro/protocol.c \
|
||||
src/hardware/arachnid-labs-re-load-pro/api.c
|
||||
endif
|
||||
if HW_ASIX_SIGMA
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/asix-sigma/protocol.h \
|
||||
src/hardware/asix-sigma/protocol.c \
|
||||
src/hardware/asix-sigma/api.c
|
||||
endif
|
||||
if HW_ATTEN_PPS3XXX
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/atten-pps3xxx/protocol.h \
|
||||
src/hardware/atten-pps3xxx/protocol.c \
|
||||
src/hardware/atten-pps3xxx/api.c
|
||||
endif
|
||||
if HW_BAYLIBRE_ACME
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/baylibre-acme/protocol.h \
|
||||
src/hardware/baylibre-acme/protocol.c \
|
||||
src/hardware/baylibre-acme/api.c \
|
||||
|
@ -210,77 +217,77 @@ libsigrok_la_SOURCES += \
|
|||
src/hardware/baylibre-acme/gpio.c
|
||||
endif
|
||||
if HW_BEAGLELOGIC
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/beaglelogic/beaglelogic.h \
|
||||
src/hardware/beaglelogic/protocol.h \
|
||||
src/hardware/beaglelogic/protocol.c \
|
||||
src/hardware/beaglelogic/api.c
|
||||
endif
|
||||
if HW_BRYMEN_BM86X
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/brymen-bm86x/protocol.h \
|
||||
src/hardware/brymen-bm86x/protocol.c \
|
||||
src/hardware/brymen-bm86x/api.c
|
||||
endif
|
||||
if HW_BRYMEN_DMM
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/brymen-dmm/parser.c \
|
||||
src/hardware/brymen-dmm/protocol.h \
|
||||
src/hardware/brymen-dmm/protocol.c \
|
||||
src/hardware/brymen-dmm/api.c
|
||||
endif
|
||||
if HW_CEM_DT_885X
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/cem-dt-885x/protocol.h \
|
||||
src/hardware/cem-dt-885x/protocol.c \
|
||||
src/hardware/cem-dt-885x/api.c
|
||||
endif
|
||||
if HW_CENTER_3XX
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/center-3xx/protocol.h \
|
||||
src/hardware/center-3xx/protocol.c \
|
||||
src/hardware/center-3xx/api.c
|
||||
endif
|
||||
if HW_CHRONOVU_LA
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/chronovu-la/protocol.h \
|
||||
src/hardware/chronovu-la/protocol.c \
|
||||
src/hardware/chronovu-la/api.c
|
||||
endif
|
||||
if HW_COLEAD_SLM
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/colead-slm/protocol.h \
|
||||
src/hardware/colead-slm/protocol.c \
|
||||
src/hardware/colead-slm/api.c
|
||||
endif
|
||||
if HW_CONRAD_DIGI_35_CPU
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/conrad-digi-35-cpu/protocol.h \
|
||||
src/hardware/conrad-digi-35-cpu/protocol.c \
|
||||
src/hardware/conrad-digi-35-cpu/api.c
|
||||
endif
|
||||
if HW_DEMO
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/demo/demo.c
|
||||
endif
|
||||
if HW_DEREE_DE5000
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/deree-de5000/api.c
|
||||
endif
|
||||
if HW_FLUKE_DMM
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/fluke-dmm/fluke-dmm.h \
|
||||
src/hardware/fluke-dmm/fluke.c \
|
||||
src/hardware/fluke-dmm/api.c
|
||||
endif
|
||||
if HW_FTDI_LA
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/ftdi-la/protocol.h \
|
||||
src/hardware/ftdi-la/protocol.c \
|
||||
src/hardware/ftdi-la/api.c
|
||||
endif
|
||||
if HW_FX2LAFW
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/fx2lafw/protocol.h \
|
||||
src/hardware/fx2lafw/protocol.c \
|
||||
src/hardware/fx2lafw/api.c \
|
||||
|
@ -288,164 +295,164 @@ libsigrok_la_SOURCES += \
|
|||
src/hardware/fx2lafw/dslogic.h
|
||||
endif
|
||||
if HW_GMC_MH_1X_2X
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/gmc-mh-1x-2x/protocol.h \
|
||||
src/hardware/gmc-mh-1x-2x/protocol.c \
|
||||
src/hardware/gmc-mh-1x-2x/api.c
|
||||
endif
|
||||
if HW_GWINSTEK_GDS_800
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/gwinstek-gds-800/protocol.h \
|
||||
src/hardware/gwinstek-gds-800/protocol.c \
|
||||
src/hardware/gwinstek-gds-800/api.c
|
||||
endif
|
||||
if HW_HAMEG_HMO
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/hameg-hmo/protocol.h \
|
||||
src/hardware/hameg-hmo/protocol.c \
|
||||
src/hardware/hameg-hmo/api.c
|
||||
endif
|
||||
if HW_HANTEK_6XXX
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/hantek-6xxx/protocol.h \
|
||||
src/hardware/hantek-6xxx/protocol.c \
|
||||
src/hardware/hantek-6xxx/api.c
|
||||
endif
|
||||
if HW_HANTEK_DSO
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/hantek-dso/dso.h \
|
||||
src/hardware/hantek-dso/dso.c \
|
||||
src/hardware/hantek-dso/api.c
|
||||
endif
|
||||
if HW_HP_3457A
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/hp-3457a/protocol.h \
|
||||
src/hardware/hp-3457a/protocol.c \
|
||||
src/hardware/hp-3457a/api.c
|
||||
endif
|
||||
if HW_HUNG_CHANG_DSO_2100
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/hung-chang-dso-2100/protocol.h \
|
||||
src/hardware/hung-chang-dso-2100/protocol.c \
|
||||
src/hardware/hung-chang-dso-2100/api.c
|
||||
endif
|
||||
if HW_IKALOGIC_SCANALOGIC2
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/ikalogic-scanalogic2/protocol.h \
|
||||
src/hardware/ikalogic-scanalogic2/protocol.c \
|
||||
src/hardware/ikalogic-scanalogic2/api.c
|
||||
endif
|
||||
if HW_IKALOGIC_SCANAPLUS
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/ikalogic-scanaplus/protocol.h \
|
||||
src/hardware/ikalogic-scanaplus/protocol.c \
|
||||
src/hardware/ikalogic-scanaplus/api.c
|
||||
endif
|
||||
if HW_KECHENG_KC_330B
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/kecheng-kc-330b/protocol.h \
|
||||
src/hardware/kecheng-kc-330b/protocol.c \
|
||||
src/hardware/kecheng-kc-330b/api.c
|
||||
endif
|
||||
if HW_KERN_SCALE
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/kern-scale/protocol.h \
|
||||
src/hardware/kern-scale/protocol.c \
|
||||
src/hardware/kern-scale/api.c
|
||||
endif
|
||||
if HW_KORAD_KAXXXXP
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/korad-kaxxxxp/protocol.h \
|
||||
src/hardware/korad-kaxxxxp/protocol.c \
|
||||
src/hardware/korad-kaxxxxp/api.c
|
||||
endif
|
||||
if HW_LASCAR_EL_USB
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/lascar-el-usb/protocol.h \
|
||||
src/hardware/lascar-el-usb/protocol.c \
|
||||
src/hardware/lascar-el-usb/api.c
|
||||
endif
|
||||
if HW_LECROY_LOGICSTUDIO
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/lecroy-logicstudio/protocol.h \
|
||||
src/hardware/lecroy-logicstudio/protocol.c \
|
||||
src/hardware/lecroy-logicstudio/api.c
|
||||
endif
|
||||
if HW_MANSON_HCS_3XXX
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/manson-hcs-3xxx/protocol.h \
|
||||
src/hardware/manson-hcs-3xxx/protocol.c \
|
||||
src/hardware/manson-hcs-3xxx/api.c
|
||||
endif
|
||||
if HW_MAYNUO_M97
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/maynuo-m97/protocol.h \
|
||||
src/hardware/maynuo-m97/protocol.c \
|
||||
src/hardware/maynuo-m97/api.c
|
||||
endif
|
||||
if HW_MIC_985XX
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/mic-985xx/protocol.h \
|
||||
src/hardware/mic-985xx/protocol.c \
|
||||
src/hardware/mic-985xx/api.c
|
||||
endif
|
||||
if HW_MOTECH_LPS_30X
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/motech-lps-30x/protocol.h \
|
||||
src/hardware/motech-lps-30x/protocol.c \
|
||||
src/hardware/motech-lps-30x/api.c
|
||||
endif
|
||||
if HW_NORMA_DMM
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/norma-dmm/protocol.h \
|
||||
src/hardware/norma-dmm/protocol.c \
|
||||
src/hardware/norma-dmm/api.c
|
||||
endif
|
||||
if HW_OPENBENCH_LOGIC_SNIFFER
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/openbench-logic-sniffer/protocol.h \
|
||||
src/hardware/openbench-logic-sniffer/protocol.c \
|
||||
src/hardware/openbench-logic-sniffer/api.c
|
||||
endif
|
||||
if HW_PCE_322A
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/pce-322a/protocol.h \
|
||||
src/hardware/pce-322a/protocol.c \
|
||||
src/hardware/pce-322a/api.c
|
||||
endif
|
||||
if HW_PIPISTRELLO_OLS
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/pipistrello-ols/protocol.h \
|
||||
src/hardware/pipistrello-ols/protocol.c \
|
||||
src/hardware/pipistrello-ols/api.c
|
||||
endif
|
||||
if HW_RIGOL_DS
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/rigol-ds/protocol.h \
|
||||
src/hardware/rigol-ds/protocol.c \
|
||||
src/hardware/rigol-ds/api.c
|
||||
endif
|
||||
if HW_SALEAE_LOGIC16
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/saleae-logic16/protocol.h \
|
||||
src/hardware/saleae-logic16/protocol.c \
|
||||
src/hardware/saleae-logic16/api.c
|
||||
endif
|
||||
if HW_SCPI_PPS
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/scpi-pps/protocol.h \
|
||||
src/hardware/scpi-pps/protocol.c \
|
||||
src/hardware/scpi-pps/profiles.c \
|
||||
src/hardware/scpi-pps/api.c
|
||||
endif
|
||||
if HW_SERIAL_DMM
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/serial-dmm/protocol.h \
|
||||
src/hardware/serial-dmm/protocol.c \
|
||||
src/hardware/serial-dmm/api.c
|
||||
endif
|
||||
if HW_SYSCLK_LWLA
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/sysclk-lwla/lwla.h \
|
||||
src/hardware/sysclk-lwla/lwla.c \
|
||||
src/hardware/sysclk-lwla/lwla1016.c \
|
||||
|
@ -455,43 +462,43 @@ libsigrok_la_SOURCES += \
|
|||
src/hardware/sysclk-lwla/api.c
|
||||
endif
|
||||
if HW_TELEINFO
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/teleinfo/protocol.h \
|
||||
src/hardware/teleinfo/protocol.c \
|
||||
src/hardware/teleinfo/api.c
|
||||
endif
|
||||
if HW_TESTO
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/testo/protocol.h \
|
||||
src/hardware/testo/protocol.c \
|
||||
src/hardware/testo/api.c
|
||||
endif
|
||||
if HW_TONDAJ_SL_814
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/tondaj-sl-814/protocol.h \
|
||||
src/hardware/tondaj-sl-814/protocol.c \
|
||||
src/hardware/tondaj-sl-814/api.c
|
||||
endif
|
||||
if HW_UNI_T_DMM
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/uni-t-dmm/protocol.h \
|
||||
src/hardware/uni-t-dmm/protocol.c \
|
||||
src/hardware/uni-t-dmm/api.c
|
||||
endif
|
||||
if HW_UNI_T_UT32X
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/uni-t-ut32x/protocol.h \
|
||||
src/hardware/uni-t-ut32x/protocol.c \
|
||||
src/hardware/uni-t-ut32x/api.c
|
||||
endif
|
||||
if HW_VICTOR_DMM
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/victor-dmm/protocol.h \
|
||||
src/hardware/victor-dmm/protocol.c \
|
||||
src/hardware/victor-dmm/api.c
|
||||
endif
|
||||
if HW_YOKOGAWA_DLM
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/yokogawa-dlm/protocol.h \
|
||||
src/hardware/yokogawa-dlm/protocol.c \
|
||||
src/hardware/yokogawa-dlm/protocol_wrappers.h \
|
||||
|
@ -499,7 +506,7 @@ libsigrok_la_SOURCES += \
|
|||
src/hardware/yokogawa-dlm/api.c
|
||||
endif
|
||||
if HW_ZEROPLUS_LOGIC_CUBE
|
||||
libsigrok_la_SOURCES += \
|
||||
src_libdrivers_la_SOURCES += \
|
||||
src/hardware/zeroplus-logic-cube/analyzer.c \
|
||||
src/hardware/zeroplus-logic-cube/analyzer.h \
|
||||
src/hardware/zeroplus-logic-cube/gl_usb.h \
|
||||
|
@ -509,10 +516,7 @@ libsigrok_la_SOURCES += \
|
|||
src/hardware/zeroplus-logic-cube/api.c
|
||||
endif
|
||||
|
||||
# This entry must be placed after all drivers
|
||||
libsigrok_la_SOURCES += src/hardware/driver_list_end.c
|
||||
|
||||
libsigrok_la_LIBADD = $(SR_EXTRA_LIBS) $(LIBSIGROK_LIBS)
|
||||
libsigrok_la_LIBADD = src/libdrivers.lo $(SR_EXTRA_LIBS) $(LIBSIGROK_LIBS)
|
||||
libsigrok_la_LDFLAGS = -version-info $(SR_LIB_VERSION) -no-undefined
|
||||
|
||||
library_includedir = $(includedir)/libsigrok
|
||||
|
|
12
configure.ac
12
configure.ac
|
@ -174,18 +174,6 @@ AM_CONDITIONAL([NEED_RPC], [test "x$sr_cv_have_rpc" = xyes])
|
|||
# Check for compiler support of 128 bit integers
|
||||
AC_CHECK_TYPES([__int128_t, __uint128_t], [], [], [])
|
||||
|
||||
# Linker flag to retain the objects of a static lib that are not referenced
|
||||
AX_CHECK_LINK_FLAG([-Wl,--whole-archive -Wl,--no-whole-archive],
|
||||
[SR_LINK_BEFORE_LIB=-Wl,--whole-archive
|
||||
SR_LINK_AFTER_LIB=-Wl,--no-whole-archive], [
|
||||
AX_CHECK_LINK_FLAG([-Wl,-force_load],
|
||||
[SR_LINK_BEFORE_LIB=-Wl,-force_load
|
||||
SR_LINK_AFTER_LIB=],
|
||||
[SR_LINK_BEFORE_LIB=
|
||||
SR_LINK_AFTER_LIB=])])
|
||||
AC_SUBST(SR_LINK_BEFORE_LIB)
|
||||
AC_SUBST(SR_LINK_AFTER_LIB)
|
||||
|
||||
########################
|
||||
## Hardware drivers ##
|
||||
########################
|
||||
|
|
|
@ -9,6 +9,6 @@ URL: http://www.sigrok.org
|
|||
Requires: glib-2.0
|
||||
Requires.private: @SR_PKGLIBS@
|
||||
Version: @SR_PACKAGE_VERSION@
|
||||
Libs: -L${libdir} @SR_LINK_BEFORE_LIB@ -lsigrok @SR_LINK_AFTER_LIB@
|
||||
Libs: -L${libdir} -lsigrok
|
||||
Libs.private: @SR_EXTRA_LIBS@
|
||||
Cflags: -I${includedir}
|
||||
|
|
|
@ -448,8 +448,6 @@ static int sanity_check_all_transform_modules(void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
extern struct sr_dev_driver *sr_driver_list_start;
|
||||
|
||||
/**
|
||||
* Initialize libsigrok.
|
||||
*
|
||||
|
@ -470,8 +468,6 @@ SR_API int sr_init(struct sr_context **ctx)
|
|||
{
|
||||
int ret = SR_ERR;
|
||||
struct sr_context *context;
|
||||
struct sr_dev_driver **drivers;
|
||||
GArray *array;
|
||||
#ifdef _WIN32
|
||||
WSADATA wsadata;
|
||||
#endif
|
||||
|
@ -485,12 +481,7 @@ SR_API int sr_init(struct sr_context **ctx)
|
|||
|
||||
context = g_malloc0(sizeof(struct sr_context));
|
||||
|
||||
/* Generate ctx->driver_list at runtime. */
|
||||
array = g_array_new(TRUE, FALSE, sizeof(struct sr_dev_driver *));
|
||||
for (drivers = (&sr_driver_list_start) + 1; *drivers; drivers++)
|
||||
g_array_append_val(array, *drivers);
|
||||
context->driver_list = (struct sr_dev_driver **)array->data;
|
||||
g_array_free(array, FALSE);
|
||||
sr_drivers_init(context);
|
||||
|
||||
if (sanity_check_all_drivers(context) < 0) {
|
||||
sr_err("Internal driver error(s), aborting.");
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* This file is part of the libsigrok project.
|
||||
*
|
||||
* Copyright (C) 2016 Lars-Peter Clausen <lars@metafoo.de>
|
||||
* Copyright (C) 2016 Aurelien Jacobs <aurel@gnuage.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <glib.h>
|
||||
#include <libsigrok/libsigrok.h>
|
||||
#include "libsigrok-internal.h"
|
||||
|
||||
/*
|
||||
* sr_driver_list is a special section contains pointers to all the hardware
|
||||
* drivers built into the library. The __start and __stop symbols are
|
||||
* auto-generated by the linker (OSX needs a little help) and point to the start
|
||||
* and end of the section. They are used to iterate over the list of all
|
||||
* drivers.
|
||||
*/
|
||||
#ifdef __APPLE__
|
||||
extern struct sr_dev_driver *__start_sr_driver_list __asm("section$start$__DATA$__sr_driver_list");
|
||||
extern struct sr_dev_driver *__stop_sr_driver_list __asm("section$end$__DATA$__sr_driver_list");
|
||||
#else
|
||||
extern struct sr_dev_driver *__start_sr_driver_list;
|
||||
extern struct sr_dev_driver *__stop_sr_driver_list;
|
||||
#endif
|
||||
|
||||
/** @private
|
||||
* Initialize the driver list in a fresh libsigrok context.
|
||||
*
|
||||
* @param ctx Pointer to a libsigrok context struct. Must not be NULL.
|
||||
*/
|
||||
SR_PRIV void sr_drivers_init(struct sr_context *ctx)
|
||||
{
|
||||
struct sr_dev_driver **drivers;
|
||||
GArray *array;
|
||||
|
||||
array = g_array_new(TRUE, FALSE, sizeof(struct sr_dev_driver *));
|
||||
for (drivers = &__start_sr_driver_list; drivers < &__stop_sr_driver_list;
|
||||
drivers++)
|
||||
g_array_append_val(array, *drivers);
|
||||
ctx->driver_list = (struct sr_dev_driver **)array->data;
|
||||
g_array_free(array, FALSE);
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
/*
|
||||
* This file is part of the libsigrok project.
|
||||
*
|
||||
* Copyright (C) 2016 Lars-Peter Clausen <lars@metafoo.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <libsigrok/libsigrok.h>
|
||||
#include "libsigrok-internal.h"
|
||||
|
||||
/* End of the driver list */
|
||||
static struct sr_dev_driver *sr_driver_list_end
|
||||
__attribute__((section (SR_DRIVER_LIST_SECTION), used,
|
||||
aligned(sizeof(struct sr_dev_driver *)))) = NULL;
|
|
@ -1,26 +0,0 @@
|
|||
/*
|
||||
* This file is part of the libsigrok project.
|
||||
*
|
||||
* Copyright (C) 2016 Lars-Peter Clausen <lars@metafoo.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <libsigrok/libsigrok.h>
|
||||
#include "libsigrok-internal.h"
|
||||
|
||||
/* Beginning of the driver list */
|
||||
const struct sr_dev_driver *sr_driver_list_start
|
||||
__attribute__((section (SR_DRIVER_LIST_SECTION), used,
|
||||
aligned(sizeof(struct sr_dev_driver *)))) = NULL;
|
|
@ -332,6 +332,8 @@ struct zip_stat;
|
|||
#define SR_REGISTER_DEV_DRIVER(name) \
|
||||
SR_REGISTER_DEV_DRIVER_LIST(name##_list, &name);
|
||||
|
||||
SR_PRIV void sr_drivers_init(struct sr_context *context);
|
||||
|
||||
struct sr_context {
|
||||
struct sr_dev_driver **driver_list;
|
||||
#ifdef HAVE_LIBUSB_1_0
|
||||
|
|
Loading…
Reference in New Issue