From 08c037dec545fe58467ee1bcfea63901a144c2b0 Mon Sep 17 00:00:00 2001 From: Sam Yates <halfflat@gmail.com> Date: Fri, 6 Nov 2020 20:09:46 +0100 Subject: [PATCH] Fix ODR violation from geneated mechanisms. (#1220) * Put generated mechanisms for each built-in catalogue in their own namespace. --- mechanisms/CMakeLists.txt | 12 ++++++------ mechanisms/generate_catalogue | 13 ++++++++++++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/mechanisms/CMakeLists.txt b/mechanisms/CMakeLists.txt index d4539de3..032adf12 100644 --- a/mechanisms/CMakeLists.txt +++ b/mechanisms/CMakeLists.txt @@ -20,12 +20,12 @@ build_modules( SOURCE_DIR "${bbp_mod_srcdir}" DEST_DIR "${mech_dir}" ${external_modcc} - MODCC_FLAGS -t cpu -t gpu ${ARB_MODCC_FLAGS} + MODCC_FLAGS -t cpu -t gpu ${ARB_MODCC_FLAGS} -N arb::bbp_catalogue GENERATES .hpp _cpu.cpp _gpu.cpp _gpu.cu TARGET build_catalogue_bbp_mods) set(bbp_catalogue_source ${CMAKE_CURRENT_BINARY_DIR}/bbp_catalogue.cpp) -set(bbp_catalogue_options -A arbor -I ${mech_dir} -o ${bbp_catalogue_source} -B multicore -C bbp) +set(bbp_catalogue_options -A arbor -I ${mech_dir} -o ${bbp_catalogue_source} -B multicore -C bbp -N arb::bbp_catalogue) if(ARB_WITH_GPU) list(APPEND bbp_catalogue_options -B gpu) endif() @@ -60,12 +60,12 @@ build_modules( SOURCE_DIR "${allen_mod_srcdir}" DEST_DIR "${mech_dir}" ${external_modcc} - MODCC_FLAGS -t cpu -t gpu ${ARB_MODCC_FLAGS} + MODCC_FLAGS -t cpu -t gpu ${ARB_MODCC_FLAGS} -N arb::allen_catalogue GENERATES .hpp _cpu.cpp _gpu.cpp _gpu.cu TARGET build_catalogue_allen_mods) set(allen_catalogue_source ${CMAKE_CURRENT_BINARY_DIR}/allen_catalogue.cpp) -set(allen_catalogue_options -A arbor -I ${mech_dir} -o ${allen_catalogue_source} -B multicore -C allen) +set(allen_catalogue_options -A arbor -I ${mech_dir} -o ${allen_catalogue_source} -B multicore -C allen -N arb::allen_catalogue) if(ARB_WITH_GPU) list(APPEND allen_catalogue_options -B gpu) endif() @@ -100,12 +100,12 @@ build_modules( SOURCE_DIR "${default_mod_srcdir}" DEST_DIR "${mech_dir}" ${external_modcc} - MODCC_FLAGS -t cpu -t gpu ${ARB_MODCC_FLAGS} + MODCC_FLAGS -t cpu -t gpu ${ARB_MODCC_FLAGS} -N arb::default_catalogue GENERATES .hpp _cpu.cpp _gpu.cpp _gpu.cu TARGET build_catalogue_default_mods) set(default_catalogue_source ${CMAKE_CURRENT_BINARY_DIR}/default_catalogue.cpp) -set(default_catalogue_options -A arbor -I ${mech_dir} -o ${default_catalogue_source} -B multicore -C default) +set(default_catalogue_options -A arbor -I ${mech_dir} -o ${default_catalogue_source} -B multicore -C default -N arb::default_catalogue) if(ARB_WITH_GPU) list(APPEND default_catalogue_options -B gpu) endif() diff --git a/mechanisms/generate_catalogue b/mechanisms/generate_catalogue index 072b1d1c..a4ad3cfd 100755 --- a/mechanisms/generate_catalogue +++ b/mechanisms/generate_catalogue @@ -62,6 +62,14 @@ def parse_arguments(): metavar = 'BACKEND', help = 'register implementations for back-end %(metavar)s') + group.add_argument( + '-N', '--namespace', + default = [], + action = 'append', + dest = 'namespaces', + metavar = 'NAMESPACE', + help = 'add %(metavar)s to list of implicitly included namespaces') + group.add_argument( '-C', '--catalogue', default = 'default', @@ -83,7 +91,7 @@ def parse_arguments(): return vars(parser.parse_args()) -def generate(catalogue, modpfx='', arbpfx='', modules=[], backends=[], **rest): +def generate(catalogue, modpfx='', arbpfx='', modules=[], backends=[], namespaces=[], **rest): src = string.Template(\ r'''// Automatically generated by: // $cmdline @@ -91,6 +99,7 @@ r'''// Automatically generated by: #include <${arbpfx}mechcat.hpp> $backend_includes $module_includes +$using_namespace namespace arb { @@ -119,6 +128,8 @@ const mechanism_catalogue& global_${catalogue}_catalogue() { cmdline=" ".join(sys.argv), arbpfx=arbpfx, catalogue=catalogue, + using_namespace = indent(0, + ['using namespace {};'.format(n) for n in namespaces]), backend_includes = indent(0, # ['#include <{}backends/{}/fvm.hpp>'.format(arbpfx, b) for b in backends]), ['#include "backends/{}/fvm.hpp"'.format(b) for b in backends]), -- GitLab