[Skiboot] [PATCH] external: Rework libflash shared library Makefile

Samuel Mendoza-Jonas sam at mendozajonas.com
Wed May 18 11:43:58 AEST 2016


On Tue, May 17, 2016 at 07:53:33AM -0400, Brad Bishop wrote:
> The existing Makefile had a number of issues:
> - Redefined targets, caused make whining
> - Did not build on arm because of -m64
> 
> Start with a new approach:
> - build pflash directory and re-use .o files to assemble the solib.
> - build a version of pflash that uses the the solib
> 
> Signed-off-by: Brad Bishop <bradleyb at fuzziesquirrel.com <mailto:bradleyb at fuzziesquirrel.com>>

Hi Brad,

This looks like you're updating libflash such that pflash can use it as
a shared library, which I like! Unfortunately I'm pretty sure it breaks
the existing use case, which is to install libflash as a shared library
in a buildroot environment (op-build) for Petitboot.
Ideally external/shared should be use-case agnostic, and not know or
care about pflash or Petitboot - but this looks like it makes it a bit
pflash-specific.

> ---
> external/pflash/rules.mk   |  4 +--
> external/shared/.gitignore |  2 ++
> external/shared/Makefile   | 74 +++++++++++++++++++---------------------------
> 3 files changed, 35 insertions(+), 45 deletions(-)
> create mode 100644 external/shared/.gitignore
> 
> diff --git a/external/pflash/rules.mk b/external/pflash/rules.mk
> index aa426b5..c0199e3 100644
> --- a/external/pflash/rules.mk
> +++ b/external/pflash/rules.mk
> @@ -1,12 +1,12 @@
> .DEFAULT_GOAL := all
> 
> override CFLAGS  += -O2 -Wall -I.
> -OBJS    = pflash.o progress.o version.o
> +PFLASH_OBJS    = pflash.o progress.o version.o common-arch_flash.o
> LIBFLASH_FILES := libflash.c libffs.c ecc.c blocklevel.c file.c
> LIBFLASH_OBJS := $(addprefix libflash-, $(LIBFLASH_FILES:.c=.o))
> LIBFLASH_SRC := $(addprefix libflash/,$(LIBFLASH_FILES))
> +OBJS	+= $(PFLASH_OBJS)
> OBJS	+= $(LIBFLASH_OBJS)
> -OBJS	+= common-arch_flash.o
> EXE     = pflash
> 
> PFLASH_VERSION ?= $(shell ../../make_version.sh $(EXE))
> diff --git a/external/shared/.gitignore b/external/shared/.gitignore
> new file mode 100644
> index 0000000..541d2a2
> --- /dev/null
> +++ b/external/shared/.gitignore
> @@ -0,0 +1,2 @@
> +pflash-dynamic
> +libflash.so*
> diff --git a/external/shared/Makefile b/external/shared/Makefile
> index 4c31657..aa1d881 100644
> --- a/external/shared/Makefile
> +++ b/external/shared/Makefile
> @@ -1,56 +1,44 @@
> -.DEFAULT_GOAL := all
> GET_ARCH = ../../external/common/get_arch.sh
> +include ../../external/pflash/rules.mk
> include ../../external/common/rules.mk
> 
> -PREFIX ?= /usr/local/
> -LIBDIR = $(PREFIX)/lib
> -INCDIR = $(PREFIX)/include/libflash

For example this will break installing libflash in op-build.

