From patchwork Sat Jun 21 21:20:17 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anders Roxell X-Patchwork-Id: 32306 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ig0-f198.google.com (mail-ig0-f198.google.com [209.85.213.198]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 2332F203F4 for ; Sat, 21 Jun 2014 21:20:51 +0000 (UTC) Received: by mail-ig0-f198.google.com with SMTP id h3sf6456449igd.9 for ; Sat, 21 Jun 2014 14:20:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:subject:precedence:list-id:list-unsubscribe:list-archive :list-post:list-help:list-subscribe:mime-version:errors-to:sender :x-original-sender:x-original-authentication-results:mailing-list :content-type:content-transfer-encoding; bh=vcL+c3QbBnQQnqbkv1lLbybYIh8S+pRaQ3MiBS9vvXM=; b=hzgh3mO4/hn3kDw1Bw90H8DFGL9U9JH3Ad+hkWvoZjDUfG64j5WYZUc0T4ql844CVC 7EKoBSmzKjJjouoA8p0Nef3VVIhEml0VaxZGM80pqbuMskeROV7VnGS6zwFO0HKyeBHx pjGJhbY0heHrsB36H0koactR5FlAB5Xa7zMn3Xc2niax14uOP+3s8EFatU5eT2ZNAwYA RA4zmkeqCaWcT0fXx4OXOrnQjtx5GsROBMomVm0u4Vy5i0Oz7K+dnHjPbhir8Lcqg0aO s6+dB9h31iWoBqRpZzYUXf+UvlYsWQaWdh4a4awJ+NuKBF2Kg/s7wkzNSjAm/3HxuxHr 4vMQ== X-Gm-Message-State: ALoCoQmruFtBuicwVLoEx1Lr/Qy7DxrMr0kmqoBFH+ZDnMxqg5fImNpDVcodcqcIZ2vHHhFXxk8m X-Received: by 10.50.13.6 with SMTP id d6mr4720798igc.1.1403385650714; Sat, 21 Jun 2014 14:20:50 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.87.148 with SMTP id r20ls1415676qgd.12.gmail; Sat, 21 Jun 2014 14:20:50 -0700 (PDT) X-Received: by 10.221.25.210 with SMTP id rj18mr1541896vcb.5.1403385650608; Sat, 21 Jun 2014 14:20:50 -0700 (PDT) Received: from mail-vc0-f180.google.com (mail-vc0-f180.google.com [209.85.220.180]) by mx.google.com with ESMTPS id zu9si6383927vdc.75.2014.06.21.14.20.50 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 21 Jun 2014 14:20:50 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.180 as permitted sender) client-ip=209.85.220.180; Received: by mail-vc0-f180.google.com with SMTP id im17so4564211vcb.39 for ; Sat, 21 Jun 2014 14:20:50 -0700 (PDT) X-Received: by 10.52.5.129 with SMTP id s1mr8649084vds.31.1403385650374; Sat, 21 Jun 2014 14:20:50 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.221.37.5 with SMTP id tc5csp40580vcb; Sat, 21 Jun 2014 14:20:49 -0700 (PDT) X-Received: by 10.140.86.178 with SMTP id p47mr17200652qgd.66.1403385649751; Sat, 21 Jun 2014 14:20:49 -0700 (PDT) Received: from ip-10-141-164-156.ec2.internal (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTPS id n104si16254011qgd.74.2014.06.21.14.20.49 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Sat, 21 Jun 2014 14:20:49 -0700 (PDT) Received-SPF: none (google.com: lng-odp-bounces@lists.linaro.org does not designate permitted sender hosts) client-ip=54.225.227.206; Received: from localhost ([127.0.0.1] helo=ip-10-141-164-156.ec2.internal) by ip-10-141-164-156.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1WySgd-00017C-Bx; Sat, 21 Jun 2014 21:18:59 +0000 Received: from mail-la0-f52.google.com ([209.85.215.52]) by ip-10-141-164-156.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1WySgV-00016Q-St for lng-odp@lists.linaro.org; Sat, 21 Jun 2014 21:18:52 +0000 Received: by mail-la0-f52.google.com with SMTP id ty20so3256801lab.11 for ; Sat, 21 Jun 2014 14:20:35 -0700 (PDT) X-Received: by 10.112.34.243 with SMTP id c19mr3282127lbj.57.1403385634761; Sat, 21 Jun 2014 14:20:34 -0700 (PDT) Received: from localhost (c-2ec20efa-74736162.cust.telenor.se. [46.194.14.250]) by mx.google.com with ESMTPSA id uh6sm2425709lac.13.2014.06.21.14.20.32 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Sat, 21 Jun 2014 14:20:33 -0700 (PDT) From: Anders Roxell To: lng-odp@lists.linaro.org Date: Sat, 21 Jun 2014 23:20:17 +0200 Message-Id: <1403385619-31924-3-git-send-email-anders.roxell@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1403385619-31924-1-git-send-email-anders.roxell@linaro.org> References: <1403385619-31924-1-git-send-email-anders.roxell@linaro.org> X-Topics: patch Subject: [lng-odp] [RFC PATCHv2 2/4] Autotoolise build system X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Errors-To: lng-odp-bounces@lists.linaro.org Sender: lng-odp-bounces@lists.linaro.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: anders.roxell@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.180 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 Signed-off-by: Anders Roxell --- Makefile.am | 6 + bootstrap | 7 + configure.ac | 147 ++++++++++++++++ m4/ax_pthread.m4 | 332 +++++++++++++++++++++++++++++++++++ pkgconfig/libodp.pc.in | 11 ++ platform/Makefile.am | 1 + platform/linux-generic/Makefile.am | 83 +++++++++ platform/linux-keystone2/Makefile.am | 81 +++++++++ test/Makefile.am | 1 + test/api_test/Makefile.am | 11 ++ test/example/Makefile.am | 8 + test/generator/Makefile.am | 8 + test/l2fwd/Makefile.am | 8 + test/packet/Makefile.am | 8 + test/packet_netmap/Makefile.am | 10 ++ test/timer/Makefile.am | 8 + 16 files changed, 730 insertions(+) create mode 100644 Makefile.am create mode 100755 bootstrap create mode 100644 configure.ac create mode 100644 m4/ax_pthread.m4 create mode 100644 pkgconfig/libodp.pc.in create mode 100644 platform/Makefile.am create mode 100644 platform/linux-generic/Makefile.am create mode 100644 platform/linux-keystone2/Makefile.am create mode 100644 test/Makefile.am create mode 100644 test/api_test/Makefile.am create mode 100644 test/example/Makefile.am create mode 100644 test/generator/Makefile.am create mode 100644 test/l2fwd/Makefile.am create mode 100644 test/packet/Makefile.am create mode 100644 test/packet_netmap/Makefile.am create mode 100644 test/timer/Makefile.am diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..b057ba6 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,6 @@ +ACLOCAL_AMFLAGS=-I m4 +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = platform test + +EXTRA_DIST = bootstrap diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000..12f9388 --- /dev/null +++ b/bootstrap @@ -0,0 +1,7 @@ +#! /bin/sh +set -x +aclocal -I config +libtoolize --copy +autoheader +automake --add-missing --copy +autoconf diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..5c32db5 --- /dev/null +++ b/configure.ac @@ -0,0 +1,147 @@ +AC_PREREQ([2.5]) +AC_INIT([OpenDataPlane], [0.1], [lng-odp@lists.linaro.org]) +AC_CONFIG_SRCDIR([include/config.h.in]) +AM_CONFIG_HEADER([include/config.h]) + +AC_USE_SYSTEM_EXTENSIONS +AC_SYS_LARGEFILE +AC_CONFIG_MACRO_DIR([m4]) +AM_SILENT_RULES([yes]) + +# Checks for programs. +AC_PROG_CC +AM_PROG_CC_C_O +AM_INIT_AUTOMAKE([subdir-objects]) + +AC_PROG_INSTALL +AC_PROG_MAKE_SET + +#Use libtool +LT_INIT([disable-shared static]) +AC_SUBST([LIBTOOL_DEPS]) +AM_PROG_LIBTOOL + +# Checks for header files. +AC_HEADER_RESOLV +AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h limits.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h unistd.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_CHECK_HEADER_STDBOOL +AC_C_INLINE +AC_TYPE_SIZE_T +AC_TYPE_SSIZE_T +AC_TYPE_UINT8_T +AC_TYPE_UINT16_T +AC_TYPE_INT32_T +AC_TYPE_UINT32_T +AC_TYPE_UINT64_T + +########################################################################## +# Determine which platform to build for +########################################################################## +AC_ARG_WITH([platform], + [AS_HELP_STRING([--with-platform=prefix], + [Select platform to be used, default linux-generic])], + [], + [with_platform=linux-generic]) + +AM_CONDITIONAL([ODP_PLATFORM_GENERIC], [test "x$with_platform" = xlinux-generic]) +AM_CONDITIONAL([ODP_PLATFORM_KEYSTONE2], [test "x$with_platform" = xlinux-keystone2]) + +AC_SUBST([with_platform]) + +########################################################################## +# Enable/disable netmap support +########################################################################## +AC_ARG_ENABLE([netmap], + [ --enable-netmap Enable/disable netmap], + [if test x$enableval = xyes; then + netmap_support=yes + ODP_CFLAGS="$ODP_CFLAGS -DODP_HAVE_NETMAP=1" + fi]) + +AM_CONDITIONAL([ODP_NETMAP_ENABLED], [test x$netmap_support = xyes ]) + +########################################################################## +# Enable/disable ODP_DEBUG_PRINT +########################################################################## +ODP_DEBUG=1 +AC_ARG_ENABLE([debug], + [ --enable-debug Enable/disable debug], + [if ! test "x$enableval" = "xyes"; then + ODP_DEBUG=0 + fi]) +ODP_CFLAGS="$ODP_CFLAGS -DODP_DEBUG_PRINT=$ODP_DEBUG" + +########################################################################## +# Check for pthreads availability +########################################################################## + +AX_PTHREAD([CC="$PTHREAD_CC"], [ + echo "Error! We require pthreads to be available" + exit -1 + ]) +LIBS="$PTHREAD_LIBS $LIBS" +AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS" +AM_LDFLAGS="$AM_LDFLAGS $PTHREAD_LDFLAGS" + +########################################################################## +# Default warning setup +########################################################################## +ODP_CFLAGS="$ODP_CFLAGS -W -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes" +ODP_CFLAGS="$ODP_CFLAGS -Wmissing-declarations -Wold-style-definition -Wpointer-arith" +ODP_CFLAGS="$ODP_CFLAGS -Wcast-align -Wnested-externs -Wcast-qual -Wformat-nonliteral" +ODP_CFLAGS="$ODP_CFLAGS -Wformat-security -Wundef -Wwrite-strings" + +########################################################################## +# Default include setup +########################################################################## +AM_CFLAGS="$AM_CFLAGS $ODP_CFLAGS" + +# Checks for library functions. +AC_FUNC_MALLOC +AC_FUNC_MMAP +AC_CHECK_FUNCS([bzero clock_gettime gethostbyname getpagesize gettimeofday memset munmap socket strchr strerror strrchr strstr strtoull]) + +AC_CONFIG_FILES([Makefile + platform/Makefile + platform/linux-generic/Makefile + platform/linux-keystone2/Makefile + test/Makefile + test/api_test/Makefile + test/example/Makefile + test/generator/Makefile + test/l2fwd/Makefile + test/packet/Makefile + test/packet_netmap/Makefile + test/timer/Makefile + pkgconfig/libodp.pc]) + +AC_SEARCH_LIBS([timer_create],[rt posix4]) + +########################################################################## +# distribute the changed variables among the Makefiles + +AM_LDFLAGS="$AM_LDFLAGS -pthread -lrt" + +AC_SUBST([LIBS]) +AC_SUBST([AM_CFLAGS]) +AC_SUBST([CFLAGS]) +AC_SUBST([AM_LDFLAGS]) + +AC_OUTPUT +AC_MSG_RESULT([ + $PACKAGE $VERSION + ======== + + prefix: ${prefix} + sysconfdir: ${sysconfdir} + libdir: ${libdir} + includedir: ${includedir} + + compiler: ${CC} + cflags: ${CFLAGS} + am_cflags: ${AM_CFLAGS} + ldflags: ${LDFLAGS} + am_ldflags: ${AM_LDFLAGS} +]) diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4 new file mode 100644 index 0000000..d383ad5 --- /dev/null +++ b/m4/ax_pthread.m4 @@ -0,0 +1,332 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_pthread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. It +# sets the PTHREAD_LIBS output variable to the threads library and linker +# flags, and the PTHREAD_CFLAGS output variable to any special C compiler +# flags that are needed. (The user can also force certain compiler +# flags/libs to be tested by setting these environment variables.) +# +# Also sets PTHREAD_CC to any special C compiler that is needed for +# multi-threaded programs (defaults to the value of CC otherwise). (This +# is necessary on AIX to use the special cc_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. e.g. you should link with +# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# +# If you are only building threads programs, you may wish to use these +# variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant +# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name +# (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the +# PTHREAD_PRIO_INHERIT symbol is defined when compiling with +# PTHREAD_CFLAGS. +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads library +# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it +# is not found. If ACTION-IF-FOUND is not specified, the default action +# will define HAVE_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or if +# you have any other suggestions or comments. This macro was based on work +# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help +# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by +# Alejandro Forero Cuervo to the autoconf macro repository. We are also +# grateful for the helpful feedback of numerous users. +# +# Updated for Autoconf 2.68 by Daniel Richard G. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2011 Daniel Richard G. +# +# 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 . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 21 + +AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) +AC_DEFUN([AX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_PUSH([C]) +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) + AC_MSG_RESULT([$ax_pthread_ok]) + if test x"$ax_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case ${host_os} in + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" + ;; + + darwin*) + ax_pthread_flags="-pthread $ax_pthread_flags" + ;; +esac + +# Clang doesn't consider unrecognized options an error unless we specify +# -Werror. We throw in some extra Clang-specific options to ensure that +# this doesn't happen for GCC, which also accepts -Werror. + +AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) +save_CFLAGS="$CFLAGS" +ax_pthread_extra_flags="-Werror" +CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], + [AC_MSG_RESULT([yes])], + [ax_pthread_extra_flags= + AC_MSG_RESULT([no])]) +CFLAGS="$save_CFLAGS" + +if test x"$ax_pthread_ok" = xno; then +for flag in $ax_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) + if test x"$ax_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; }], + [pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */])], + [ax_pthread_ok=yes], + []) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT([$ax_pthread_ok]) + if test "x$ax_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [int attr = $attr; return attr /* ; */])], + [attr_name=$attr; break], + []) + done + AC_MSG_RESULT([$attr_name]) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case ${host_os} in + aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; + osf* | hpux*) flag="-D_REENTRANT";; + solaris*) + if test "$GCC" = "yes"; then + flag="-D_REENTRANT" + else + # TODO: What about Clang on Solaris? + flag="-mt -D_REENTRANT" + fi + ;; + esac + AC_MSG_RESULT([$flag]) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], + [ax_cv_PTHREAD_PRIO_INHERIT], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[int i = PTHREAD_PRIO_INHERIT;]])], + [ax_cv_PTHREAD_PRIO_INHERIT=yes], + [ax_cv_PTHREAD_PRIO_INHERIT=no]) + ]) + AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], + [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != xyes; then + case $host_os in + aix*) + AS_CASE(["x/$CC"], + [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], + [#handle absolute path differently from PATH based program lookup + AS_CASE(["x$CC"], + [x/*], + [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], + [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + ;; + esac + fi +fi + +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + +AC_SUBST([PTHREAD_LIBS]) +AC_SUBST([PTHREAD_CFLAGS]) +AC_SUBST([PTHREAD_CC]) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_pthread_ok" = xyes; then + ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) + : +else + ax_pthread_ok=no + $2 +fi +AC_LANG_POP +])dnl AX_PTHREAD diff --git a/pkgconfig/libodp.pc.in b/pkgconfig/libodp.pc.in new file mode 100644 index 0000000..7cdf9ea --- /dev/null +++ b/pkgconfig/libodp.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libodp +Description: The ODP packet processing engine +Version: @VERSION@ +Libs: -L${libdir} -lodp +Libs.private: +Cflags: -I${includedir} diff --git a/platform/Makefile.am b/platform/Makefile.am new file mode 100644 index 0000000..e618747 --- /dev/null +++ b/platform/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = @with_platform@ diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am new file mode 100644 index 0000000..8f7c815 --- /dev/null +++ b/platform/linux-generic/Makefile.am @@ -0,0 +1,83 @@ +LIB = $(top_builddir)/lib + +dist_pkgdata_DATA = $(LIB)/libodp.la + +pkgconfigdir = pkgconfig +nodist_pkgconfig_DATA = $(top_builddir)/pkgconfig/libodp.pc + +.PHONY: pkgconfig/libodp.pc + +AM_CFLAGS += -I$(srcdir)/include +AM_CFLAGS += -I$(srcdir)/include/api +AM_CFLAGS += -I$(top_srcdir)/include +VPATH = $(srcdir) $(builddir) +if ODP_PLATFORM_GENERIC +lib_LTLIBRARIES = $(LIB)/libodp.la + +include_HEADERS = \ + $(top_srcdir)/include/odp.h \ + $(top_srcdir)/include/odp_align.h \ + $(top_srcdir)/include/odp_atomic.h \ + $(top_srcdir)/include/odp_barrier.h \ + $(top_srcdir)/include/odp_buffer.h \ + $(top_srcdir)/include/odp_buffer_pool.h \ + $(top_srcdir)/include/odp_byteorder.h \ + $(top_srcdir)/include/odp_compiler.h \ + $(top_srcdir)/include/odp_config.h \ + $(top_srcdir)/include/odp_coremask.h \ + $(top_srcdir)/include/odp_debug.h \ + $(top_srcdir)/include/odp_hints.h \ + $(top_srcdir)/include/odp_init.h \ + $(top_srcdir)/include/odp_packet_flags.h \ + $(top_srcdir)/include/odp_packet.h \ + $(top_srcdir)/include/odp_packet_io.h \ + $(top_srcdir)/include/odp_queue.h \ + $(top_srcdir)/include/odp_rwlock.h \ + $(top_srcdir)/include/odp_schedule.h \ + $(top_srcdir)/include/odp_shared_memory.h \ + $(top_srcdir)/include/odp_spinlock.h \ + $(top_srcdir)/include/odp_std_types.h \ + $(top_srcdir)/include/odp_sync.h \ + $(top_srcdir)/include/odp_system_info.h \ + $(top_srcdir)/include/odp_thread.h \ + $(top_srcdir)/include/odp_ticketlock.h \ + $(top_srcdir)/include/odp_time.h \ + $(top_srcdir)/include/odp_timer.h \ + $(top_srcdir)/include/odp_version.h \ + $(top_srcdir)/include/helper/odp_chksum.h \ + $(top_srcdir)/include/helper/odp_eth.h \ + $(top_srcdir)/include/helper/odp_ip.h \ + $(top_srcdir)/include/helper/odp_linux.h \ + $(top_srcdir)/include/helper/odp_packet_helper.h \ + $(top_srcdir)/include/helper/odp_ring.h \ + $(top_srcdir)/include/helper/odp_udp.h \ + $(top_srcdir)/platform/linux-generic/include/api/odp_pktio_types.h \ + $(top_srcdir)/platform/linux-generic/include/api/odp_pktio_netmap.h \ + $(top_srcdir)/platform/linux-generic/include/api/odp_pktio_socket.h + +__LIB__libodp_la_SOURCES = \ + odp_barrier.c \ + odp_buffer.c \ + odp_buffer_pool.c \ + odp_coremask.c \ + odp_init.c \ + odp_linux.c \ + odp_packet.c \ + odp_packet_flags.c \ + odp_packet_io.c \ + odp_packet_socket.c \ + odp_queue.c \ + odp_ring.c \ + odp_rwlock.c \ + odp_schedule.c \ + odp_shared_memory.c \ + odp_spinlock.c \ + odp_system_info.c \ + odp_thread.c \ + odp_ticketlock.c \ + odp_time.c \ + odp_timer.c + +endif +# FIXME, add --enable flag for NETMAP +#odp_packet_netmap.c diff --git a/platform/linux-keystone2/Makefile.am b/platform/linux-keystone2/Makefile.am new file mode 100644 index 0000000..67d8383 --- /dev/null +++ b/platform/linux-keystone2/Makefile.am @@ -0,0 +1,81 @@ +LIB = $(top_builddir)/lib + +dist_pkgdata_DATA = $(LIB)/libodp.la + +pkgconfigdir = pkgconfig +nodist_pkgconfig_DATA = $(top_builddir)/pkgconfig/libodp.pc + +.PHONY: pkgconfig/libodp.pc + +AM_CFLAGS += -I$(srcdir)/include +AM_CFLAGS += -I$(srcdir)/include/api +AM_CFLAGS += -I$(top_srcdir)/include +VPATH = $(srcdir) $(builddir) +if ODP_PLATFORM_KEYSTONE2 +lib_LTLIBRARIES = $(LIB)/libodp.la + +include_HEADERS = \ + $(top_srcdir)/include/odp.h \ + $(top_srcdir)/include/odp_align.h \ + $(top_srcdir)/include/odp_atomic.h \ + $(top_srcdir)/include/odp_barrier.h \ + $(top_srcdir)/include/odp_buffer.h \ + $(top_srcdir)/include/odp_buffer_pool.h \ + $(top_srcdir)/include/odp_byteorder.h \ + $(top_srcdir)/include/odp_compiler.h \ + $(top_srcdir)/include/odp_config.h \ + $(top_srcdir)/include/odp_coremask.h \ + $(top_srcdir)/include/odp_debug.h \ + $(top_srcdir)/include/odp_hints.h \ + $(top_srcdir)/include/odp_init.h \ + $(top_srcdir)/include/odp_packet_flags.h \ + $(top_srcdir)/include/odp_packet.h \ + $(top_srcdir)/include/odp_packet_io.h \ + $(top_srcdir)/include/odp_queue.h \ + $(top_srcdir)/include/odp_rwlock.h \ + $(top_srcdir)/include/odp_schedule.h \ + $(top_srcdir)/include/odp_shared_memory.h \ + $(top_srcdir)/include/odp_spinlock.h \ + $(top_srcdir)/include/odp_std_types.h \ + $(top_srcdir)/include/odp_sync.h \ + $(top_srcdir)/include/odp_system_info.h \ + $(top_srcdir)/include/odp_thread.h \ + $(top_srcdir)/include/odp_ticketlock.h \ + $(top_srcdir)/include/odp_time.h \ + $(top_srcdir)/include/odp_timer.h \ + $(top_srcdir)/include/odp_version.h \ + $(top_srcdir)/include/helper/odp_chksum.h \ + $(top_srcdir)/include/helper/odp_eth.h \ + $(top_srcdir)/include/helper/odp_ip.h \ + $(top_srcdir)/include/helper/odp_linux.h \ + $(top_srcdir)/include/helper/odp_packet_helper.h \ + $(top_srcdir)/include/helper/odp_ring.h \ + $(top_srcdir)/include/helper/odp_udp.h \ + $(top_srcdir)/platform/linux-keystone2/include/api/odp_buffer.h + +__LIB__libodp_la_SOURCES = \ + odp_barrier.c \ + odp_buffer.c \ + odp_buffer_pool.c \ + odp_coremask.c \ + odp_init.c \ + odp_linux.c \ + odp_packet.c \ + odp_packet_flags.c \ + odp_packet_io.c \ + odp_packet_socket.c \ + odp_queue.c \ + odp_ring.c \ + odp_rwlock.c \ + odp_schedule.c \ + odp_shared_memory.c \ + odp_spinlock.c \ + odp_system_info.c \ + odp_thread.c \ + odp_ticketlock.c \ + odp_time.c \ + odp_timer.c + +endif +# FIXME, add --enable flag for NETMAP +#odp_packet_netmap.c diff --git a/test/Makefile.am b/test/Makefile.am new file mode 100644 index 0000000..bae381e --- /dev/null +++ b/test/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = api_test example generator l2fwd packet packet_netmap timer diff --git a/test/api_test/Makefile.am b/test/api_test/Makefile.am new file mode 100644 index 0000000..65af506 --- /dev/null +++ b/test/api_test/Makefile.am @@ -0,0 +1,11 @@ +LIB = $(top_builddir)/lib +LDADD = $(LIB)/libodp.la +AM_CFLAGS += -I$(top_srcdir)/include -I$(top_srcdir)/platform/@with_platform@/include/api +AM_LDFLAGS += -L$(LIB) + +bin_PROGRAMS = odp_atomic odp_shm odp_ring odp_timer + +dist_odp_atomic_SOURCES = odp_atomic_test.c odp_common.c +dist_odp_shm_SOURCES = odp_shm_test.c odp_common.c +dist_odp_ring_SOURCES = odp_ring_test.c odp_common.c +dist_odp_timer_SOURCES = odp_timer_ping.c odp_common.c diff --git a/test/example/Makefile.am b/test/example/Makefile.am new file mode 100644 index 0000000..1d0f73e --- /dev/null +++ b/test/example/Makefile.am @@ -0,0 +1,8 @@ +LIB = $(top_builddir)/lib +LDADD = $(LIB)/libodp.la +AM_CFLAGS += -I$(top_srcdir)/include -I$(top_srcdir)/platform/@with_platform@/include/api +AM_LDFLAGS += -L$(LIB) + +bin_PROGRAMS = odp_example + +dist_odp_example_SOURCES = odp_example.c diff --git a/test/generator/Makefile.am b/test/generator/Makefile.am new file mode 100644 index 0000000..ddfa498 --- /dev/null +++ b/test/generator/Makefile.am @@ -0,0 +1,8 @@ +LIB = $(top_builddir)/lib +LDADD = $(LIB)/libodp.la +AM_CFLAGS += -I$(top_srcdir)/include -I$(top_srcdir)/platform/@with_platform@/include/api +AM_LDFLAGS += -L$(LIB) + +bin_PROGRAMS = odp_generator + +dist_odp_generator_SOURCES = odp_generator.c diff --git a/test/l2fwd/Makefile.am b/test/l2fwd/Makefile.am new file mode 100644 index 0000000..0cb0425 --- /dev/null +++ b/test/l2fwd/Makefile.am @@ -0,0 +1,8 @@ +LIB = $(top_builddir)/lib +LDADD = $(LIB)/libodp.la +AM_CFLAGS += -I$(top_srcdir)/include -I$(top_srcdir)/platform/@with_platform@/include/api +AM_LDFLAGS += -L$(LIB) + +bin_PROGRAMS = odp_l2fwd + +dist_odp_l2fwd_SOURCES = l2fwd.c diff --git a/test/packet/Makefile.am b/test/packet/Makefile.am new file mode 100644 index 0000000..1d15b3d --- /dev/null +++ b/test/packet/Makefile.am @@ -0,0 +1,8 @@ +LIB = $(top_builddir)/lib +LDADD = $(LIB)/libodp.la +AM_CFLAGS += -I$(top_srcdir)/include -I$(top_srcdir)/platform/@with_platform@/include/api +AM_LDFLAGS += -L$(LIB) + +bin_PROGRAMS = odp_pktio + +dist_odp_pktio_SOURCES = odp_example_pktio.c diff --git a/test/packet_netmap/Makefile.am b/test/packet_netmap/Makefile.am new file mode 100644 index 0000000..104a518 --- /dev/null +++ b/test/packet_netmap/Makefile.am @@ -0,0 +1,10 @@ +LIB = $(top_builddir)/lib +LDADD = $(LIB)/libodp.la +AM_CFLAGS += -I$(top_srcdir)/include -I$(top_srcdir)/platform/@with_platform@/include/api +AM_LDFLAGS += -L$(LIB) + +if ODP_NETMAP_ENABLED +bin_PROGRAMS = odp_pktio_netmap +endif + +dist_odp_pktio_netmap_SOURCES = odp_example_pktio_netmap.c diff --git a/test/timer/Makefile.am b/test/timer/Makefile.am new file mode 100644 index 0000000..cf5b878 --- /dev/null +++ b/test/timer/Makefile.am @@ -0,0 +1,8 @@ +LIB = $(top_builddir)/lib +LDADD = $(LIB)/libodp.la +AM_CFLAGS += -I$(top_srcdir)/include -I$(top_srcdir)/platform/@with_platform@/include/api +AM_LDFLAGS += -L$(LIB) + +bin_PROGRAMS = odp_timer_test + +dist_odp_timer_test_SOURCES = odp_timer_test.c