SORU
14 EKİM 2012, Pazar


Nasıl Bunun çapraz derleyicisi"

Hedef makine için generate the fitting configuration files bir yolunu bulduktan sonra, çapraz derleyici kendisi hala inşa edilmelidir. Yaklaşım 1 1/2 kullanarak described here (ve, daha fazla bilgi, here) Eğer ana ve hedef sistemleri çok fazla farklıysa iş vermiyor kurmak. Burada inşa komut dosyası değiştirilmiş parçası $ svn cat svn://svn.psellos.com/trunk/ocamlxarm/3.1/xarm-build ile elde edilebilir

# Small steps
config1 () {
    # Configure for building bytecode interpreter to run on Intel OS X.
    # But specify * architecture for assembly and partial link.
    echo 'xarm-build: ----- configure phase 1 -----'
    ./configure \
            -prefix "" \
            -no-curses \
            -no-tk \
            -no-graph \
            -as "" \
            -aspp ""\
            -partialld ""
    # Post-modify config/Makefile to select the * back end for
    # ocamlopt (to generate * assembly code).
    $SED -i'.bak'\
        -e '1i\# modified by xarm-build for OCamlXARM' \
        -e 's/^ARCH[    ]*=.*/ARCH=/' \
        -e 's/^MODEL[    ]*=.*/MODEL=/' \
        config/Makefile
        #-e 's/^SYSTEM[      ]*=.*/SYSTEM=/' \
    $SED -i'.bak'\
        -e '1i\/* modified by xarm-build for OCamlXARM*/' \
        -e 's/^#define[     ][  ]*HAS_STACK_OVERFLOW_DETECTION.*$//' \
        config/s.h

    # Post-modify utils/config.ml to tell ocamlopt to create *
    # binaries for itself.  Also tell ocamlc and ocamlopt to use *
    # architecture when compiling C files.
    make utils/config.ml 
    $SED -i'.bak'\
        -e 's#let[  ][  ]*mkexe[    ]*=.*#let mkexe ="'"$CC"'"#' \
        -e 's#let[  ][  ]*bytecomp_c_compiler[  ]*=.*#let bytecomp_c_compiler ="'"$CC"'"#' \
        -e 's#let[  ][  ]*native_c_compiler[    ]*=.*#let native_c_compiler ="'"$CC"'"#' \
        utils/config.ml
}

build1 () {
    # Don't assemble asmrun/*.S for Phase 1 build.  Modify Makefile
    # temporarily to disable.  Be really sure to put back for Phase 2.
    echo 'xarm-build: ----- build phase 1 -----'
    trap 'mv -f asmrun/Makefile.aside asmrun/Makefile' EXIT
    mv -f asmrun/Makefile asmrun/Makefile.aside
    $SED -e '/^[    ]*ASMOBJS[  ]*=/s/^/#/' \
        -e 's#^include[     ][  ]*../config/Makefile#include ../config/Target/Makefile#' \
        asmrun/Makefile.aside > asmrun/Makefile
    make world && make opt
    mv -f asmrun/Makefile.aside asmrun/Makefile
    trap - EXIT
}

Bu derleme kalmışstdlibsözleşmeler çağıran bir onaylama işlemi başarısız olduğu alt.

let loc_external_arguments =
  match Config.system with
  | "rhapsody" -> poweropen_external_conventions 0 7 100 112
  | "elf" | "bsd" -> calling_conventions 0 7 100 107 outgoing 8
  | _ -> assert false 

Hatta bu konuya girmek istiyorum/Makefile amsrunçapraz derleme araçları kullanmak için değiştirilmesi gerekiyordu, ve HAS_STACK_OVERFLOW_DETECTION dan kaldırılması gerekiyorduconfig/s.hberi . ben^>/signals_asm amsrun.caksi halde derlenmiş olabilir.

Yani bu işi yapmak için bir yoldur, ya da this manner diğer yaklaşımlar daha iyi (ve Bunun en 4.00.0 serbest çalışma) uygun mu?

CEVAP
11 Ocak 2015, Pazar


