Radix cross Linux Build System

Cross-platform build system is designed to build distributions of different operating systems for a set of target devices

39 Commits   2 Branches   2 Tags
     5         kx 
     5         kx Фундаментальный принцип работы системы сборки
     5         kx =============================================
     5         kx 
     5         kx Предположим, что нам необходимо собрать программу или отчуждаемый пакет для
     5         kx работы на трех устройствах с именами ci20, bt01 и dm64. Первые два устройства
     5         kx ci20 и bt01 основаны на архитектуре MIPS, третье устройство dm64 построенно
     5         kx на базе процессора ARM. Toolchain-ы для сборки программ, для простоты, назовем
     5         kx mips и arm, соответственно.
     5         kx 
     5         kx Сценарий сборки исходной программы одинаков для всех трех устройств и написан
     5         kx на языке GNU Make.
     5         kx 
     5         kx Если представить все комбинации вызовов команды Make, необходимые для сборки
     5         kx программы на наши устройства, получим:
     5         kx 
     5         kx  $ TOOLCHAIN=mips HARDWARE=ci20 make
     5         kx  $ TOOLCHAIN=mips HARDWARE=bt01 make
     5         kx  $ TOOLCHAIN=arm  HARDWARE=dm64 make
     5         kx 
     5         kx или, при передаче имен устройств и Toolchain-ов в качестве аргументов:
     5         kx 
     5         kx  $ make TOOLCHAIN=mips HARDWARE=ci20
     5         kx  $ make TOOLCHAIN=mips HARDWARE=bt01
     5         kx  $ make TOOLCHAIN=arm  HARDWARE=dm64
     5         kx 
     5         kx Таким образом, система сборки должна принимать пары TOOLCHAIN-HARDWARE,
     5         kx которые определяют какой именно Toolchain необходимо использовать для того
     5         kx или иного устройства.
     5         kx 
     5         kx Рассмотрим теперь, как, на уровне системы сборки, организовать последовательность
     5         kx вызовов утилиты Make для нашего сценария таким образом, чтобы пользователь мог
     5         kx осуществить данные действия с помощью лишь одного вызова:
     5         kx 
     5         kx  $ make
     5         kx 
     5         kx без задания дополнительных аргументов, отвечающих за выбор целевого устройства
     5         kx и связанного с ним Toolchain-а.
     5         kx 
     5         kx Если включить в начало нашего сценария список допустимых целевых устройств,
     5         kx например, следующим образом:
     5         kx 
     5         kx COMPONENT_TARGETS  = $(HARDWARE_CI20)
     5         kx COMPONENT_TARGETS += $(HARDWARE_BT01)
     5         kx COMPONENT_TARGETS += $(HARDWARE_DM64)
     5         kx 
     5         kx то система сборки сможет автоматически построить список возможных, для данного
     5         kx сценария, комбинаций TOOLCHAIN-HARDWARE, который будет выглядеть, например,
     5         kx следующим образом:
     5         kx 
     5         kx   targets = target_mips_ci20 target_mips_bt01 target_arm_dm64
     5         kx 
     5         kx Имея такой список, система сборки может восстановить аргументы, которые
     5         kx необходимо передавать при каждом вызове утилиты Make, для нашего сценария.
     5         kx Сделать это нетрудно, на языке GNU Make эти действия можно описать так:
     5         kx 
     5         kx target_%: TOOLCHAIN = $(shell echo $(word 2, $(subst _, , $@)))
     5         kx target_%: HARDWARE = $(shell echo $(word 3, $(subst _, , $@)))
     5         kx target_%:
     5         kx 	$(MAKE) TOOLCHAIN=$(TOOLCHAIN) HARDWARE=$(HARDWARE)
     5         kx 
     5         kx 
     5         kx Таким образом, при вызове команды Make без аргументов, переменные TOOLCHAIN и
     5         kx HARDWARE будут не определены и, в этом случае, система сборки займется созданием
     5         kx списка targets из числа допустимых комбинаций. Когда же список будет составлен,
     5         kx система сборки сможет осуществить вызов
     5         kx 
     5         kx 	$(MAKE) TOOLCHAIN=$(TOOLCHAIN) HARDWARE=$(HARDWARE)
     5         kx 
     5         kx с действительными аргументами.
     5         kx 
     5         kx Когда же, при очередном вызове, система убедится в том, что переменные
     5         kx TOOLCHAIN и HARDWARE определены, управление будет передано нашему сценарию
     5         kx без дополнительных вычислений.
     5         kx 
     5         kx Описанный здесь механизм, напрямую вытекает из возможностей утилиты Make.
     5         kx 
     5         kx 
     5         kx References
     5         kx ----------
     5         kx http://www.gnu.org/software/make/manual/
     5         kx http://radix.pro/build-system/
     5         kx