Since defaulting to -fno-common, one can't build the benchmark due to: gcc -std=c99 -Ofast -march=znver1 -g ldecod_src/nal.o ldecod_src/mbuffer_mvc.o ldecod_src/image.o ldecod_src/mb_access.o ldecod_src/memalloc.o ldecod_src/mc_prediction.o ldecod_src/mb_prediction.o ldecod_src/intra4x4_pred_mbaff.o ldecod_src/loop_filter_mbaff.o ldecod_src/context_ini.o ldecod_src/configfile.o ldecod_src/cabac.o ldecod_src/sei.o ldecod_src/leaky_bucket.o ldecod_src/filehandle.o ldecod_src/errorconcealment.o ldecod_src/decoder_test.o ldecod_src/img_process.o ldecod_src/mv_prediction.o ldecod_src/fmo.o ldecod_src/output.o ldecod_src/mc_direct.o ldecod_src/rtp.o ldecod_src/nalucommon.o ldecod_src/config_common.o ldecod_src/intra_chroma_pred.o ldecod_src/transform8x8.o ldecod_src/blk_prediction.o ldecod_src/intra8x8_pred_mbaff.o ldecod_src/erc_do_i.o ldecod_src/io_tiff.o ldecod_src/mbuffer.o ldecod_src/block.o ldecod_src/intra4x4_pred.o ldecod_src/transform.o ldecod_src/annexb.o ldecod_src/ldecod.o ldecod_src/macroblock.o ldecod_src/vlc.o ldecod_src/parset.o ldecod_src/loop_filter_normal.o ldecod_src/parsetcommon.o ldecod_src/erc_do_p.o ldecod_src/loopFilter.o ldecod_src/intra16x16_pred_mbaff.o ldecod_src/intra4x4_pred_normal.o ldecod_src/intra16x16_pred_normal.o ldecod_src/win32.o ldecod_src/intra16x16_pred.o ldecod_src/intra8x8_pred_normal.o ldecod_src/io_raw.o ldecod_src/img_io.o ldecod_src/nalu.o ldecod_src/quant.o ldecod_src/intra8x8_pred.o ldecod_src/erc_api.o ldecod_src/header.o ldecod_src/biaridecod.o ldecod_src/input.o -lm -o ldecod_r /usr/bin/ld: ldecod_src/decoder_test.o:/home/marxin/Programming/cpu2017/benchspec/CPU/525.x264_r/build/build_peak_gcc7-m64.0002/ldecod_src/inc/configfile.h:21: multiple definition of `cfgparams'; ldecod_src/configfile.o:/home/marxin/Programming/cpu2017/benchspec/CPU/525.x264_r/build/build_peak_gcc7-m64.0002/ldecod_src/inc/configfile.h:21: first defined here /usr/bin/ld: ldecod_src/config_common.o:/home/marxin/Programming/cpu2017/benchspec/CPU/525.x264_r/build/build_peak_gcc7-m64.0002/ldecod_src/inc/configfile.h:21: multiple definition of `cfgparams'; ldecod_src/configfile.o:/home/marxin/Programming/cpu2017/benchspec/CPU/525.x264_r/build/build_peak_gcc7-m64.0002/ldecod_src/inc/configfile.h:21: first defined here
Following patch fixes that: diff --git a/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h b/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h index 12ed1cc8..450930e2 100644 --- a/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h +++ b/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h @@ -18,9 +18,9 @@ //#define LEVEL_IDC 21 -InputParameters cfgparams; #ifdef INCLUDED_BY_CONFIGFILE_C +InputParameters cfgparams; // Mapping_Map Syntax: // {NAMEinConfigFile, &cfgparams.VariableName, Type, InitialValue, LimitType, MinLimit, MaxLimit, CharSize} // Types : {0:int, 1:text, 2: double} @@ -59,6 +59,7 @@ extern Mapping Map[]; #endif extern void JMDecHelpExit (); extern void ParseCommand(InputParameters *p_Inp, int ac, char *av[]); +extern InputParameters cfgparams; #endif
(In reply to Martin Liška from comment #1) > Following patch fixes that: > > diff --git a/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h > b/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h > index 12ed1cc8..450930e2 100644 > --- a/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h > +++ b/benchspec/CPU/525.x264_r/src/ldecod_src/inc/configfile.h > @@ -18,9 +18,9 @@ > //#define LEVEL_IDC 21 > > > -InputParameters cfgparams; > > #ifdef INCLUDED_BY_CONFIGFILE_C > +InputParameters cfgparams; > // Mapping_Map Syntax: > // {NAMEinConfigFile, &cfgparams.VariableName, Type, InitialValue, > LimitType, MinLimit, MaxLimit, CharSize} > // Types : {0:int, 1:text, 2: double} > @@ -59,6 +59,7 @@ extern Mapping Map[]; > #endif > extern void JMDecHelpExit (); > extern void ParseCommand(InputParameters *p_Inp, int ac, char *av[]); > +extern InputParameters cfgparams; > > #endif (In reply to Martin Liška from comment #0) > Since defaulting to -fno-common, one can't build the benchmark due to: Yes some SPEC benchmarks rely on tentative definitions. Given it is a portability issue, but the source can't be fixed, the easiest way is to add -fcommon in the config file for the failing cases. This is similar to the other workarounds like -fno-strict-aliasing.