F.3. Компиляция с использованием make

На верх  Назад  Вперёд

При компиляции с make необходимо иметь описанную выше структуру каталогов. Компиляция компилятора достигается с помощью цели cycle.

При нормальных обстоятельствах перекомпиляция компилятора сводится к следующим инструкциям (предполагаем, что вы начинаете с каталога /pp/src):

cd compiler

make cycle

Это будет работать только в том случае, если makefile правильно настроен и если имеются необходимые инструменты в PATH. Какие инструменты должны быть установлены, можно найти в приложении E.1. Введение.

Приведённые выше инструкции будут делать следующее:

1.Используя текущий компилятор, RTL компилируется в правильный каталог, который определяется операционной системой, например, на LINUX RTL компилируется в каталог rtl/linux.

2.Компилятор компилируется, используя вновь откомпилированную RTL. Если эта операция прошла успешно, то вновь скомпилированный исполняемый файл компилятора копируется во временный исполняемый файл.

3.Используя временный исполняемый файл, созданный на предыдущем шаге, RTL перекомпилируется.

4.Используя временный исполняемый файл и вновь скомпилированную RTL, созданную на предыдущем шаге, компилятор снова компилируется.

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

Компиляция для другой целевой ОС: Если выполняется компиляция компилятора для другой целевой ОС, то необходимо определить переменную OS_TARGET в makefile. Она может быть установлена в следующие значения: win32, go32v2, os2 и linux. Например, выбор кросс-компиляции для целевой системы go32v2 из win32:

cd compiler

make cycle OS_TARGET=go32v2

это будет компилировать go32v2 RTL и go32v2 компилятор.

При компиляции нового компилятора компилятор должен быть скомпилирован с использованием существующей скомпилированной RTL, все цели должны использоваться, и другой каталог RTL, отличающийся от каталога по умолчанию (../rtl/$(OS_TARGET)) должен быть указан.

Например, если предположить что скомпилированные модули RTL находятся в /pp/rtl/units/i386-linux, набрав

cd compiler

make clean

make all UNITDIR=/pp/rtl/units/i386-linux

следует использовать RTL из каталога /pp/rtl/units/i386-linux.

Данный пример компилирует компилятор, используя модули RTL в /pp/rtl/units/i386-linux. После того, как это сделано, можно использовать 'make cycle', запустив этот компилятор:

make cycle PP=./ppc386

это будет make cycle из примера выше, но запустит компилятор, который был сгенерирован с помощью инструкции make all.

В любом случае многие параметры могут быть переданы в make, чтобы повлиять на процесс компиляции. В общем, makefiles добавляют любые необходимые опции в командную строку, чтобы RTL и компилятор могли быть скомпилированы. Дополнительные опции (например, опции оптимизации) можно указать, передав их в OPT.