Собираем portable Eclipse-based-IDE для ARM

Как собрать C/C++ Eclipse IDE под Windows для сочинения и отладки микроконтроллерных программ, написано уже немало статей. Я же хочу показать, как сделать portable-версию IDE.


Сама среда Eclipse вполне себе перемещаема и не требует инсталляции. Абсолютным адресом обычно «страдают» инсталлируемые компиляторы-дебаггеры и разнообразные утилиты.

Кратко по порядку, что потребуется:

1. Папка Eclipse в корне диска C
Название и путь расположения может быть и другим. Просто так коротко и понятно.

2. Eclipse IDE for C/C++ Developers
Качать, как обычно, отсюда.

Имеется две версии: Windows 32 Bit и Windows 64 Bit. Какую лучше взять? Если IDE будет использоваться только на 64-разрядной Windows, то качаем версию 64. Если же нужна универсальная среда, способная работать и на x86, и на x64-версии Windows, нужно использовать вариант 32 Bit.
Существенной разницы в быстродействии двух версий не замечено.

3. Виртуальная машина java
Eclipse написана на java, и поэтому для работы требуется Java Virtual Machine (JVM). Виртуальная машина должна иметь ту же разрядность, что и версия Eclipse. Если ранее не была установлена, качаем и устанавливаем. Требуется версия не ниже 1.7.

Все необходимые файлы JVM обычно расположены по адресу
C:\Program Files\Java\ либо C:\Program Files (x86)\Java\.

Копируем все файлы из вышеуказанной папки в Eclipse\java\. Теперь у нас есть копия JVM, которая будет использоваться только для работы с Eclipse.

4. Командный файл для задания начальных параметров и запуска Eclipse
Создаём eclipse.bat и размещаем его в корне папки Eclipse\. В этом файле будем указывать все пути к используемым компонентам нашей IDE.

Для пробного запуска поместим в eclipse.bat следующее:
set DEVELOP_ROOT=%~dp0
set JRE_BIN=%DEVELOP_ROOT%\java\jre1.8.0_45_x86\bin
"%DEVELOP_ROOT%\eclipse.exe" -vm "%JRE_BIN%"

Здесь первой строкой определяем переменную DEVELOP_ROOT, которая хранит путь расположения (запуска) bat-файла. Собственно, этот параметр и обеспечивает переносимость IDE. Второй строкой задаём путь расположения JVM. Третьей строкой запускаем загрузчик Eclipse. Путь к JVM передаётся в eclipse-загрузчик посредством аргумента -vm.

Есть ещё полезные аргументы:

-data <workspacePath>
— путь к рабочей Workspace-папке. Она будет использоваться по умолчанию каждый раз при запуске Eclipse.

-vmargs <args>
аргументы, передаваемые в JVM. Здесь обычно указывают начальный -Xms и максимальный -Xmx размер памяти, отводимый под кучу. Если эти аргументы не указаны, то дефолтное значение берётся из файла конфигурации eclipse.ini.

Итоговый eclipse.bat:
set DEVELOP_ROOT=%~dp0
set JRE_BIN=%DEVELOP_ROOT%\java\jre1.8.0_45\bin
set WORKSPACE_ROOT=%DEVELOP_ROOT%\workspace
"%DEVELOP_ROOT%\eclipse.exe" -vm "%JRE_BIN%" -data "%WORKSPACE_ROOT%" -vmargs -Xms512m -Xmx512m

Выполняем батник. Убеждаемся, что Эклипса успешно загружается и начинает работать.

5. Компилятор GNU Tools for ARM Embedded Processors
Качаем *.zip файл. Не надо никаких инсталляторов! Распаковать в папку \Eclipse\compilers\ (или в любую другую внутри Eclipse\).

