Какой набор инструментов мне нужен для кросс-компиляции Clang для iOS - PullRequest
12 голосов
/ 22 сентября 2011

ОК, прежде всего, я знаю, что это можно скомпилировать на iOS (armv7), потому что я читаю документацию.Однако я не могу найти подходящую цепочку инструментов.

Итак, какие цепочки инструментов я уже пробовал:

i686-apple-darwin10-cpp-4.2.1
i686-apple-darwin10-g++-4.2.1
i686-apple-darwin10-gcc-4.2.1

Вышеприведенные кросс-компиляции для x86 (я нахожусь наi386).Работает отлично.Но мне это не нужно

arm-apple-darwin10-cpp-4.2.1
arm-apple-darwin10-g++-4.2.1
arm-apple-darwin10-gcc-4.2.1

Вышеприведенное прекрасно компилируется, но не пересекается с компиляцией, как я ожидал, вместо этого оно просто компилируется в мою текущую арку.

Я настоящий новичок в этом вопросе, на самом деле это моя первая попытка что-то кросс-компилировать.

ОБНОВЛЕНИЕ:

Вот команды, которые я пробовал (этодля armv6; armv7 аналогичен):

настроить:

../llvm/configure --host=arm-apple-darwin6 --target=arm-apple-darwin6 
--build=i386-apple-darwin --enable-optimized --disable-debug  
--disable-expensive-checks --disable-doxygen  --disable-threads

env vars:

    export DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
export SDKROOT=$DEVROOT/SDKs/iPhoneOS$IOS_BASE_SDK.sdk

export CFLAGS="-arch armv6 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT -I$SDKROOT/usr/include/"

    export CPP="$DEVROOT/usr/bin/arm-apple-darwin10-cpp-4.2.1"
export CXX="$DEVROOT/usr/bin/arm-apple-darwin10-g++-4.2.1"
export CXXCPP="$DEVROOT/usr/bin/arm-apple-darwin10-cpp-4.2.1"
export CC="$DEVROOT/usr/bin/arm-apple-darwin10-gcc-4.2.1"
export LD=$DEVROOT/usr/bin/ld
export AR=$DEVROOT/usr/bin/ar
export AS=$DEVROOT/usr/bin/as
export NM=$DEVROOT/usr/bin/nm
export RANLIB=$DEVROOT/usr/bin/ranlib
export LDFLAGS="-L$SDKROOT/usr/lib/"

export CPPFLAGS=$CFLAGS
export CXXFLAGS=$CFLAGS

ОБНОВЛЕНИЕ: Цель этого кросс-компиляции состоит в создании armv7Библиотека (armv6) не является инструментом командной строки.

ДАЛЕЕ ДРУГОЕ ОБНОВЛЕНИЕ: Я использовал следующее:

CC="$DEVROOT/usr/bin/clang"
CXX="$DEVROOT/usr/bin/clang++"

./llvm/configure --host=i386-apple-darwin --target=armv7-apple-darwin --build=armv7-apple-darwin --enable-optimized --disable-debug --disable-expensive-checks --disable-doxygen  --disable-threads --enable-targets=arm 

И мне удалось извлечь checking whether we are cross compiling... yes из инструмента configure.Однако make все еще выводит двоичный файл x86_64: (

1 Ответ

1 голос
/ 22 сентября 2011

В принципе ваш вызов configure выглядит хорошо.Я пытаюсь высказать несколько типичных ошибок:

  1. Вы make clean после каждого изменения архитектуры?
  2. Почему вы так уверены, что LD, RANLIB и т. Д.ваша хост-система подходит для кросс-компиляции?Это перезапишет автоматически настроенное значение LD.(Здесь будет ошибочно указывать строку «export LD = ld».)
  3. Не могли бы вы проверить типичный компилятор и типичный вызов компоновщика в выходных данных make для их правильного использования инструментов кросс-компиляции?
...