लक्ष्य मशीन के लिए generate the fitting configuration files पर कोई रास्ता खोजने के बाद, क्रॉस कंपाइलर को अभी भी बनाया जाना चाहिए। 1 1/2 बिल्ड described here (और, अधिक जानकारी के साथ, here) का उपयोग करने का दृष्टिकोण काम नहीं करता है यदि होस्ट और लक्ष्य सिस्टम बहुत अधिक भिन्न होते हैं। यहाँ निर्माण स्क्रिप्ट (जो $ svn cat svn://svn.psellos.com/trunk/ocamlxarm/3.1/xarm-build
साथ प्राप्त किया जा सकता) की बदली हुई भागओकैमल क्रॉस कंपाइलर का निर्माण कैसे करें
# 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
}
संकलन stdlib सबफ़ोल्डर, जहां बुला सम्मेलनों पर एक अभिकथन विफल रहता है में फंस जाता है।
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
भी इस मुद्दे पर पाने के लिए, amsrun/Makefile पार संकलन toolchain उपयोग करने के लिए संशोधित किया जा सकता था, और HAS_STACK_OVERFLOW_DETECTION
के बाद से amsrun/signals_asm.c config/श से हटाया जाना था अन्यथा संकलित नहीं किया जा सका।
तो क्या यह काम करने का कोई तरीका है, या this manner में अन्य दृष्टिकोण बेहतर अनुकूल हैं (और ओसीएमएल की 4.00.0 रिलीज के साथ काम करते हैं)?
मेरा मानना है कि ओकैम सूचियां या फ़ोरम http://caml.inria.fr/resources/forums.en.html पूछने के लिए एक बेहतर जगह है। –
मुझे नहीं पता कि आपका लक्ष्य कैसा दिखता है, लेकिन मुझे संदेह है कि एक्सर्म-बिल्ड स्क्रिप्ट वास्तव में बहुत करीब है। यह इंटेल पर ओएस एक्स से एआरएम (इसी तरह के सिस्टम, लेकिन बहुत अलग CPUs) पर क्रॉस संकलन के लिए काम करता है। (अस्वीकरण: मैंने एक्सर्म-बिल्ड लिखा था।) लेकिन बेसिल सही है, आपको ओकैमल मेलिंग सूचियों पर बेहतर उत्तर मिल सकते हैं। ऐसे कई छोटे विवरण हैं जिन्हें बिल्कुल सही होना है। –
@ जेफरीस्कोफिल्ड इसकी (लिनक्स, i386) -> (लिनक्स, पीपीसी)। ये प्लेटफ़ॉर्म बहुत अलग नहीं होने चाहिए, लेकिन ऐसा लगता है कि ऑब्जेक्ट फ़ाइल/निष्पादन योग्य फ़ाइल स्वरूप थोड़ा अलग हैं। वैसे भी, मैं ओसीएएमएल लोगों से पूछूंगा। धन्यवाद। –