From 77bc009e86eb30c9c8911d1727beb5923bd02551 Mon Sep 17 00:00:00 2001 From: Deepak Kodihalli Date: Tue, 14 Mar 2017 07:17:01 -0500 Subject: build: autotools files for libopenpower_dbus.so Use the interface YAML files present to generate the server.cpp and server.hpp files, build them into a shared library, and install. Change-Id: I87217ba299c04b3eb3fac819463707a103a287b5 Signed-off-by: Deepak Kodihalli --- Makefile.am | 15 +++++++++ Makefile.interfaces.in | 1 + bootstrap.sh | 18 +++++++++++ configure.ac | 37 ++++++++++++++++++++++ generate_makefile.sh | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 155 insertions(+) create mode 100644 Makefile.am create mode 100644 Makefile.interfaces.in create mode 100755 bootstrap.sh create mode 100644 configure.ac create mode 100755 generate_makefile.sh diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..6e63e81 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,15 @@ +AM_DEFAULT_SOURCE_EXT = .cpp + +nobase_include_HEADERS = ## These get filled in by Makefile.interfaces + +libopenpower_dbusdir = ${libdir} +libopenpower_dbus_LTLIBRARIES = libopenpower_dbus.la +libopenpower_dbus_la_LDFLAGS = $(SDBUSPLUS_LIBS) -version-info 0:0:0 -shared +libopenpower_dbus_la_CXXFLAGS = $(SDBUSPLUS_CFLAGS) + +BUILT_SOURCES = libopenpower_dbus.cpp +CLEANFILES = libopenpower_dbus.cpp + +clean-local: clean-dbus + +-include Makefile.interfaces diff --git a/Makefile.interfaces.in b/Makefile.interfaces.in new file mode 100644 index 0000000..714e6d0 --- /dev/null +++ b/Makefile.interfaces.in @@ -0,0 +1 @@ +# Empty file so that 'configure' attempts to generate Makefile.interfaces. diff --git a/bootstrap.sh b/bootstrap.sh new file mode 100755 index 0000000..50b75b7 --- /dev/null +++ b/bootstrap.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +AUTOCONF_FILES="Makefile.in aclocal.m4 ar-lib autom4te.cache compile \ + config.guess config.h.in config.sub configure depcomp install-sh \ + ltmain.sh missing *libtool test-driver" + +case $1 in + clean) + test -f Makefile && make maintainer-clean + for file in ${AUTOCONF_FILES}; do + find -name "$file" | xargs -r rm -rf + done + exit 0 + ;; +esac + +autoreconf -i +echo 'Run "./configure ${CONFIGURE_FLAGS} && make"' diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..f194a38 --- /dev/null +++ b/configure.ac @@ -0,0 +1,37 @@ +# Initialization +AC_PREREQ([2.69]) +AC_INIT([openpower-dbus-interfaces], [1.0], [https://github.com/openbmc/openpower-dbus-interfaces]) +AC_CONFIG_HEADERS([config.h]) +AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz]) +AM_SILENT_RULES([yes]) +AC_LANG([C++]) + +# Checks for programs. +AC_PROG_CXX +AM_PROG_AR +AC_PROG_INSTALL +AC_PROG_MAKE_SET +AC_PROG_SED +AC_CHECK_PROG([FIND], find, find) +AC_CHECK_PROG([BASENAME], basename, basename) +AC_CHECK_PROG([DIRNAME], dirname, dirname) + +AC_PATH_PROG([SDBUSPLUSPLUS], [sdbus++]) +AS_IF([test "x$SDBUSPLUSPLUS" == "x"], + AC_MSG_ERROR([Cannot find sdbus++])) + +# Check for baseline language coverage in the compiler for the C++14 standard +AX_CXX_COMPILE_STDCXX_14([noext]) +AX_APPEND_COMPILE_FLAGS([-Wall -Werror], [CFLAGS]) +AX_APPEND_COMPILE_FLAGS([-Wall -Werror], [CXXFLAGS]) + +# Checks for library functions. +LT_INIT([dlopen disable-static shared]) +LT_LIB_DLLOAD + +# Create configured output +AC_CONFIG_FILES([Makefile.interfaces], + [${srcdir}/generate_makefile.sh ${srcdir} > Makefile.interfaces]) + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/generate_makefile.sh b/generate_makefile.sh new file mode 100755 index 0000000..e990966 --- /dev/null +++ b/generate_makefile.sh @@ -0,0 +1,84 @@ +#!/bin/sh + +cd $1 + +toplevel_dirs=org +interfaces=`find $toplevel_dirs -name "*.interface.yaml"` + +for i in ${interfaces}; +do + iface_path=`dirname $i`/`basename $i .interface.yaml` + iface=`echo $iface_path | sed 's/\//./g'` + cat < \$@ + +${i%.interface.yaml}/server.hpp: ${i} + @mkdir -p \`dirname \$@\` + \$(SDBUSPLUSPLUS) -r \$(srcdir) interface server-header ${iface} > \$@ + +MAKEFILE + +done + +errors=`find $toplevel_dirs -name "*.errors.yaml"` + +for e in ${errors}; +do + iface_path=`dirname $e`/`basename $e .errors.yaml` + iface=`echo $iface_path | sed 's/\//./g'` + cat < \$@ + +${e%.errors.yaml}/error.hpp: ${e} + @mkdir -p \`dirname \$@\` + \$(SDBUSPLUSPLUS) -r \$(srcdir) error exception-header ${iface} > \$@ + +MAKEFILE + +done + +echo "libopenpower_dbus_cpp_SOURCES = \\" +for i in ${interfaces}; +do + echo " ${i%.interface.yaml}/server.cpp \\" +done +for e in ${errors}; +do + echo " ${e%.errors.yaml}/error.cpp \\" +done +echo + +echo "libopenpower_dbus_hpp_SOURCES = \\" +for i in ${interfaces}; +do + echo " ${i%.interface.yaml}/server.hpp \\" +done +for e in ${errors}; +do + echo " ${e%.errors.yaml}/error.hpp\\" +done + +echo + +cat << MAKEFILE +libopenpower_dbus.cpp: \$(libopenpower_dbus_cpp_SOURCES) + cat \$^ > \$@ + +nobase_include_HEADERS = \$(libopenpower_dbus_hpp_SOURCES) + +.PHONY: clean-dbus +clean-dbus: + for i in \$(libopenpower_dbus_cpp_SOURCES) \\ + \$(libopenpower_dbus_hpp_SOURCES); \\ + do \\ + test -e \$\$i && rm \$\$i ; \\ + test -d \`dirname \$\$i\` && rmdir -p \`dirname \$\$i\` ; \\ + true; \\ + done +MAKEFILE -- cgit v1.2.1