Условная компиляция Automake для ARM A-32?

У меня есть исходный файл, который нужно скомпилировать для ARM A-32. A-32 включает ARMv4 и ARMv7 (но не Aarch32 или Aarch64). В нашем make-файле GNU есть:

IS_ARM32 := $(shell echo "$(HOSTX)" | $(GREP) -i -c -E 'arm|armhf|arm7l|eabihf')
...

ifeq ($(IS_ARM32),1)
AES_ARCH = -march=armv7-a -marm
SRCS += aes-armv4.S
endif
...

ifeq ($(IS_ARM32),1)
aes-armv4.o : aes-armv4.S
    $(CC) $(strip $(CXXFLAGS) $(AES_ARCH) -mfloat-abi=$(FP_ABI) -c) $<
endif

Согласно условной компиляции с использованием Руководство Automake Conditionals:

Часто более простым способом условной компиляции исходных файлов является использование условных операторов Automake. Например, вы можете использовать эту конструкцию Makefile.am для создания того же примера приветствия:

bin_PROGRAMS = hello
if LINUX
hello_SOURCES = hello-linux.c hello-common.c
else
hello_SOURCES = hello-generic.c hello-common.c
endif

В этом случае configure.ac должен настроить условное выражение LINUX с помощью AM_CONDITIONAL (см. Условные выражения).

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

Какие условия использует Automake для ARM A-32?

Или как условно компилировать под ARM A-32?


person jww    schedule 11.07.2018    source источник


Ответы (1)


После ссылки на условные выражения я не вижу списка условных операторов, таких как LINUX, в примере руководства. В нем также отсутствует обсуждение условной компиляции для таких платформ, как ARM и PowerPC.

Похоже, вы пропустили этот текст из цитируемого отрывка из руководства:

В этом случае configure.ac должен настроить условное выражение LINUX с помощью AM_CONDITIONAL

AM_CONDITIONAL - это макрос Autoconf, с помощью которого вы определяете предикат для использования в условном выражении Automake. Предварительно заданных предикатов нет.

Что Automake использует для ARM A-32?

Или как условно компилировать под ARM A-32?

Учитывая, что ваш существующий подход основан на

IS_ARM32 := $(shell echo "$(HOSTX)" | $(GREP) -i -c -E 'arm|armhf|arm7l|eabihf')

вы можете сделать это в configure.ac:

AM_CONDITIONAL([ARM32], [echo "$HOSTX" | $GREP -i -c -E 'arm|armhf|arm7l|eabihf'])

Это предполагает, что HOSTX и GREP являются выходными переменными autoconf, значения которых уже установлены. Если это не ваш случай, то я уверен, что он, по крайней мере, дает вам модель для начала.

С предикатом ARM32, определенным в вашем configure.ac, вы можете затем использовать его в своих Makefile.am файлах так же, как в примере из руководства:

if ARM32
hello_SOURCES = hello-arm32.c hello-common.c
else
hello_SOURCES = hello-generic.c hello-common.c
endif
person John Bollinger    schedule 11.07.2018