Sorunun kendisi... oldukça ilginç bir şekilde yanıtladı. Gerçekten (2012) soran oldu ne sürüm 4 için çapraz derleyici (belirtilmemiş sürüm) hedefleyen bir iOS.Bunun x. Ve söz konusu kod dökümü Bunun 3.1 Jeffrey Scofield çapraz derleme talimatları ve script (ocamlxarm/3.1) kullanmaya çalışıyordu.x, oldukça Bunun için bir işe yaramamış 4.0. Ama Scofield's web page hangi soruyu bağlantılar için güncellendi bu arada (geçen Aralık 2014) için aslında bir çözüm sağlamak için Bunun 4.0 (şu anda bunun-4.01.0 xarm-4.0.2-v7), böylece yapma soru olarak sordum burada ("yok bir şekilde bu işi yapmak için") tartışmalı veya çok önemsiz. Ya da:

  • Yükleme öncesi inşa ocaml-4.01.0 xarm-4.0.2-v7.dmg paket şu anda bu web sayfasında verilmiştir. Kullanım talimatı da okudum, ve geçiş yapmayı sağlayan ** 12 kullanarak hayatınızı kolaylaştırmak için ve 8 hedefleri iOS 7 arasında olduğundan emin olun. Ya da eğer bir şekilde hala Bunun inşa etmek gerekiyorsa-derleyici çapraz kaynaklardan...
  • Yönergeleri "Ek:" bölümü sayfa (HTML için çapa için, üzgünüm yok). Kaynaklardan Binası izleyin Bu talimatları ne yazık ki on iki paragraf (metin 9KB) uzun hakkında, onları buraya kopyalamak için gitmiyorum. Çapraz derleme iOS 4.0.1 Bunun için necessary patches bir bağlantı vardır. Umarım, bir web sayfasını tam olarak adımları söz konusu oluşturmak için kullanılan yazılı ne bunun-4.01.0 xarm-4.0.2-v7.dmg. O dmg paketi (Apple bile eşdeğer bir teknoloji var mı?) RedHat-style SRPM Apple-eşdeğer gibi bir şey olmadığı için ancak, olası adımları söz konusu dmg oluşturmak için kullanılan tamamen web sayfasında yeniden kesin emin olmak için değil. Vardeğilkendimi bu adımları eğer çalışıp çalışmadığını görmek için takip etmeye çalıştı.

Ama bence yine de bu soruyu sordu burada temelde çözülmüş genel anlamda "yok bir şekilde bu işi yapmak için" yükleyerek önceden oluşturulmuş 4.0.1 ıkili Scofield web sayfası... bağlantılı değil mi bu soru. Scofield'ın ocamlxarm inşa sistemi sürüm 3.1 ile ilgili sorunlar çapraz derleme Bunun 4.0 için mümkün olmayan hiç kimse bu noktada önemsiyor atasözü şeyler olmalı. Eğer 4.0 için Scofield talimatları veya yamalar çalışmıyor ile ilgili sorunlar varsa, bu soru işin cesur hataları burada bu senaryo için alakasız gibi görünüyor, çünkü ayrı ayrı, bence sorulması gerekir.

(Ve yukarıda aşırı titiz görünüyor, çoğunlukla modifiye ederek' bugünkü cevabım büyüttüm istemek.)

Ancak OP muhtemelen yok bakımı hakkında ne söyleyeceğimi bu paragraf, verilen ne kadar genel bir soru Başlığı, geleceğim nokta orada da var bir hayli yeni proje bakımı Bunun bir çapraz-derleyici hedefleyen Android, adı opam-android. Ve bu bir hırsızlık-nasıl bu kadar kolay olabilir bir git repo komut olarak tüm yapı parçalarına sahip. Karşılaştırma yamalar bu iki çapraz-derleyici, pek bir şey yok şu söylenebilir genel olarak nasıl yapmak Bunun iş olarak çapraz derleyici dışında: ihtiyacınız kesmek için belirli hedef platform. Diyecek bir şey Scofield'ın iOS yama çok daha rahatsız edici (ve çok) daha Android yamaları daha. Scofield'ın yama bir sürü register düzeyinde kod oluşturma ile bir ilgisi yoktur. İOS bu değişiklikler iOS için gerekli olduğunu neden söylemek iç ama Android için olmayan hakkında yeterince bilgim yok, onlar temelde aile CPU aynı KOL istihdam bile. Belki birisi Jeffrey Scofield kendisi muhtemelen cevap için mutlu olurdu aslında ilginç/önemsiz olmayan bir soru sorayım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kenneth Håkonsen

    Kenneth Håk

    13 Mart 2011
  • Michael Neal

    Michael Neal

    2 Mayıs 2009
  • National Geographic

    National Geo

    7 Mayıs 2006