From 11a9320de54759340531177c9f2b1e31e6112cc2 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Tue, 26 Mar 2013 01:11:11 +0100 Subject: build: Move build-system-related helper files to a separate subdirectory This unclutters the top-level directory and groups related files together. --- avbuild/.gitignore | 4 +++ avbuild/arch.mak | 11 +++++++ avbuild/common.mak | 63 ++++++++++++++++++++++++++++++++++++ avbuild/library.mak | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++ avbuild/version.sh | 26 +++++++++++++++ 5 files changed, 196 insertions(+) create mode 100644 avbuild/.gitignore create mode 100644 avbuild/arch.mak create mode 100644 avbuild/common.mak create mode 100644 avbuild/library.mak create mode 100755 avbuild/version.sh (limited to 'avbuild') diff --git a/avbuild/.gitignore b/avbuild/.gitignore new file mode 100644 index 0000000000..693b7aa0d3 --- /dev/null +++ b/avbuild/.gitignore @@ -0,0 +1,4 @@ +/.config +/config.fate +/config.log +/config.mak diff --git a/avbuild/arch.mak b/avbuild/arch.mak new file mode 100644 index 0000000000..720062af72 --- /dev/null +++ b/avbuild/arch.mak @@ -0,0 +1,11 @@ +OBJS-$(HAVE_ARMV5TE) += $(ARMV5TE-OBJS) $(ARMV5TE-OBJS-yes) +OBJS-$(HAVE_ARMV6) += $(ARMV6-OBJS) $(ARMV6-OBJS-yes) +OBJS-$(HAVE_ARMV8) += $(ARMV8-OBJS) $(ARMV8-OBJS-yes) +OBJS-$(HAVE_VFP) += $(VFP-OBJS) $(VFP-OBJS-yes) +OBJS-$(HAVE_NEON) += $(NEON-OBJS) $(NEON-OBJS-yes) + +OBJS-$(HAVE_ALTIVEC) += $(ALTIVEC-OBJS) $(ALTIVEC-OBJS-yes) +OBJS-$(HAVE_VSX) += $(VSX-OBJS) $(VSX-OBJS-yes) + +OBJS-$(HAVE_MMX) += $(MMX-OBJS) $(MMX-OBJS-yes) +OBJS-$(HAVE_YASM) += $(YASM-OBJS) $(YASM-OBJS-yes) diff --git a/avbuild/common.mak b/avbuild/common.mak new file mode 100644 index 0000000000..96762949cc --- /dev/null +++ b/avbuild/common.mak @@ -0,0 +1,63 @@ +# +# common bits used by all libraries +# + +include $(SRC_PATH)/avbuild/arch.mak + +OBJS += $(OBJS-yes) +FFLIBS := $($(NAME)_FFLIBS) $(FFLIBS-yes) $(FFLIBS) +TESTPROGS += $(TESTPROGS-yes) + +FFEXTRALIBS := $(FFLIBS:%=$(LD_LIB)) $(EXTRALIBS) + +OBJS := $(sort $(OBJS:%=$(SUBDIR)%)) +TESTOBJS := $(TESTOBJS:%=$(SUBDIR)tests/%) $(TESTPROGS:%=$(SUBDIR)tests/%.o) +TESTPROGS := $(TESTPROGS:%=$(SUBDIR)tests/%$(EXESUF)) +HOSTOBJS := $(HOSTPROGS:%=$(SUBDIR)%.o) +HOSTPROGS := $(HOSTPROGS:%=$(SUBDIR)%$(HOSTEXESUF)) +TOOLS += $(TOOLS-yes) +TOOLOBJS := $(TOOLS:%=tools/%.o) +TOOLS := $(TOOLS:%=tools/%$(EXESUF)) +HEADERS += $(HEADERS-yes) + +PATH_LIBNAME = $(foreach NAME,$(1),lib$(NAME)/$($(2)LIBNAME)) +DEP_LIBS := $(foreach lib,$(FFLIBS),$(call PATH_LIBNAME,$(lib),$(CONFIG_SHARED:yes=S))) +STATIC_DEP_LIBS := $(foreach lib,$(FFLIBS),$(call PATH_LIBNAME,$(lib))) + +SRC_DIR := $(SRC_PATH)/lib$(NAME) +ALLHEADERS := $(subst $(SRC_DIR)/,$(SUBDIR),$(wildcard $(SRC_DIR)/*.h $(SRC_DIR)/$(ARCH)/*.h)) +SKIPHEADERS += $(ARCH_HEADERS:%=$(ARCH)/%) $(SKIPHEADERS-) +SKIPHEADERS := $(SKIPHEADERS:%=$(SUBDIR)%) +HOBJS = $(filter-out $(SKIPHEADERS:.h=.h.o),$(ALLHEADERS:.h=.h.o)) +$(HOBJS): CCFLAGS += $(CFLAGS_HEADERS) +checkheaders: $(HOBJS) +.SECONDARY: $(HOBJS:.o=.c) + +alltools: $(TOOLS) + +$(HOSTOBJS): %.o: %.c + $(COMPILE_HOSTC) + +$(HOSTPROGS): %$(HOSTEXESUF): %.o + $(HOSTLD) $(HOSTLDFLAGS) $(HOSTLD_O) $^ $(HOSTEXTRALIBS) + +$(OBJS): | $(sort $(dir $(OBJS))) +$(HOBJS): | $(sort $(dir $(HOBJS))) +$(HOSTOBJS): | $(sort $(dir $(HOSTOBJS))) +$(TESTOBJS): | $(sort $(dir $(TESTOBJS))) +$(TOOLOBJS): | tools + +OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(TESTOBJS)) + +CLEANSUFFIXES = *.d *.o *~ *.h.c *.gcda *.gcno *.map *.ver +DISTCLEANSUFFIXES = *.pc +LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a + +define RULES +clean:: + $(RM) $(HOSTPROGS) $(TESTPROGS) $(TOOLS) +endef + +$(eval $(RULES)) + +-include $(wildcard $(OBJS:.o=.d) $(HOSTOBJS:.o=.d) $(TESTOBJS:.o=.d) $(HOBJS:.o=.d)) diff --git a/avbuild/library.mak b/avbuild/library.mak new file mode 100644 index 0000000000..9215a93a2c --- /dev/null +++ b/avbuild/library.mak @@ -0,0 +1,92 @@ +include $(SRC_PATH)/avbuild/common.mak + +LIBVERSION := $(lib$(NAME)_VERSION) +LIBMAJOR := $(lib$(NAME)_VERSION_MAJOR) +LIBMINOR := $(lib$(NAME)_VERSION_MINOR) +INCINSTDIR := $(INCDIR)/lib$(NAME) + +INSTHEADERS := $(INSTHEADERS) $(HEADERS:%=$(SUBDIR)%) + +all-$(CONFIG_STATIC): $(SUBDIR)$(LIBNAME) +all-$(CONFIG_SHARED): $(SUBDIR)$(SLIBNAME) + +LIBOBJS := $(OBJS) $(SUBDIR)%.h.o $(TESTOBJS) +$(LIBOBJS) $(LIBOBJS:.o=.i): CPPFLAGS += -DHAVE_AV_CONFIG_H + +$(SUBDIR)$(LIBNAME): $(OBJS) + $(RM) $@ + $(AR) $(ARFLAGS) $(AR_O) $^ + $(RANLIB) $@ + +install-headers: install-lib$(NAME)-headers install-lib$(NAME)-pkgconfig + +install-libs-$(CONFIG_STATIC): install-lib$(NAME)-static +install-libs-$(CONFIG_SHARED): install-lib$(NAME)-shared + +define RULES +$(TOOLS): THISLIB = $(NAME:%=$(LD_LIB)) +$(TESTPROGS): THISLIB = $(SUBDIR)$(LIBNAME) + +$(TESTPROGS) $(TOOLS): %$(EXESUF): %.o + $$(LD) $(LDFLAGS) $(LDEXEFLAGS) $$(LD_O) $$(filter %.o,$$^) $$(THISLIB) $(FFEXTRALIBS) $$(ELIBS) + +$(SUBDIR)lib$(NAME).ver: $(SUBDIR)lib$(NAME).v $(OBJS) + $$(M)sed 's/MAJOR/$(lib$(NAME)_VERSION_MAJOR)/' $$< | $(VERSION_SCRIPT_POSTPROCESS_CMD) > $$@ + +$(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) + $(Q)cd ./$(SUBDIR) && $(LN_S) $(SLIBNAME_WITH_MAJOR) $(SLIBNAME) + +$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SUBDIR)lib$(NAME).ver $(DEP_LIBS) + $(SLIB_CREATE_DEF_CMD) + $$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS) + $(SLIB_EXTRA_CMD) + +clean:: + $(RM) $(addprefix $(SUBDIR),$(CLEANFILES) $(CLEANSUFFIXES) $(LIBSUFFIXES)) \ + $(CLEANSUFFIXES:%=$(SUBDIR)$(ARCH)/%) $(CLEANSUFFIXES:%=$(SUBDIR)tests/%) + +distclean:: clean + $(RM) $(DISTCLEANSUFFIXES:%=$(SUBDIR)%) $(DISTCLEANSUFFIXES:%=$(SUBDIR)$(ARCH)/%) \ + $(DISTCLEANSUFFIXES:%=$(SUBDIR)tests/%) + +install-lib$(NAME)-shared: $(SUBDIR)$(SLIBNAME) + $(Q)mkdir -p "$(SHLIBDIR)" + $$(INSTALL) -m 755 $$< "$(SHLIBDIR)/$(SLIB_INSTALL_NAME)" + $(Q)$(foreach F,$(SLIB_INSTALL_LINKS),cd "$(SHLIBDIR)" && $(LN_S) $(SLIB_INSTALL_NAME) $(F);) + $(if $(SLIB_INSTALL_EXTRA_SHLIB),$$(INSTALL) -m 644 $(SLIB_INSTALL_EXTRA_SHLIB:%=$(SUBDIR)%) "$(SHLIBDIR)") + $(if $(SLIB_INSTALL_EXTRA_LIB),$(Q)mkdir -p "$(LIBDIR)") + $(if $(SLIB_INSTALL_EXTRA_LIB),$$(INSTALL) -m 644 $(SLIB_INSTALL_EXTRA_LIB:%=$(SUBDIR)%) "$(LIBDIR)") + +install-lib$(NAME)-static: $(SUBDIR)$(LIBNAME) + $(Q)mkdir -p "$(LIBDIR)" + $$(INSTALL) -m 644 $$< "$(LIBDIR)" + $(LIB_INSTALL_EXTRA_CMD) + +install-lib$(NAME)-headers: $(addprefix $(SUBDIR),$(HEADERS) $(BUILT_HEADERS)) + $(Q)mkdir -p "$(INCINSTDIR)" + $$(INSTALL) -m 644 $$^ "$(INCINSTDIR)" + +install-lib$(NAME)-pkgconfig: $(SUBDIR)lib$(NAME).pc + $(Q)mkdir -p "$(LIBDIR)/pkgconfig" + $$(INSTALL) -m 644 $$^ "$(LIBDIR)/pkgconfig" + +uninstall-libs:: + -$(RM) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR)" \ + "$(SHLIBDIR)/$(SLIBNAME)" \ + "$(SHLIBDIR)/$(SLIBNAME_WITH_VERSION)" + -$(RM) $(SLIB_INSTALL_EXTRA_SHLIB:%="$(SHLIBDIR)"%) + -$(RM) $(SLIB_INSTALL_EXTRA_LIB:%="$(LIBDIR)"%) + -$(RM) "$(LIBDIR)/$(LIBNAME)" + +uninstall-headers:: + $(RM) $(addprefix "$(INCINSTDIR)/",$(HEADERS) $(BUILT_HEADERS)) + $(RM) "$(LIBDIR)/pkgconfig/lib$(NAME).pc" + -rmdir "$(INCINSTDIR)" +endef + +$(eval $(RULES)) + +$(TOOLS): $(DEP_LIBS) $(SUBDIR)$($(CONFIG_SHARED:yes=S)LIBNAME) +$(TESTPROGS): $(DEP_LIBS) $(SUBDIR)$(LIBNAME) + +testprogs: $(TESTPROGS) diff --git a/avbuild/version.sh b/avbuild/version.sh new file mode 100755 index 0000000000..4689627869 --- /dev/null +++ b/avbuild/version.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +# check for git short hash +revision=$(cd "$1" && git describe --always 2> /dev/null) + +# no revision number found +test "$revision" || revision=$(cd "$1" && cat RELEASE 2> /dev/null) + +# releases extract the version number from the VERSION file +version=$(cd "$1" && cat VERSION 2> /dev/null) +test "$version" || version=$revision + +test -n "$3" && version=$version-$3 + +if [ -z "$2" ]; then + echo "$version" + exit +fi + +NEW_REVISION="#define LIBAV_VERSION \"$version\"" +OLD_REVISION=$(cat "$2" 2> /dev/null) + +# Update version.h only on revision changes to avoid spurious rebuilds +if test "$NEW_REVISION" != "$OLD_REVISION"; then + echo "$NEW_REVISION" > "$2" +fi -- cgit v1.2.3