6. Build tools (утилита make)
Рекомендую взять свежую версию tools из проекта GNU ARM Eclipse Plug-ins. Эта версия избавлена от проблемы 2000h (ограничение длины параметров командной строки). Там лежит инсталлятор, но его тоже совсем не обязательно выполнять. Достаточно просто распаковать (7-zip`ом например) и скопировать файлы из папки bin в Eclipse\compilers\make_utils\.

Чтобы Eclipse и его плагины могли работать с нашими утилитами, необходимо указать путь к ним при помощи переменной окружения PATH. Фишка в том, что переменная PATH, заданная в bat-файле, замещает одноимённую глобальную переменную, и позволяет указать пути к нужным нам локальным файлам. Новое значение PATH актуально только в пределах работы нашего eclipse.bat (т.е. для тех программ, которые оттуда запускаются).

Для запуска GCC-компилятора не нужен вот этот глобальный хлам:
C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Tcl\bin;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x64;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\TortoiseHg\;C:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Sourcery_CodeBench_for_IA32_Windows\bin;C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Tcl\bin;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x64;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\TortoiseHg\;C:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Sourcery_CodeBench_for_IA32_Windows\bin;
и руками сюда вписывать абсолютные пути к компилятору не будем. А просто в бате укажем:
set ARM_COMPILER_ROOT=%DEVELOP_ROOT%\compilers\gcc-arm-none-eabi-4_9-2015q1
set MAKE_ROOT=%DEVELOP_ROOT%\compilers\make_tools
PATH %ARM_COMPILER_ROOT%;%MAKE_ROOT%

Отлично. Доустанавливаем необходимые плагины с утилитами и прописываем по мере необходимости относительные пути их расположения.

7. GNU ARM Eclipse plug-ins
Скачать архив, или установить напрямую через Eclipse.

8. Eclipse Embedded Systems Register View
Плагин для просмотра содержимого регистров микроконтроллера. Удобно во время отдадки. Ссылка для установки в Eclipse. Последняя версия в распакованном виде занимает всего-то 940 Мб…

9. Дрова и утилиты для отладчика JLink
Устанавливаем. Копируем файлы из C:\Program Files (x86)\SEGGER\JLinkARM_Vxxx\ в Eclipse\utils\jlink\vx.xxx. И… деинсталлируем. Всё что нужно для работы, скопировано. В том числе дрова для USB-отладчика.

Добавить путь:
set JLINK_PATH=%DEVELOP_ROOT%\utils\JLink\vx.xxx

Теперь для запуска jlink-gdb-сервера в Debug Configuration достаточно будет указать
Можно пропустить этот пункт, если jlink не используется.
10. OpenOCD
Сборка для Windows. Скачать, распаковать в папку Eclipse\utils\OpenOCD.

Путь для OpenOCD прописывать не требуется. Запуск сервера можно осуществить при помощи например такой конфигурации:


11. Добавить другие плагины и утилиты по вкусу


12. Скрыть DOS-окно
При запуске eclipse.bat отображается dos-окно, которое потом висит на панели задач до момента закрытия Эклипсы. Чтобы его скрыть, создайте файл eclipse.vbs в Eclipse\ с таким содержимым (updated):

Set WshShell = CreateObject("WScript.Shell")
scriptdir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
batFilePath = """" + scriptdir + "\Eclipse.bat" + """"
RetCode = WshShell.Run(batFilePath, 0, False)

Теперь при запуске этого скрипта будет запущен eclipse.bat, который в свою очередь запустит Eclipse без отображения ненужных dos-окошек.
Много кавычек требуется, чтобы «переварить» путь, содержащий пробелы.

Ещё один метод спрятать dos-окно без использования vbs — вызвать Эклипсу при помощи команды start:
start "" "%DEVELOP_ROOT%\eclipse.exe" -vm "%JRE_BIN%" -data "%WORKSPACE_ROOT%" -vmargs -Xms512m -Xmx512m
Однако чёрное окошко перед скрытием всё же успевает отобразиться на 0,1-0,5 сек. Неэстетично.

Вариант vbs стартует чисто и без артефактов. Поэтому рекомендую именно его.



Заключение
В итоге получили IDE, которая содержит в одной папке все необходимые плагины/компиляторы/утилиты, и способную работать при любом пути расположения корневой папки (естественно, со стандартными ограничениями на длину пути к файлам). Полезности:

  • легко сделать бэкап: сжать в архив целиком папку Eclipse и положить на полку до худших времён; впоследствии восстановление убитой IDE потребует пару минут;
  • легко продублировать (т.е. просто скопировать) IDE на любой другой рабочий компьютер/ноут/принести домой/подарить другу; в отличие от инсталлятора, такая «установка» не пачкает реестр, ничего не прячет в Windows\ и Program Files\ и не распихивает конфигурационные файлы по разным системным и пользовательским папкам;
  • легко обкатывать новые версии компиляторов/отладчиков; достаточно в bat-файле указать путь к новой и закомментарить путь к старой версии, затем перезапустить Eclipse;
  • переносимость позволяет запустить IDE с флэшки; имеем «карманную» отладочную среду;
  • можно jtag/swd-отлаживать одновременно две (и более) программы на одном компьютере, сделав отдельную копию и запустив ещё один экземпляр Eclipse.


p.s.
Работоспособность ST-LINK utility не проверял, но думаю, проблем быть не должно. Нужно проверить.

p.p.s.
Если кто ещё не перешёл на Атмел-Студию, то добавить:

Компилятор WinAVR
Установить; скопировать в Eclipse\compilers\WinAVR-20100110; деинсталлировать.

The AVR Eclipse Plugin
Установить плагин.

С компилятором и плагином для AVR проблема: переносимости не получается. AVR-плагин ищет компилятор либо через реестр, либо по абсолютному пути, указанному в настройках.

Методы решения:

— принудительно записать адрес компилятора в реестр. Либо вручную, выполнив xxx.reg файл с примерно таким содержимым:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\WinAVR]
"20100110"="C:\\Eclipse\\compilers\\WinAVR-20100110"
Либо автоматически при каждом запуске Эклипсы, указав в бате
reg ADD "HKLM\SOFTWARE\WinAVR" /v 20100110 /f /reg:32 /d "%AVR_COMPILER_ROOT%"
— вручную указать путь на странице настроек «Windows\Preferences\AVR\Paths» среды Eclipse.

p.p.p.s подправил статью с учётом комментариев.

IDE, собранную по описанной методике и готовую к применению, можно скачать здесь. В первую очередь требуются следующие архивы:

eclipse.7z (289 Мб) — собственно, Eclipse IDE + plugins + JVM;
compilers.7z (52 Мб) — AVR/ARM компиляторы + make;
utils.7z (62 Мб) — несколько вспомогательных утилит (в т.ч. OpenOCD, JLink).
Распаковать, запустить Eclipse.vbs.
Файлы в топике: files.zip

Комментарии (26)

RSS свернуть / развернуть
set DEVELOP_ROOT=%CD%
Лучше %~dp0. Только стоит учесть, что оно уже включает в себя бэкслеш в конце.
Для записи адреса компилятора в реестр необходимо выполнить xxx.reg файл с таким содержимым:
В принципе, это тоже можно внести в батник (WinXP+):
reg ADD HKLM\SOFTWARE\WinAVR /v 20100110 /f /reg:32 /d "%DEVELOP_ROOT%compilers\WinAVR"
0
  • avatar
  • Vga
  • 02 июня 2015, 06:04
1. А чем лучше? Есть какие преимущества?
2. Действительно, это работает. Проблема решена.
0
%CD% — текущая директория и она может быть какой угодно. А %~dp0 — это папка с батником (%0 — нулевой аргумент ака имя батника, ~dp — выделить из аргумента диск и путь).
0
Благодарю, %~dp0 действительно работает надёжнее.
0
Проблема решена.
На самом деле, не совсем. Если у юзера уже стоит WinAVR, то ты испортишь его установку. Лучше писать из батника в настройки плагина.
0
Для того чтобы скрыть консольное окно достаточно в bat-нике запускать eclipse через start:
start "%DEVELOP_ROOT%\eclipse.exe" -vm "%JRE_BIN%"
0
ок, это упрощает решение. Только нужно так:
0
start "" "%DEVELOP_ROOT%\eclipse.exe" -vm "%JRE_BIN%"
поскольку первый параметр в кавычках воспринимается как заголовок
0
А Вы можете выложить собранную IDE на файлообменник?
0
Можем. Сделаем.
0
Выложи еще «полусобранную» — архив того, что нужно «поставить, скопировать xxx, снести».
0
Да ну что, скачать что ли сложно?
0
Распаковывать инсталлеры лень. А ставить на пять минут не хочется — иногда бываают… некоторые накладки.
0
Готово.
0
Какая здоровая. Перепакуй в 7z/LZMA2/Ultra/64MB, плиз.
0
Готово.
7-Zip достойный архиватор. Но я им перестал пользоваться, когда обнаружил, что он пропускает файлы, имя которых начинается с точки и не содержит расширения (таковы, например, файлы конфигурации рабочего проекта Eclipse).
0
У меня все ОК. Возможно, ты что-то неправильно делал (например, файлы без расширения могут не попадать под виндовый шаблон «все файлы» — *.*). Или в скиплист такие файлы внесены.
0
Версия 7-Zip? (проверил 9.20, 9.28 и 15.03)
Такие файлы не попадают в архив, если выбран формат 7z. Для архива типа zip (создаваемого архиватором 7-Zip) всё ок.
0
9.20, пользуюсь им через расширение проводника. Формат у меня всегда 7z.
0
Спасибо тебе добрый человек!
0
Простите, что немного не в тему, но может вы знаете как можно выпилить Mylyn?
0
Нет, не знаю.
0
Про пункт «6. Build tools (утилита make)» даже не догадывался. Поставил по списку, который для Linux (где make уже есть сразу), потом под винду все тоже самое. Светодиод мигает, проект компилится. А тут на работе попробовал без прав админа поставить.
Не мог понять: почему дома работает, а на работе просит какой-то make? Видимо, берет make.exe от «WinAVR-20100110», так как других make на диске вообще не нашел.

Так вот вопрос теперь такой: а все ли make одинаковые? И чего теперь делать, чтобы был свой make для ARM на Eclipse и AVRStudio с WinAVR не поломать? В глобальных настройках Eclipse принудительно прописать путь до своего make (настройка батника пока непрозрачна для меня)?
0
Мейков несколько разных, да, но со всеми gcc идет один и тот же GNU Make. Проблемы возникают только если в PATH валяется мейк другого производителя — скажем, Borland (идет вместе с Delphi, BCC, C++ Builder).

Если просит make — обычно это означает, что программы make.exe нет по указанным в PATH путям (либо в месте, указанном в настройках IDE).
0
Всем привет. Вопрос: собираю проект на STM32L031… Эклипс и плагины не знают такой контроллер. Что делать? Как ему объяснить что есть что и где лежит?
0
Что именно не получается? На проект с исходниками можно взглянуть? Может чем и помогу.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.