> On 8 июля 2015 г., at 17:16, Thomas Schwinge <tho...@codesourcery.com> wrote:
> 
> Hi!
> 
>> On Tue, 21 Oct 2014 21:24:13 +0400, Ilya Verbin <iver...@gmail.com> wrote:
>> This patch contains a plugin for libgomp and appropriate changes for 
>> makefiles.
>> 
>> The plugin uses liboffloadmic_host.so to interact with the device (or with an
>> emulator).  Also the patch contains offload_target_main executable, which is 
>> the
>> corresponding target side part of a libgomp plugin, and it uses
>> liboffloadmic_target.so.
>> 
>> The plugin builds automatically with liboffloadmic.
> 
> With recent GCC trunk sources, builds of the Intel MIC Offload Plugin
> fail as follows:
> 
>    libtool: compile:  [...]/build-gcc/./gcc/xg++ [...] 
> -I[...]/install/offload-x86_64-intelmicemul-linux-gnu/x86_64-intelmicemul-linux-gnu/liboffloadmic/plugin
>  
> -I[...]/install/offload-x86_64-intelmicemul-linux-gnu/lib/gcc/x86_64-intelmicemul-linux-gnu/6.0.0/include
>  -c [...]/source-gcc/liboffloadmic/plugin/libgomp-plugin-intelmic.cpp  -fPIC 
> -DPIC -o .libs/libgomp_plugin_intelmic_la-libgomp-plugin-intelmic.o
>    In file included from 
> [...]/source-gcc/liboffloadmic/plugin/libgomp-plugin-intelmic.cpp:40:0:
>    
> [...]/install/offload-x86_64-intelmicemul-linux-gnu/lib/gcc/x86_64-intelmicemul-linux-gnu/6.0.0/include/main_target_image.h:8628:1:
>  error: narrowing conversion of '192' from 'int' to 'char' inside { } 
> [-Wnarrowing]
>     };
>     ^
>    
> [...]/install/offload-x86_64-intelmicemul-linux-gnu/lib/gcc/x86_64-intelmicemul-linux-gnu/6.0.0/include/main_target_image.h:8628:1:
>  error: narrowing conversion of '192' from 'int' to 'char' inside { } 
> [-Wnarrowing]
>    
> [...]/install/offload-x86_64-intelmicemul-linux-gnu/lib/gcc/x86_64-intelmicemul-linux-gnu/6.0.0/include/main_target_image.h:8628:1:
>  error: narrowing conversion of '164' from 'int' to 'char' inside { } 
> [-Wnarrowing]
>    [many more]
> 
> Apart from the actual compilation error, it is surprising for me to see
> the GCC build reference/depend on the Intel MIC offloading compiler's
> installation directory (which I built and installed earlier),
> [...]/install/offload-x86_64-intelmicemul-linux-gnu/ -- is that the
> correct thing to do?  Shouldn't the GCC build be self-contained?  (I have
> not yet made an attempt to understand how the target and device
> liboffloadmic builds work together.)
> 
> This main_target_image.h file is coming from here:
> 
>> --- /dev/null
>> +++ b/liboffloadmic/plugin/Makefile.am
>> @@ -0,0 +1,123 @@
>> +# Plugin for offload execution on Intel MIC devices.
> 
>> +main_target_image.h: offload_target_main
>> +    @echo -n "const int image_size = " > $@
>> +    @stat -c '%s' $< >> $@
>> +    @echo ";" >> $@
>> +    @echo "struct MainTargetImage {" >> $@
>> +    @echo "  int64_t size;" >> $@
>> +    @echo "  char name[sizeof \"offload_target_main\"];" >> $@
>> +    @echo "  char data[image_size];" >> $@
>> +    @echo "};" >> $@
>> +    @echo "extern \"C\" const MainTargetImage main_target_image = {" >> $@
>> +    @echo "  image_size, \"offload_target_main\"," >> $@
>> +    @cat $< | xxd -include >> $@
>> +    @echo "};" >> $@
>> +
>> +offload_target_main: $(liboffload_dir)/ofldbegin.o offload_target_main.o 
>> $(liboffload_dir)/ofldend.o
>> +    $(CXX) $(AM_LDFLAGS) $^ -o $@
>> +
>> +offload_target_main.o: offload_target_main.cpp
>> +    $(CXX) $(AM_CXXFLAGS) $(AM_CPPFLAGS) -c $< -o $@
> 
> Here, I note that the xxd tool is being used, which in my distribution is
> part of the Vim editor's package, which -- as far as I know -- is not
> currently declared as a build dependency of GCC?
> 
> Anyway, all that aside for the moment -- OK to commit the following?
> 
> --- liboffloadmic/plugin/Makefile.am
> +++ liboffloadmic/plugin/Makefile.am
> @@ -69,7 +69,7 @@ main_target_image.h: offload_target_main
>    @echo "struct MainTargetImage {" >> $@
>    @echo "  int64_t size;" >> $@
>    @echo "  char name[sizeof \"offload_target_main\"];" >> $@
> -    @echo "  char data[image_size];" >> $@
> +    @echo "  uint8_t data[image_size];" >> $@
>    @echo "};" >> $@
>    @echo "extern \"C\" const MainTargetImage main_target_image = {" >> $@
>    @echo "  image_size, \"offload_target_main\"," >> $@
> 
> 
> Grüße,
> Thomas

Ok to me, thanks.

The plugin consists of 2 parts: offload_target_main is a target part, which is 
embedded into the host part (libgomp plugin itself). Target part is linked with 
liboffloadmic_target.so and host part is linked with liboffloadmic_host.so. 
Both offload_target_main and liboffloadmic_target.so are compiled by the target 
compiler during its build.

As for xxd, I've found its usage in some Makefile inside gcc tree, so I thought 
it's ok to use it.

  -- Ilya

Reply via email to