Hey Guys, Been a while since I updated here... I'm still chipping away at compiling libFaust for Android. I've found that AOSP actually includes a version of libLLVM (which they name libLLVM_android.so) in their build process and that library ships with the Generic System Image as well as included in the Vendor NDK (VNDK; https://source.android.com/devices/architecture/vndk).
Unfortunately this means that in order to leverage the AOSP provided libLLVM library I need to compile libFaust as if it were a Vendor Module by using the VNDK as part of the AOSP build process. Which means that I need to incorporate the Soong Build System into Faust by preparing Android.bp files which represent the build steps ( https://android.googlesource.com/platform/build/soong/+/refs/heads/master/README.md ; https://source.android.com/devices/architecture/vndk/build-system). The other option I'm considering is trying to extract the compiler parameters that AOSP uses to compile their libLLVM library and add them to my build script for the full LLVM project. Hopefully that will produce the shared library and file sizes that I am looking for. I'm not sure which option is the best to pursue right now... AOSP's libLLVM has some modifications from the full LLVM Project, but I can't image that they are huge changes. I'm thinking that trying to extract the appropriate compile parameters might be the more appropriate solution since I think I'd have to convert most of the Faust CMake logic into these Android.bp files... On Fri, Jun 21, 2019 at 5:36 PM Justin Giannone <[email protected]> wrote: > Oh, forgot to mention. I've also had to make some minor changes to the > Faust Source Code & CMake Files in order to support Android. I've just > opened a Pull Request with those changes here : > https://github.com/grame-cncm/faust/pull/335 > > On Fri, Jun 21, 2019 at 5:33 PM Justin Giannone <[email protected]> > wrote: > >> Fantastic progress! Functional build script for Faust for Android : >> https://github.com/Jman420/faust_for_android >> >> I haven't tested it out with any of the examples yet because the shared >> library is huge (almost 800mb) which is just too big. I just modified the >> build scripts for Faust & LLVM to use 'MinSizeRel' as its build type to >> hopefully reduce the sizes. Running those builds now... >> >> On Mon, Jun 17, 2019 at 6:01 PM Stéphane Letz <[email protected]> wrote: >> >>> Depending of the platform (especially OS X and Linux) we have various >>> positive and negative experiences using either static libraries or dynamic >>> one… ((-; For example right now FaustLive (which used libfaust) has to be >>> linked with the dynamic libfaust library. But we produce OS X faustgen~ >>> version (also using libfaust) with the static version. >>> >>> So the best is just to try... >>> >>> Stéphane >>> >>> >>> > Le 17 juin 2019 à 20:43, Justin Giannone <[email protected]> a >>> écrit : >>> > >>> > I've made some progress and have gotten LLVM static libraries built >>> using Android NDK. My scripts with instructions can be found here : >>> https://github.com/Jman420/llvm_for_android >>> > >>> > Unfortunately I haven't been able to get LLVM to compile as a shared >>> library though. I'm wondering if that is even necessary though since >>> libfaust should still be able to link against them. >>> > >>> > On Thu, Jun 13, 2019 at 9:33 AM <[email protected]> wrote: >>> > Search for cross-compile LLVM for Android, like for instance: >>> https://gist.github.com/syoyo/9acc46554723db14d3a5 (although a but >>> old..) >>> > >>> > Stéphane >>> > >>> > > Le 13 juin 2019 à 15:30, Justin Giannone <[email protected]> >>> a écrit : >>> > > >>> > > Hey Stéphane, >>> > > >>> > > Yeah... no responses coming in on the LLVM mailing list. I'll >>> likely try to rephrase my question and bump my post over there to see if I >>> can get any support. >>> > > >>> > > Thanks for all your feedback! Glad to hear I've been going down the >>> right path so far since I've been trying to use the Android NDK chains to >>> compile LLVM for Android. >>> > > >>> > > I had a thought last night that it may be that LLVM is trying to >>> compile some host executables that it wants to leverage in order to >>> cross-compile the target binaries... obviously that wouldn't work using the >>> NDK chains, but I think there are Build Options to specify paths to the >>> host executables. >>> > > >>> > > On Thu, Jun 13, 2019 at 2:36 AM Stéphane Letz <[email protected]> wrote: >>> > > Hi Justin, >>> > > >>> > > I’ve seen your question about compilation of LLVM on Android on the >>> LLVM mailing list, with basically… 0 answer right !? ))-; >>> > > >>> > > The LLVM compilation chain is used in the LLVM backend (see the code >>> here >>> https://github.com/grame-cncm/faust/tree/master-dev/compiler/generator/llvm). >>> Basically the Faust internal FIR (Faust Imperative Representation) is >>> traduced in LLVM IR, then the LLVM JIT component is used to compile LLVM IR >>> to the actual machine code for the target processor. So only a « subpart » >>> of the complete LLVM compilation chain is actually needed. The front-end >>> (which is used to go from source language like C/C++/Swift to LLVM IR) is >>> not needed in our case since the LLVM IR is directly generated. >>> > > >>> > > Basically what you need is : >>> > > >>> > > - cross-compile the LLVM compilation chain for Android (the same way >>> other C/C++ libraries are compiled with the NDK chain to target Android >>> devices) >>> > > >>> > > - compile libfaust with the LLVM backend (using the « make developer >>> » target at the upper level in the Faust directory). This should end u >>> linking wth the LLVM libraries that would have been compiled in the first >>> step. >>> > > >>> > > - look at the libfaust API defined in the public llvm-dsp.h header >>> (see >>> https://github.com/grame-cncm/faust/blob/master-dev/architecture/faust/dsp/llvm-dsp.h >>> ) >>> > > >>> > > - test some of the simple examples that use libfaust API (see >>> https://github.com/grame-cncm/faust/tree/master-dev/tests/llvm-tests) >>> > > >>> > > Stéphane >>> > > >>> > > >>> > > > Le 12 juin 2019 à 22:10, Justin Giannone <[email protected]> >>> a écrit : >>> > > > >>> > > > Hey Guys, >>> > > > >>> > > > I'm trying to compile libfaust in order to use the JIT Compiler in >>> a Java & C++ Android App. Specifically having a Frontend App written in >>> Java which the User leverages in order to tune a Backend AudioFlinger >>> Module written in C++. The Backend Module is where the audio processing >>> will take place, although some processing may take place in the Frontend to >>> provide feedback to the User as well. >>> > > > >>> > > > I'm trying to understand how I will need to include LLVM for >>> libfaust to function. Here are the questions I've come up with : >>> > > > - Does libfaust expect a full compiled installation of LLVM to >>> be present (meaning shared libs, headers, executables, etc)? Or just a >>> subset of those files? I expect that it just needs necessary libs since >>> the JIT Compiler is all in-memory. >>> > > > - Should I use Android NDK Toolchains to compile LLVM for >>> Android Architectures? Since Android NDK uses LLVM to compile Android Apps >>> I'm not sure that it makes sense to use it to try to compile LLVM to run in >>> Android. >>> > > > >>> > > > Currently the issue that I run into when trying to use the Android >>> NDK to build LLVM is that cmake tries to compile and execute a sample app, >>> but since my Dev Machine is Windows the sample app can't run. >>> > > > _______________________________________________ >>> > > > Faudiostream-devel mailing list >>> > > > [email protected] >>> > > > https://lists.sourceforge.net/lists/listinfo/faudiostream-devel >>> > > >>> > >>> >>>
_______________________________________________ Faudiostream-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/faudiostream-devel
