Содержание

Предыдущий раздел

5.3. Ступени сборки пакета

Следующий раздел

5.5. Управляющие переменные

5.4. Структура пакета

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

5.4.1. Схема пакета

<параметры пакета>

include $(DEFS)


<зависимости от других пакетов>
<команды правил выполнения целей>


include $(RULES)

Части двигателя, включаемые директивой include $(DEFS), содержат доопределения параметров двигателя и умолчания. Некоторые из этих определений может использовать сам пакет.

Части двигателя, включаемые директивой include $(RULES), содержат цели и правила их выполнения.

5.4.2. Пример простого пакета sercd

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
PKG_VERSION   = 3.0.0
PKG_SITES     = $(SF_NET_SITES)
PKG_SITE_PATH = $(PKG_BASE)
PKG_REMOTE_FILE_SUFFICES = .tar.gz

include $(DEFS)


configure : $(ST_DIR)/toolchain.install

define CONFIGURE_CMD
  cd $(PKG_BLD_DIR) && ./configure -C $(LOG)   \
       --build=$(BUILD) --host=$(TARGET)       \
       --exec-prefix=$(ROOT_DIR)               \
            --prefix=$(INST_DIR)               \
       --with-gnu-ld                           \
       $(STD_VARS)
endef


    BUILD_CMD =     $(BUILD_CMD_DEFAULT)
    CLEAN_CMD =     $(CLEAN_CMD_DEFAULT)
DISTCLEAN_CMD = $(DISTCLEAN_CMD_DEFAULT)


  INSTALL_CMD =   $(INSTALL_CMD_DEFAULT)


include $(RULES)

5.4.3. Стиль пакета

Пакет неявно разделён на секции. Все секции разделяются двумя пустыми строками. Внутри секции разделитель - одна пустая строка. Для особо сложных пакетов, число пустых строк-разделителей можно увеличивать.

За исключением первой секци определений и последней секции правил, остальные являются параметрами целей цепи сборки.

5.4.4. Секции пакета

Секция определений

Содержит директиву “include $(DEFS)” и определения параметров над ней.

Пример:

1
2
3
4
5
6
PKG_VERSION   = 3.0.0
PKG_SITES     = $(SF_NET_SITES)
PKG_SITE_PATH = $(PKG_BASE)
PKG_REMOTE_FILE_SUFFICES = .tar.gz

include $(DEFS)
Секция извлечения исходных текстов из архива

Содержит зависимости и управляющие переменные цели extract. Необязательно.

Сложный пример:

extract : $(call bstamp_f,extract,buildroot)

define POST_EXTRACT_CMD
  $(MKDIR_P) -v $(PKG_BLD_DIR) $(LOG)
  cp -v $(_SRC_DIR)/buildroot/toolchain/sstrip/sstrip.c \
                $(PKG_BLD_DIR) $(LOG)
endef
Секция наложения заплат

Содержит зависимости и управляющие переменные цели patch. Необязательно.

Простой пример:

PKG_PATCH_FILES = $(PKG_PKG_DIR)/*.patch

Сложный пример:

PKG_PATCH_FILES = $(PKG_PKG_DIR)/*.patch

patch : $(call bstamp_f,install,sed)

define PATCH_CMD
  echo "$(i2)Integrate add-ons ..."
  cd $(PKG_SRC_DIR) && \
  for a in $(addon_dirs); do \
      $(LNTREE) $$a `basename $$a`; done

  # -lgcc_eh is absent, linking failed
  echo "$(i2)Cutting off -lgcc_eh ..."
  $(RELINK)                    $(PKG_SRC_DIR)/Makeconfig $(LOG)
  $(SED) -i -e "s,-lgcc_eh,,g" $(PKG_SRC_DIR)/Makeconfig $(LOG)
endef
Секция “pre-configure”

Содержит зависимости и управляющие переменные цели pre-configure. Необязательно.

Пример:

AC_VER = 2.65
include $(COMMON_PKG_DIR)/autoconf.mk

AM_VER = 1.11
include $(COMMON_PKG_DIR)/automake.mk

pre-configure : $(call bstamp_f,install,libtool) # libtoolize

define PRE_CONFIGURE_CMD
 cd $(PKG_BLD_SUB_DIR) && $(AC_VARS) $(AM_VARS) $(ACLOCAL)         $(LOG)
 cd $(PKG_BLD_SUB_DIR) && $(AC_VARS) $(AM_VARS) libtoolize --force $(LOG)
#cd $(PKG_BLD_SUB_DIR) && $(AC_VARS) $(AM_VARS) $(AUTOHEADER)      $(LOG)
 cd $(PKG_BLD_SUB_DIR) && $(AC_VARS) $(AM_VARS) $(AUTOMAKE) -a     $(LOG)
 cd $(PKG_BLD_SUB_DIR) && $(AC_VARS) $(AM_VARS) $(AUTOCONF)        $(LOG)
endef
Секция конфигурации

Содержит зависимости и управляющие переменные цели configure. Необязательно.

Пример:

configure : $(ST_DIR)/toolchain.install

define CONFIGURE_CMD
  cd $(PKG_BLD_DIR) && ./configure -C $(LOG)  \
      --build=$(BUILD) --host=$(TARGET)       \
      --exec-prefix=$(ROOT_DIR)               \
           --prefix=$(INST_DIR)               \
      --with-gnu-ld                           \
      $(STD_VARS)
endef
Секция сборки

Содержит зависимости и управляющие переменные цели build.

Простой пример:

    BUILD_CMD_TARGET = sredird
    BUILD_CMD =     $(BUILD_CMD_DEFAULT)
    CLEAN_CMD =     $(CLEAN_CMD_DEFAULT)
DISTCLEAN_CMD = $(DISTCLEAN_CMD_DEFAULT)
Секция установки

Содержит зависимости и управляющие переменные цели install.

Простой пример:

INSTALL_CMD = $(INSTALL_CMD_DEFAULT)
Секция правил

Содержит директиву “include $(RULES)”

Пример:

include $(RULES)