> +libdir=/usr/lib
> +incdir=/usr/include
> +sbindir=/usr/sbin
> 
> -VERSION = $(shell ../../make_version.sh)
> +PFLASH_DIR=../pflash/
> +EXE=pflash-dynamic
> +LIB=libflash.so
> +SONAME=$(LIB).1
> +VERSION = $(shell ../../make_version.sh "$(SONAME)")
> +OBJS=$(addprefix $(PFLASH_DIR), $(LIBFLASH_OBJS))
> +OBJS+=$(addprefix $(PFLASH_DIR), $(ARCH_OBJS))
> +DYN_OBJS=$(addprefix $(PFLASH_DIR), $(PFLASH_OBJS))
> 
> -CFLAGS += -m64 -Werror -Wall -g2 -ggdb -I. -fPIC
> +LIBFLASH_HEADERS=libffs.h libflash.h blocklevel.h errors.h ffs.h
> +ARCHFLASH_HEADERS=arch_flash.h io.h
> 
> -.PHONY: links
> -links: libflash ccan common
> +all: $(EXE)
> 
> -libflash:
> -	ln -sf ../../libflash .
> +$(LIB):
> +	$(MAKE) -C $(PFLASH_DIR)
> +	$(Q_CC)$(CC) -shared -fPIC -Wl,-soname,$(SONAME) $(OBJS) -o $(VERSION)
> 
> -common:
> -	ln -sf ../common .
> +$(EXE): $(LIB)
> +	$(Q_CC)$(CC) $(CFLAGS) $(DYN_OBJS) $(VERSION) -lrt -o $(EXE)
> 
> -ccan:
> -	ln -sf ../../ccan .
> +install: install-bins install-headers
> 
> -LIBFLASH_OBJS = libflash-file.o libflash-libflash.o libflash-libffs.o libflash-ecc.o libflash-blocklevel.o
> -ARCHFLASH_OBJS = common-arch_flash.o
> -OBJS = $(LIBFLASH_OBJS) $(ARCHFLASH_OBJS)
> +install-headers:
> +	$(Q_MKDIR)mkdir -p $(DESTDIR)$(incdir)/libflash $(DESTDIR)$(incdir)/common
> +	install -m644 $(addprefix $(PFLASH_DIR)libflash/, $(LIBFLASH_HEADERS)) $(DESTDIR)$(incdir)/libflash
> +	install -m644 $(addprefix $(PFLASH_DIR)common/, $(ARCHFLASH_HEADERS)) $(DESTDIR)$(incdir)/common

As does this

> 
> -LIBFLASH_H = libflash/file.h libflash/libflash.h libflash/libffs.h libflash/ffs.h libflash/ecc.h libflash/blocklevel.h libflash/errors.h
> -ARCHFLASH_H = common/arch_flash.h
> -
> -$(LIBFLASH_OBJS) : libflash-%.o : libflash/%.c
> -	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
> +install-bins: all
> +	install -D $(EXE) $(DESTDIR)$(sbindir)/pflash
> +	install -D $(VERSION) $(DESTDIR)$(libdir)/$(VERSION)
> +	$(Q_LN)ln -sf $(VERSION) $(DESTDIR)$(libdir)/$(SONAME)
> +	$(Q_LN)ln -sf $(VERSION) $(DESTDIR)$(libdir)/$(LIB)

And this

> 
> clean:
> -	rm -f $(OBJS) common-*.o *.so*
> -
> -distclean: clean
> -	rm -f ccan libflash common
> -
> -all: links arch_links $(OBJS)
> -	$(CC) -shared -Wl,-soname,libflash.so -o libflash.so.$(VERSION) $(OBJS)
> -
> -install-lib: all
> -	install -D -m 0755 libflash.so.$(VERSION) $(LIBDIR)/libflash.so.$(VERSION)
> -	ln -sf libflash.so.$(VERSION) $(LIBDIR)/libflash.so
> -
> -install-dev: links arch_links
> -	mkdir -p $(INCDIR)
> -	install -m 0644 $(LIBFLASH_H) $(ARCHFLASH_H) $(INCDIR)
> -
> -install: install-lib install-dev
> -
> -uninstall:
> -	rm -f $(LIBDIR)/libflash*
> -	rm -rf $(INCDIR)
> +	rm -rf $(LIB).* $(EXE)
> -- 
> 1.8.3.1
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot



More information about the Skiboot mailing list