diff options
author | Hannes Reinecke <hare@suse.de> | 2021-08-25 08:20:16 +0200 |
---|---|---|
committer | Hannes Reinecke <hare@suse.de> | 2021-08-25 16:27:46 +0200 |
commit | e6f3753403a3ddbbec44d8a64e632438046e7fa2 (patch) | |
tree | 13f9334b708153a6bfce71a4245e81192dcb5c90 | |
parent | 58e879ba60afc60a7d86f4d8c9ef185c4e597aa1 (diff) | |
download | mdadm-shlib.tar.gz |
mdadm: build against shared libraryshlib
Build shared and static library and build mdadm against the
shared library.
Signed-off-by: Hannes Reinecke <hare@suse.de>
-rw-r--r-- | .gitignore | 5 | ||||
-rw-r--r-- | Makefile | 69 | ||||
-rw-r--r-- | libmdadm.map | 88 |
3 files changed, 137 insertions, 25 deletions
@@ -1,6 +1,11 @@ /*.o +/*.ol /*.man /*-stamp +/libmdadm.map +/libmdadm.a +/libmdadm.so +/libmdadm.so.* /mdadm /mdadm.8 /mdadm.udeb @@ -107,6 +107,9 @@ DVERS = $(if $(VERSION),-DVERSION=\"$(VERSION)\",) DDATE = $(if $(VERS_DATE),-DVERS_DATE="\"$(VERS_DATE)\"",) DEXTRAVERSION = $(if $(EXTRAVERSION),-DEXTRAVERSION="\" - $(EXTRAVERSION)\"",) CFLAGS += $(DVERS) $(DDATE) $(DEXTRAVERSION) +LIB_VERS = $(shell [ -d .git ] && git describe HEAD | cut -f 2 -d -) +LIB_MAJ = $(basename $(LIB_VERS)) +LIB_MIN = $(shell [ -d .git ] && git describe HEAD | cut -f 3 -d -) # The glibc TLS ABI requires applications that call clone(2) to set up # TLS data structures, use pthreads until mdmon implements this support @@ -145,31 +148,34 @@ else ECHO=: endif -OBJS = mdadm.o config.o policy.o mdstat.o ReadMe.o uuid.o util.o maps.o lib.o \ - Manage.o Assemble.o Build.o \ - Create.o Detail.o Examine.o Grow.o Monitor.o dlink.o Kill.o Query.o \ - Incremental.o Dump.o \ - mdopen.o super0.o super1.o super-ddf.o super-intel.o bitmap.o \ - super-mbr.o super-gpt.o \ - restripe.o sysfs.o sha1.o mapfile.o crc32.o sg_io.o msg.o \ - platform-intel.o probe_roms.o crc32c.o +LIB_SRCS = config.c policy.c mdstat.c uuid.c util.c maps.c lib.c \ + Manage.c Assemble.c Build.c Create.c Detail.c Examine.c Grow.c \ + Monitor.c dlink.c Kill.c Query.c Incremental.c Dump.c \ + mdopen.c super0.c super1.c super-ddf.c super-intel.c bitmap.c \ + super-mbr.c super-gpt.c \ + restripe.c sysfs.c sha1.c mapfile.c crc32.c sg_io.c msg.c \ + platform-intel.c probe_roms.c crc32c.c -CHECK_OBJS = restripe.o uuid.o sysfs.o maps.o lib.o dlink.o +LIBNAME = libmdadm.so +SONAME = $(LIBNAME).$(LIB_MAJ) +SHLIB = $(LIBNAME).$(LIB_VERS).$(LIB_MIN) +LIB = libmdadm.a +MAP = libmdadm.map -SRCS = $(patsubst %.o,%.c,$(OBJS)) +LIB_OBJS = $(patsubst %.c,%.o,$(LIB_SRCS)) +SHLIB_OBJS = $(patsubst %.c,%.ol,$(LIB_SRCS)) INCL = mdadm.h mdadm_internal.h part.h bitmap.h bswap.h config.h debug.h \ lib.h mapfile.h mdstat.h policy.h reshape.h restripe.h super.h \ sysfs.h uuid.h -MON_OBJS = mdmon.o monitor.o managemon.o uuid.o util.o maps.o mdstat.o sysfs.o \ - policy.o lib.o config.o mapfile.o \ - Kill.o sg_io.o dlink.o ReadMe.o super-intel.o \ - super0.o super1.o super-mbr.o super-gpt.o \ - super-ddf.o sha1.o crc32.o msg.o bitmap.o \ - platform-intel.o probe_roms.o crc32c.o +ADM_SRCS = mdadm.c ReadMe.c +ADM_OBJS = $(patsubst %.c,%.o,$(ADM_SRCS)) -MON_SRCS = $(patsubst %.o,%.c,$(MON_OBJS)) +MON_SRCS = mdmon.c monitor.c managemon.c +MON_OBJS = $(patsubst %.c,%.o,$(MON_SRCS)) + +MON_INCL = $(INCL) mdmon.h STATICSRC = pwgr.c STATICOBJS = pwgr.o @@ -194,11 +200,23 @@ everything-test: all mdadm.static swap_super test_stripe \ %.o: %.c $(CC) $(CFLAGS) $(CPPFLAGS) $(COVERITY_FLAGS) -o $@ -c $< -mdadm : $(OBJS) | check_rundir - $(CC) $(CFLAGS) $(LDFLAGS) -o mdadm $(OBJS) $(LDLIBS) +%.ol: %.c + $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) $(COVERITY_FLAGS) -shared -o $@ -c $< + +$(LIB): $(LIB_OBJS) + rm -f $(LIB) + $(AR) r $(LIB) $(LIB_OBJS) + ranlib $(LIB) + +$(SHLIB): $(SHLIB_OBJS) $(MAP) + $(CC) $(LDFLAGS) -shared -Wl,-soname,$(SONAME) -Wl,--version-script,$(MAP) -o $@ $(SHLIB_OBJS) $(LINK_FLAGS) $(LDLIBS) + ln -sf $(SHLIB) $(LIBNAME) + +mdadm : $(ADM_OBJS) $(SHLIB) | check_rundir + $(CC) $(CFLAGS) $(LDFLAGS) -L. -o mdadm $(ADM_OBJS) -lmdadm $(LDLIBS) -mdadm.static : $(OBJS) $(STATICOBJS) - $(CC) $(CFLAGS) $(LDFLAGS) -static -o mdadm.static $(OBJS) $(STATICOBJS) $(LDLIBS) +mdadm.static : $(ADM_OBJS) $(LIB) + $(CC) $(CFLAGS) $(LDFLAGS) -static -o mdadm.static $(ADM_OBJS) $(LIB) $(LDLIBS) mdadm.tcc : $(SRCS) $(INCL) mdadm_exec.h $(TCC) -o mdadm.tcc $(SRCS) @@ -213,12 +231,12 @@ mdadm.Os : $(SRCS) $(INCL) mdadm_exec.h mdadm.O2 : $(SRCS) $(INCL) mdadm_exec.h mdmon.O2 $(CC) -o mdadm.O2 $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -DHAVE_STDINT_H -O2 -D_FORTIFY_SOURCE=2 $(SRCS) $(LDLIBS) -mdmon.O2 : $(MON_SRCS) $(INCL) mdmon.h mdadm_exec.h +mdmon.O2 : $(MON_SRCS) $(MON_INCL) mdadm_exec.h $(CC) -o mdmon.O2 $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(MON_LDFLAGS) -DHAVE_STDINT_H -O2 -D_FORTIFY_SOURCE=2 $(MON_SRCS) $(LDLIBS) # use '-z now' to guarantee no dynamic linker interactions with the monitor thread -mdmon : $(MON_OBJS) | check_rundir - $(CC) $(CFLAGS) $(LDFLAGS) $(MON_LDFLAGS) -Wl,-z,now -o mdmon $(MON_OBJS) $(LDLIBS) +mdmon : $(MON_OBJS) $(LIB) | check_rundir + $(CC) $(CFLAGS) $(LDFLAGS) $(MON_LDFLAGS) -Wl,-z,now -o mdmon $(MON_OBJS) $(LIB) $(LDLIBS) msg.o: msg.c msg.h test_stripe : restripe.c mdadm.h @@ -313,7 +331,8 @@ test: mdadm mdmon test_stripe swap_super raid6check @echo "Please run './test' as root" clean : - rm -f mdadm mdmon $(OBJS) $(MON_OBJS) $(STATICOBJS) core *.man \ + rm -f mdadm mdmon $(ADM_OBJS) $(MON_OBJS) $(STATICOBJS) core *.man \ + $(LIB_OBJS) $(SHLIB_OBJS) $(LIB) $(LIBNAME) $(LIBNAME).* \ mdadm.tcc mdadm.uclibc mdadm.static *.orig *.porig *.rej *.alt \ .merge_file_* mdadm.Os mdadm.O2 mdmon.O2 swap_super init.cpio.gz \ mdadm.uclibc.static test_stripe raid6check raid6check.o mdmon mdadm.8 diff --git a/libmdadm.map b/libmdadm.map new file mode 100644 index 00000000..3ac17051 --- /dev/null +++ b/libmdadm.map @@ -0,0 +1,88 @@ +LIBMDADM_4.1 { + global: + mdadm_manage_ro; + mdadm_manage_run; + mdadm_manage_stop; + mdadm_manage_subdevs; + mdadm_update_subarray; + mdadm_autodetect; + mdadm_set_action; + mdadm_stop_scan; + mdadm_grow_add_device; + mdadm_grow_add_bitmap; + mdadm_grow_reshape; + mdadm_grow_restart; + mdadm_grow_continue; + mdadm_grow_consistency_policy; + mdadm_grow_continue_command; + mdadm_grow_set_size; + mdadm_assemble; + mdadm_scan_assemble; + mdadm_build; + mdadm_create; + mdadm_query; + mdadm_detail; + mdadm_detail_platform; + mdadm_misc_scan; + mdadm_query; + mdadm_examine; + mdadm_examine_badblocks; + mdadm_monitor; + mdadm_wait; + mdadm_wait_clean; + mdadm_kill; + mdadm_kill_subarray; + mdadm_incremental; + mdadm_incremental_scan; + mdadm_incremental_remove; + mdadm_dump_metadata; + mdadm_restore_metadata; + mdlib_get_conffile; + mdlib_set_conffile; + mdlib_set_name; + mdlib_get_name; + mdlib_get_version; + mdadm_rebuild_map; + mdadm_create_bitmap; + mdadm_examine_bitmap; + mdadm_write_rules; + mdadm_get_layout; + mdadm_default_layout; + mdadm_personality_num; + mdadm_personality_name; + mdadm_consistency_policy_num; + mdadm_consistency_policy_name; + mdadm_raid_layout_name; + mdadm_raid_layout_num; + mdadm_faulty_layout; + mdadm_array_state_num; + mdadm_array_state_name; + mdadm_assemble_status; + get_linux_version; + mdadm_version; + mdlib_manage_fork_fds; + mdadm_parse_size; + mdadm_parse_uuid; + mdadm_parse_num; + mdadm_parse_cluster_confirm_arg; + mdadm_parse_auto; + mdadm_parse_devname; + mdadm_open_dev; + mdadm_open_mddev; + mdmon_running; + mdmon_pid; + start_mdmon; + mdadm_set_metadata_handler; + mdadm_lookup_supertype; + mdadm_add_to_super; + mdadm_remove_from_super; + mdadm_write_init_super; + mdlib_set_hooks; + mdlib_set_homecluster; + mdlib_set_homehost; + mdlib_cluster_get_dlmlock; + mdlib_cluster_release_dlmlock; + mdadm_cluster_is_locked; + local: + *; +}; |