Skip to content

Кросс компиляция

serg3295 edited this page Jun 9, 2024 · 3 revisions

Кросс-компиляция на host машине

В данном расширении реализована функция кросс-компиляции и сборки образа LFS на host машине.

Необходимым условием работы этой функции является наличие файла .nodemcutools в корне рабочей директории (workspace), который содержит конфигурацию для работы соответствующих команд. (Обратите внимание на точку в начале имени файла!) Если этот файл отсутствует, то команды просто не появятся в выпадающем списке доступных для выполнения команд.

Файл конфигурации представляет собой обычный файл формата json в котором пользователь может менять некоторые параметры, подставляемые в командную строку кросс-компилятора.

Второе необходимое условие, это наличие кросс-компилятора luac.cross (для Windows - luac.cross.exe). Так как этот файл непосредственно связан с форматом прошивки, которая находится у вас в ESP, то пользователь должен следить за правильностью выбора соответствующей версии кросс-компилятора. В частности, учитывать архитектуру чипа и версию Lua.

Если у пользователя нет luac.cross, или не настроен (отсутствует) файл конфигурации, то команды, использующие luac.cross, просто не появятся в интерфейсе. Все остальные функции расширения будут доступны пользователю.

Пользователи Linux легко могут получить luac.cross на этапе сборки прошивки. У пользователей Windows такой возможности нет. Поэтому, я собрал в репозитории на github'e некоторые наиболее часто используемые версии исполняемых файлов luac.cross для Windows.
В названии файла содержится информация, под какую прошивку данный luac.cross собран.

Файл конфигурации .nodemcutools

Файл конфигурации может содержать несколько параметров, причём, обязательными являются только compilerExecutable и include. Если эти параметры не будут указаны, или указаны неверно, то расширение сообщит об ошибке, и команда не будет выполняться. При отсутствии в файле конфигурации остальных параметров, им будут автоматически присвоены значения по умолчанию, если они есть.

Правильность заполнения файла .nodemcutools автоматически проверяется программой, поэтому пользователю будут выдаваться подсказки при ручном заполнении этого файла. При наличии критических ошибок на панели Problems VS Code появится соответствующее уведомление.

Допустимые параметры следующие:

  • "compilerExecutable" - Обязательный. Указание абсолютного пути к исполняемому файлу кросс-компилятора плюс полное имя самого файла;
  • "include" - Обязательный. Шаблоны для файлов, подлежащих сборке в LFS. Каждая строка в массиве представляет собой шаблон. Пути могут указываться как в относительном формате (относительно корневого директория workspace), так и в абсолютном. Допускается задавать явное имя файла, а также, при указании абсолютного пути, файлы вне рабочего пространства открытой директории. Последнее дает возможность собирать библиотеки без копирования их в рабочий проект каждый раз;
  • "outDir" - Опциональный. Имя каталога в который будет осуществляться вывод всех файлов, производимых кросс-компилятором. Должен находится в корневой папке workspace. Если заданный каталог не существует, то программа создаст его. Значение по умолчанию "./out";
  • "outFile" - Опциональный. Имя файла образа LFS. Значение по умолчанию "lfs.img";
  • "resourceDir" - Опциональный. Имя папки, содержащей файлы, которые будут рекурсивно собраны в файл "resource.lua". Результирующий файл "resource.lua" будет помещён в каталог outDir и автоматически включен в сборку образа LFS. Имена папок, вложенных в папку resourseDir будут добавлены в виде префикса к имени файла.

Описание resourceDir

Эта опция предназначена для использования совместно с File LFS module.

Пример. Если папка с ресурсами выглядит следующим образом:

📂 resource/
    ├── 📂 http/
    │    ├── 📜 index.html
    │    └── 📜 favicon.ico
    └── 📂 css/
         ├── 📜 main.css

то имена файлов в 'resource.lua' будут следующими:

  • http/index.html
  • http/favicon.ico
  • css/main.css

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

Примеры файла конфигурации

// Для Linux
{
  "compilerExecutable": "/opt/lua/esp8266/5.3/luac.cross",
  "include": [
    "lfs/*.lua",
    "/home/serg/Projects/lua/lib8266/ntp/ntp.lua"
  ],
  "outDir": "./tmp",
  "outFile": "luac.out",
  "resourceDir": "./resource"
}

// Для Windows
{
  "compilerExecutable": "c:\\temp\\luac.cross.exe",
  "include": [
    "f.lua"
  ]
}

Минимальный файл конфигурации. Для всех остальных параметров будут подставлены значения по умолчанию.

{
   "compilerExecutable": "/opt/lua/esp8266/5.3/luac.cros",
     "include": [
    "<folder's name>/*.lua"
    ]
}
// или
{
   "compilerExecutable": "c:\\temp\\luac.cross.exe"
     "include": [
    "<folder's name>\\*.lua"
    ]
}