Tendo biblioteca de LLVM IR como crosscompile-lo paira iOS, Android, Windows e Mac do Ubuntu?

Tenho representações de todas as minhas dependencies e minha biblioteca em formulários IR LLMM. Como cross-compile minha biblioteca em um object compairtilhado paira plataforms iOS, Android, Windows e Mac do Linux (Ubuntu, por exemplo)?

Forneça um único script de exemplo que compilairia qualquer biblioteca de exemplo com pelo less uma dependência em outra biblioteca de sua escolha paira todas as 4 plataforms (por exemplo, OpenCV ou ZeroMQ 4+).

  • java.lang.RuntimeException: takePicture falhou
  • Falha ao aplicair o plugin O complemento do Android Gradle 3.0.0-alpha5 não deve ser aplicado ao projeto
  • Phonegap 3.0 - Android: Native Scrollbair não visível
  • asp.net: Como detectair o iOS / Android?
  • Android: desenha fora do path fechado em vez de dentro
  • Como implementair folhas de background usando nova biblioteca de suporte de design 23.2
  • Exceção de Android AlertDialog "Recursos $ NotFoundException"
  • Como adicionair um item suspenso na bairra de ação
  • Salvair dados no método onDestroy da atividade
  • Passando dados entre Fragmentos na mesma Atividade
  • Erro: o path de origem não existe: resources \ android \ icon \ drawable-hdpi-icon.png
  • Menu do círculo do Android como as notas de captura
  • 2 Solutions collect form web for “Tendo biblioteca de LLVM IR como crosscompile-lo paira iOS, Android, Windows e Mac do Ubuntu?”

    Usando o compilador static do LLVM (llc), você pode compilair o IR do LLVM em files de object paira um triplo de destino específico. Embora os triplos de destino não estejam bem documentados, a infraestrutura LLVM é de código aberto, então uma busca rápida pelo código-fonte irá levá-lo aqui .

    Infelizmente, não há documentation paira uma list discreta de possíveis triplos de destino que você pode usair. No entanto, se você souber exatamente qual sistema você está segmentando, build um triplo é bastante fácil. Tirado da documentation tripla alvo , você pode view:

    O triplo possui o format geral <airch><sub>-<vendor>-<sys>-<abi> , onde:

    • airch = x86_64 , i386 , airm , thumb , mips , etc.
    • sub = por ex. em ARM: v5 , v6m , v7a , v7m , etc.
    • vendor = pc , apple , nvidia , ibm , etc.
    • sys = none , linux , win32 , dairwin , cuda , etc.
    • abi = eabi , gnu , android , macho , elf , etc.

    Depois de descobrir o destino triplo que você está usando, você especifica como uma string usando o sinalizador -mtriple . aqui estão alguns exemplos:

    • Windows: -mtriple=i686-pc-win32-gnu
    • Linux: -mtriple=i686-pc-linux-gnu
    • IOS: -mtriple=airmv7-apple-ios
    • Android: -mtriple=airm-linux-androideabi

    Em seguida, você precisa especificair que deseja compilair um file de object usando o flag filetype:

     -filetype=obj 

    Isso deve ser suficiente se eu entender sua pergunta corretamente.

    Se você está esperando usair um único file em todas as plataforms e sistemas operacionais, enquanto isso é possível, seria muito trabalho e não esperairia uma resposta sobre isso no stackoviewflow.

    A pairtir deste link , existe uma vairiável LLVM_TARGETS_TO_BUILD e a definição diz que

    Uma list delimitada de ponto-e-vírgula controlando quais alvos serão construídos e vinculados em llc. Isso é equivalente à opção --enable-tairgets no script de configuration. A list padrão é definida como LLVM_ALL_TARGETS e pode ser configurada paira include alvos fora da tree. O valor padrão inclui: AArch64, AMDGPU, ARM, BPF, Hexagon, Mips, MSP430, NVPTX, PowerPC, Spairc, SystemZ, X86, XCore.

    Você deve adicionair o X86 e o ​​ARM está presente nele. você precisa adicionair suporte paira 64 e Apple

    A pairtir deste link

    É possível cruzair a compilation

    O exemplo de command pairece

     % cmake -G "Ninja" -DCMAKE_OSX_ARCHITECTURES="airmv7;airmv7s;airm64" -DCMAKE_TOOLCHAIN_FILE=<PATH_TO_LLVM>/cmake/platforms/iOS.cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_BUILD_RUNTIME=Off -DLLVM_INCLUDE_TESTS=Off -DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_ENABLE_BACKTRACES=Off [options] <PATH_TO_LLVM> 

    Também gostairia de compairtilhair este link . Diz

    A opção básica é definir a architecture de destino. Paira isso, use -tairget. Se você não especifica o alvo, os nomes da CPU não coincidirão (uma vez que Clang assume o triplo do host) e a compilation continuairá, criando o código paira a plataforma host, que será mais tairde lançado ao montair ou vinculair.

    O triplo possui o format geral <airch><sub>-<vendor>-<sys>-<abi> , onde:

     airch = x86_64, i386, airm, thumb, mips, etc. sub = for ex. on ARM: v5, v6m, v7a, v7m, etc. vendor = pc, apple, nvidia, ibm, etc. sys = none, linux, win32, dairwin, cuda, etc. abi = eabi, gnu, android, macho, elf, etc. 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.