The failing command is for the host build of libart-compiler.  The
host version of libLLVM comes from prebuilts/sdk/tools/Android.mk as a
prebuilt.  Try building with make FORCE_BUILD_LLVM_COMPONENTS=true to
rebuild the host version of libLLVM.so from source and pick up your
LOCAL_EXPORT_C_INCLUDE_DIRS.


On Sat, Apr 30, 2016 at 2:42 PM, Paschalis Mpeis
<[email protected]> wrote:
> Thanks for helping me out Colin Cross.
>
> So, as per your suggestions I did just the following changes:
> art/compiler/Android.mk: (after this line)
> ..
> LOCAL_SHARED_LIBRARIES += libLLVM
> ..
>
> On this makefile I have also added an additional llvm_compiler.cc file in
> the LIBART_COMPILER_SRC_FILES variable.
> For the reference here is the additional file:
> art/compiler/llvm/llvm_compiler.cc:
>  #include "llvm_compiler.h"
> // just to test whether it finds the header
> // tried also with < instead of double quotes
> #include "llvm/LinkAllPasses.h"
>
> namespace art {
>   class TestLLVM {
>     public:
>         void Test() {
>         // no code for now..
>         }
>   };
> }
>
> And its header:
> art/compiler/llvm/llvm_compiler.h:
> #ifndef _ART_COMPILER_LLVM_LLVM_COMPILER_H_
> #define _ART_COMPILER_LLVM_LLVM_COMPILER_H_
>
> #ifndef __STDC_CONSTANT_MACROS
> #define __STDC_CONSTANT_MACROS
> #endif
>
> #ifndef __STDC_LIMIT_MACROS
> #define __STDC_LIMIT_MACROS
> #endif
>  namespace art {
> // quite empty
> }
> #endif
>
> On the LLVM module:
> external/llvm/shared_llvm.mk after this and this line (that set of the
> LOCAL_MODULE variables):
> ..
> LOCAL_EXPORT_C_INCLUDE_DIRS := $(LLVM_ROOT_PATH)/include
> ..
>
> Export includes seem to be working:
> cat $OUT/obj/SHARED_LIBRARIES/libLLVM_intermediates/export_includes:
>>
>> -I external/llvm/include
>
>
>
> cat $OUT/obj/SHARED_LIBRARIES/libart-compiler_intermediates/import_includes:
>>
>> -I external/llvm/include
>
>
>
> Make command:
> mmma -j8 art/compiler/ showcommands
> Result: link
>
> Since this did not work, I have also tried doing these extra modifications
> (still no luck):
> art/build/Android.common_build.mk: after this line:
> LLVM_ROOT_PATH := external/llvm
> include $(LLVM_ROOT_PATH)/llvm.mk
>
> Result: link
>
>
> On Friday, April 29, 2016 at 6:20:24 PM UTC+1, Colin Cross wrote:
>>
>> LOCAL_EXPORT_C_INCLUDE_DIRS := $(LLVM_ROOT_PATH)/include plus
>> LOCAL_SHARED_LIBRARIES += libLLVM should work.  Adding it to
>> llvm-host-build.mk and llvm-device-build.mk is overkll, those are used
>> for building everything in external/llvm, but you only need to affect
>> the libLLVM module itself.  I'd suggest adding
>> LOCAL_EXPORT_C_INCLUDE_DIRS to the two modules in shared_llvm.mk.
>>
>> If it is still not working, you can see if the export is working correctly
>> with:
>> cat $OUT/obj/SHARED_LIBRARIES/libLLVM_intermediates/export_includes
>> And if the import is working using:
>> cat
>> $OUT/obj/SHARED_LIBRARIES/libart-compiler_intermediates/import_includes
>>
>> If that is still not working, post the exact command that fails with
>> make showcommands and the output.
>>
>> On Thu, Apr 28, 2016 at 7:40 AM, Paschalis Mpeis
>> <[email protected]> wrote:
>> > Problem
>> > I want to include the external/llvm module in the art/compiler module
>> > and
>> > use some of its functionality.
>> > I have updated:
>> >   1. the relevant makefiles (.mk) in art/build and art/compiler to
>> > include
>> > the LLVM module
>> >   2. the LLVM module so it can export its includes, but still the
>> > headers
>> > cannot be found.
>> >
>> > It seems that LOCAL_EXPORT_C_INCLUDES or LOCAL_EXPORT_C_INCLUDE_DIRS do
>> > not
>> > work.
>> > In a second approach, I have tried to manually expand the include
>> > directory
>> > in art's makefiles, but this causes other problems!
>> > You can find the changes I made below:
>> >
>> > Approach 1:
>> > art/build/Android.common_build.mk:
>> >  ..
>> >  LLVM_ROOT_PATH := external/llvm
>> >  include $(LLVM_ROOT_PATH)/llvm.mk
>> >  ..
>> >
>> >
>> > art/compiler/Android.mk
>> >  ..
>> >  LOCAL_SHARED_LIBRARIES += libLLVM
>> >  ..
>> >
>> >
>> > external/llvm/ llvm-host-build.mk and llvm-device-build.mk:
>> > Right after of [LOCAL_C_INCLUDES (link in aosp code):
>> >
>> > ..
>> > # tested all of these individually:
>> > # test1
>> > LOCAL_EXPORT_C_INCLUDE_DIRS := $(LLVM_ROOT_PATH)
>> > # test2
>> > LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_C_INCLUDES)
>> > # test3
>> > LOCAL_EXPORT_C_INCLUDE :=  $(LOCAL_C_INCLUDES)
>> > ..
>> >
>> >
>> > Then I built the external/llvm module, and subsequently the art/compiler
>> > module, which had an additional source file with the following line:
>> >  #include <llvm/LinkAllPasses.h> // also tried with double quotes -> "
>> >  // this inclusion is just an example.
>> >
>> >
>> > It seems that the export that should have happened when llvm was built
>> > never
>> > occurred, so the above include resulted in the compilation error:
>> >>
>> >> "file not found"
>> >
>> >
>> > I have also tried to add in external/llvm/shared_llvm.mk the following:
>> >
>> > Right after the lines here and here:
>> >  LOCAL_MODULE_CLASS := SHARED_LIBRARIES
>> >
>> >
>> >
>> > Approach 2:
>> > Kept makefiles the same, and appended on the following makefile:
>> > art/compiler/Android.mk
>> > LOCAL_C_INCLUDES += external/llvm/include
>> > LOCAL_CFLAGS += -D_GNU_SOURCE -D__STDC_LIMIT_MACROS
>> > # code that checks if a device build:
>> > LOCAL_C_INCLUDES += external/llvm/device/include
>> > # code that checks if a host build:
>> > LOCAL_C_INCLUDES += external/llvm/host/include
>> >
>> >
>> > The headers can now be found but this causes lot of other problems.
>> > The included headers should be included in the exact state they had
>> > after
>> > the preprocessor ran over them. Manually appending CFLAGS in the
>> > compiler's
>> > makefile (line 2 of above snippet) does not solve this problem. Also, I
>> > don't think this is the recommended way to include the header files of
>> > another module.
>> >
>> > Additional info
>> >
>> > I am working on the Marshmallow branch
>> > I 've seen how other modules successfully include and use llvm, like
>> > lldb,
>> > but still I haven't noticed what they do differently to successfully use
>> > the
>> > llvm module
>> > I 've read the build/core/build-system.html, and digged into the build
>> > sources in general
>> > I 've seen how this was included some time ago when there was an
>> > experimental llvm backend in art/compiler
>> >
>> >
>> > Question
>> > What is the proper way to include and use llvm module from the
>> > art/compiler
>> > module in AOSP?
>> >
>> > --
>> > --
>> > You received this message because you are subscribed to the "Android
>> > Building" mailing list.
>> > To post to this group, send email to [email protected]
>> > To unsubscribe from this group, send email to
>> > [email protected]
>> > For more options, visit this group at
>> > http://groups.google.com/group/android-building?hl=en
>> >
>> > ---
>> > You received this message because you are subscribed to the Google
>> > Groups
>> > "Android Building" group.
>> > To unsubscribe from this group and stop receiving emails from it, send
>> > an
>> > email to [email protected].
>> > For more options, visit https://groups.google.com/d/optout.
>
> --
> --
> You received this message because you are subscribed to the "Android
> Building" mailing list.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-building?hl=en
>
> ---
> You received this message because you are subscribed to the Google Groups
> "Android Building" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
-- 
You received this message because you are subscribed to the "Android Building" 
mailing list.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-building?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"Android Building" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to