On 12/29/16 16:12, Christophe Milard wrote: > I have now updated the travis file (second comment) and had the > DEPENDENCIES file updated since the begining. Are we talking about > another third file? > > Christophe
about DEPENDENCIES file. Maxim. > > On 29 December 2016 at 14:01, Maxim Uvarov <maxim.uva...@linaro.org> wrote: >> On 12/29/16 13:45, Christophe Milard wrote: >>> On 22 December 2016 at 21:12, Maxim Uvarov <maxim.uva...@linaro.org> wrote: >>>> On 12/19/16 13:50, Christophe Milard wrote: >>>>> The parsing of the odp.conf configuration file is added. >>>>> The file is searched first in the local directory (.) and >>>>> then is the $prefix/etc directory. >>>>> This requires libconfig (sudo apt-get install libconfig-dev) >>>>> >>>>> Signed-off-by: Christophe Milard <christophe.mil...@linaro.org> >>>>> --- >>>>> DEPENDENCIES | 2 +- >>>>> platform/linux-generic/Makefile.am | 1 + >>>>> platform/linux-generic/include/odp_internal.h | 2 + >>>>> platform/linux-generic/m4/configure.m4 | 11 +++++ >>>>> platform/linux-generic/odp_init.c | 70 >>>>> +++++++++++++++++++++++++++ >>>>> 5 files changed, 85 insertions(+), 1 deletion(-) >>>>> >>>>> diff --git a/DEPENDENCIES b/DEPENDENCIES >>>>> index f1f0edd..a24b1c8 100644 >>>>> --- a/DEPENDENCIES >>>>> +++ b/DEPENDENCIES >>>>> @@ -18,7 +18,7 @@ Prerequisites for building the OpenDataPlane (ODP) API >>>>> >>>>> 3. Required libraries >>>>> >>>>> - Libraries currently required to link: openssl >>>>> + Libraries currently required to link: openssl, libconfig-dev >>>>> >>>> >>>> apt-get install libconfig-dev >>>> is needed, or at least we specify it everywhere. >>> >>> I don't understand what you mean here. What is missing? >>> >> >> >> I see that there is apt-get install command for all dependencies. So >> people can copy paste it. I think we need the same line for libconfig-dev. >> >> Maxim. >> >> >>>> >>>> .travis.yml file also needs to be updated. >>> >>> yes >>> >>> >>> Christophe >>>> >>>> Maxim. >>>> >>>> >>>>> 3.1 OpenSSL native compile >>>>> >>>>> diff --git a/platform/linux-generic/Makefile.am >>>>> b/platform/linux-generic/Makefile.am >>>>> index 9d219da..9e5e095 100644 >>>>> --- a/platform/linux-generic/Makefile.am >>>>> +++ b/platform/linux-generic/Makefile.am >>>>> @@ -8,6 +8,7 @@ AM_CFLAGS += -I$(srcdir)/include >>>>> AM_CFLAGS += -I$(top_srcdir)/include >>>>> AM_CFLAGS += -I$(top_builddir)/include >>>>> AM_CFLAGS += -Iinclude >>>>> +AM_CFLAGS += -DSYSCONFDIR=\"@sysconfdir@\" >>>>> >>>>> include_HEADERS = \ >>>>> $(top_srcdir)/include/odp.h \ >>>>> diff --git a/platform/linux-generic/include/odp_internal.h >>>>> b/platform/linux-generic/include/odp_internal.h >>>>> index b313b1f..9d1fc58 100644 >>>>> --- a/platform/linux-generic/include/odp_internal.h >>>>> +++ b/platform/linux-generic/include/odp_internal.h >>>>> @@ -22,6 +22,7 @@ extern "C" { >>>>> #include <odp/api/thread.h> >>>>> #include <stdio.h> >>>>> #include <sys/types.h> >>>>> +#include <libconfig.h> >>>>> >>>>> extern __thread int __odp_errno; >>>>> >>>>> @@ -50,6 +51,7 @@ struct odp_global_data_s { >>>>> odp_cpumask_t control_cpus; >>>>> odp_cpumask_t worker_cpus; >>>>> int num_cpus_installed; >>>>> + config_t configuration; >>>>> }; >>>>> >>>>> enum init_stage { >>>>> diff --git a/platform/linux-generic/m4/configure.m4 >>>>> b/platform/linux-generic/m4/configure.m4 >>>>> index d3e5528..5fab0cc 100644 >>>>> --- a/platform/linux-generic/m4/configure.m4 >>>>> +++ b/platform/linux-generic/m4/configure.m4 >>>>> @@ -28,6 +28,17 @@ AC_LINK_IFELSE( >>>>> echo "Use newer version. For gcc > 4.7.0" >>>>> exit -1) >>>>> >>>>> +# Check for libconfig (required) >>>>> +AC_CHECK_HEADERS([libconfig.h], HEADER_LIBCONFIG="yes") >>>>> +PKG_CHECK_MODULES([PKGCONFIG], [libconfig >= 1.3.2], >>>>> LIBRARY_LIBCONFIG="yes") >>>>> +if test "x$LIBRARY_LIBCONFIG" != "x" && test "x$HEADER_LIBCONFIG" != "x" >>>>> ; then >>>>> + CFLAGS="$CFLAGS $PKGCONFIG_CFLAGS" >>>>> + LIBS="$LIBS $PKGCONFIG_LIBS" >>>>> + AM_CPPFLAGS="$AM_CPPFLAGS `pkg-config --cflags-only-I libconfig`" >>>>> +else >>>>> + AC_MSG_FAILURE([libconfig not found (required)]) >>>>> +fi >>>>> + >>>>> m4_include([platform/linux-generic/m4/odp_pthread.m4]) >>>>> m4_include([platform/linux-generic/m4/odp_openssl.m4]) >>>>> m4_include([platform/linux-generic/m4/odp_pcap.m4]) >>>>> diff --git a/platform/linux-generic/odp_init.c >>>>> b/platform/linux-generic/odp_init.c >>>>> index 1b0d8f8..bd43af1 100644 >>>>> --- a/platform/linux-generic/odp_init.c >>>>> +++ b/platform/linux-generic/odp_init.c >>>>> @@ -10,6 +10,8 @@ >>>>> #include <odp_internal.h> >>>>> #include <odp_schedule_if.h> >>>>> #include <string.h> >>>>> +#include <libconfig.h> >>>>> +#include <stdlib.h> >>>>> #include <stdio.h> >>>>> #include <linux/limits.h> >>>>> #include <dirent.h> >>>>> @@ -21,6 +23,15 @@ >>>>> #define _ODP_FILES_FMT "odp-%d-" >>>>> #define _ODP_TMPDIR "/tmp" >>>>> >>>>> +/* the name of the ODP configuration file: */ >>>>> +#define CONFIGURATION_FILE_ENV_NONE "none" >>>>> +#define CONFIGURATION_FILE "odp.conf" >>>>> +#define CONFIGURATION_FILE_REL ("./" CONFIGURATION_FILE) >>>>> +#define CONFIGURATION_FILE_ABS (SYSCONFDIR "/" CONFIGURATION_FILE) >>>>> + >>>>> +/* the ODP configuration file name can also be oveerwritten by env. >>>>> variable: */ >>>>> +#define ODP_SYSCONFIG_FILE_ENV "ODP_SYSCONFIG_FILE" >>>>> + >>>>> struct odp_global_data_s odp_global_data; >>>>> >>>>> /* remove all files staring with "odp-<pid>" from a directory "dir" */ >>>>> @@ -65,6 +76,62 @@ static int cleanup_files(const char *dirpath, int >>>>> odp_pid) >>>>> return 0; >>>>> } >>>>> >>>>> +/* read the odp configuration file >>>>> + * >>>>> + * the configuration file is read from: >>>>> + * 1) Wherever env variable ODP_SYSCONFIG_FILE says (or "none") >>>>> + * 2) ./odp.conf >>>>> + * 3) the @sysconfig@/odp.conf >>>>> + * (checked in reversed order overwritting each-other) >>>>> + * So the environment variable setting supperseeds any other file. >>>>> + * If the environment variable exists and set to the string "none" >>>>> + * the configuration file reading is inibited (used to prevent >>>>> + * test which do not need a file to read the user or system files) >>>>> + */ >>>>> +static int read_configfile(void) >>>>> +{ >>>>> + char *env_config_filename; >>>>> + const char *config_filename; >>>>> + config_t *cf; >>>>> + >>>>> + /* initialize and read the configuration file if any: */ >>>>> + cf = &odp_global_data.configuration; >>>>> + config_init(cf); >>>>> + config_filename = NULL; >>>>> + if (access(CONFIGURATION_FILE_ABS, R_OK) != -1) >>>>> + config_filename = CONFIGURATION_FILE_ABS; >>>>> + if (access(CONFIGURATION_FILE_REL, R_OK) != -1) >>>>> + config_filename = CONFIGURATION_FILE_REL; >>>>> + env_config_filename = getenv(ODP_SYSCONFIG_FILE_ENV); >>>>> + if (env_config_filename) { >>>>> + if (!strcmp(env_config_filename, >>>>> CONFIGURATION_FILE_ENV_NONE)) >>>>> + return 0; >>>>> + if (access(env_config_filename, R_OK) != -1) { >>>>> + config_filename = env_config_filename; >>>>> + } else { >>>>> + ODP_ERR("Cannot read ODP configurattion file %s " >>>>> + "(set by env variable " >>>>> + ODP_SYSCONFIG_FILE_ENV ")\n", >>>>> + env_config_filename); >>>>> + config_filename = NULL; >>>>> + return -1; >>>>> + } >>>>> + } >>>>> + if (config_filename) { >>>>> + ODP_DBG("Reading configuration file: %s\n", >>>>> config_filename); >>>>> + if (!config_read_file(cf, config_filename)) { >>>>> + ODP_ERR("%s:%d - %s\n", >>>>> + config_error_file(cf), >>>>> + config_error_line(cf), >>>>> + config_error_text(cf)); >>>>> + config_destroy(cf); >>>>> + return(-1); >>>>> + } >>>>> + } >>>>> + >>>>> + return 0; >>>>> +} >>>>> + >>>>> int odp_init_global(odp_instance_t *instance, >>>>> const odp_init_t *params, >>>>> const odp_platform_init_t *platform_params ODP_UNUSED) >>>>> @@ -86,6 +153,9 @@ int odp_init_global(odp_instance_t *instance, >>>>> odp_global_data.abort_fn = params->abort_fn; >>>>> } >>>>> >>>>> + if (read_configfile()) >>>>> + goto init_failed; >>>>> + >>>>> if (odp_cpumask_init_global(params)) { >>>>> ODP_ERR("ODP cpumask init failed.\n"); >>>>> goto init_failed; >>>>> >>>> >>