Сборка компилятора и виртуальной машины для языка программирования Dart на Ubuntu 11.10

1. Подготовка системы

По инструкции из официального репозитория языка Google Dart (https://code.google.com/p/dart/wiki/PreparingYourMachine) предлагается использовать скрипт из исходников браузера Chromium, который установит в систему все необходимые зависимости:

wget http://src.chromium.org/svn/trunk/src/build/install-build-deps.sh
source install-build-deps.sh

Но данный скрипт предлагает устанавить достаточно большой объем пакетов, большая часть которых, не нужна для компиляции Dart! Поэтому вполне можно ограничится только следующими пакетами:


для 32 разрядных систем

sudo apt-get install libc6-dev
sudo apt-get install build-essential subversion python
sudo apt-get install gcc-multilib g++-multilib libssl-dev
sudo apt-get install openjdk-6-jdk

для 64 разрядных систем необходимо устанавливать так же 32 битные библиотеки, поскольку сборка Dart осуществляется пока только для i386

sudo apt-get install libc6-dev libc6-dev:i386
sudo apt-get install build-essential subversion python
sudo apt-get install gcc-multilib g++-multilib libssl-dev
sudo apt-get install openjdk-6-jdk
sudo apt-get install ia32-libs

2. Установка depot_tools из SVN репозитория Google

svn checkout http://src.chromium.org/svn/trunk/tools/depot_tools
export PATH=$PATH:`pwd`/depot_tools

3. Установка dart из SVN репозитория Google

mkdir dart
cd dart
gclient config http://dart.googlecode.com/svn/trunk/deps/all.deps
gclient sync
* Если вы хотите собрать только компилятор, то можно воспользоваться следующей коммандой:
gclient config http://dart.googlecode.com/svn/trunk/deps/compiler.deps
 
** Если вы хотите собрать только виртуальную машину, то можно воспользоваться следующей коммандой:
gclient config http://dart.googlecode.com/svn/trunk/deps/standalone.deps

4. Компиляция исходников

На момент написания статьи, было возможность компиляции только 32 разрядной версии, поэтому при компиляции указывается ключ --arch=ia32. Так же можно указать, собирать ли версию с отладочной информацией, или без с помощью ключей --mode=debug, --mode=release, или ключ --mode=all, чтобы компилировать обе версии.

cd dart
./tools/build.py --arch=ia32

если во время компиляции возникнут следующие ошибки:

CXX(host) out/Debug_ia32/obj.host/v8_base/third_party/v8/src/ia32/lithium-codegen-ia32.o
third_party/v8/src/ia32/lithium-codegen-ia32.cc: В функции-члене «void v8::internal::LCodeGen::DoLoadKeyedFastDoubleElement(v8::internal::LLoadKeyedFastDoubleElement*)»:
third_party/v8/src/ia32/lithium-codegen-ia32.cc:2235:12: ошибка: variable «elements» set but not used [-Werror=unused-but-set-variable]
third_party/v8/src/ia32/lithium-codegen-ia32.cc: В функции-члене «void v8::internal::LCodeGen::DoStoreKeyedFastDoubleElement(v8::internal::LStoreKeyedFastDoubleElement*)»:
third_party/v8/src/ia32/lithium-codegen-ia32.cc:3100:12: ошибка: variable «elements» set but not used [-Werror=unused-but-set-variable]
third_party/v8/src/ia32/lithium-codegen-ia32.cc:3101:12: ошибка: variable «key» set but not used [-Werror=unused-but-set-variable]

то необходимо в начале файла конфигурации ./tools/gyp/configurations.gypi добавить параметр '-Wno-unused-but-set-variable', и перезапустить сборку,

# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

{
  'variables': {
    'common_gcc_warning_flags': [
      '-Wall',
      '-Wextra', # Also known as -W.
      '-Wno-unused-parameter',
      '-Wno-unused-but-set-variable',
      # TODO(v8-team): Fix V8 build.
      #'-Wold-style-cast',
    ],

    # Default value.  This may be overridden in a containing project gyp.
    'target_arch%': 'ia32',
  }



В результате компиляции получатся каталоги:

  • ./out/Debug_ia32 - с версией dart с отладочной информацией
  • ./out/Release_ia32 - с версией dart без отладочной информацией