Подтвердить что ты не робот

Как можно предоставить пользовательские флаги компилятора/компоновщика для OpenSSL?

Я пытаюсь создать OpenSSL с -Wa, - noexecstack, но не могу найти нигде в своей командной строке config, чтобы предоставить этот флаг. Я пытался установить CFLAGS, но, похоже, это игнорирует и просто использует свои собственные.

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

Есть ли способ передать пользовательские флаги в процесс сборки OpenSSL?

4b9b3361

Ответ 1

config script игнорирует CFLAGS, но не CC. Таким образом, вы можете указать свой компилятор и одновременно указать флаги:

export CC="gcc -Wall -DHELLO_WORLD"; ./config

В качестве альтернативы, поскольку config автоматически обнаруживает вашу платформу, а затем запускает Configure с предустановленными настройками компилятора, вы можете добавить флаги компилятора в конфигурацию вашей платформы. Например, для моего mac я вижу эту строку при первом запуске config:

Operating system: i386-apple-darwinDarwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386
Configuring for darwin-i386-cc

Итак, если я открою Configure, я могу выполнить поиск darwin-i386-cc и добавить флаги в пресеты.

Если вы не используете предварительно настроенную конфигурацию, вы просто передаете флаги непосредственно в Configure в командной строке и будете использовать их.

Ответ 2

Позже на вечеринку, но это, кажется, правильный способ сделать это.

Из справки config script:

$ ./config -h
Usage: config [options]
 -d Add a debug- prefix to machine choice.
 -t Test mode, do not run the Configure perl script.
 -h This help.

Any other text will be passed to the Configure perl script.
See INSTALL for instructions.

Итак, config script перенаправляет "неожиданные" параметры в Configure script. Ну, давайте посмотрим, что скажет об этом Configure script:

$ ./Configure --help
Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]

См. часть [:flags] в конце этой длинной строки? Внутри файла есть комментарий:

# -<xxx> +<xxx> compiler options are passed through

Это не так очевидно, поскольку он не соответствует хорошо известным стандартам, но ответ: просто добавьте опции в конец командной строки config.

Как долго прошло с тех пор, как вы разместили вопрос, я должен добавить:

  • он может не работать для версии OpenSSL, с которой вы работаете (мой - OpenSSL 1.0);
  • Я был вынужден опубликовать этот ответ, поскольку ни один из предыдущих ответов не решил мою проблему, и мне потребовалось немного времени, чтобы выяснить это решение.

Ответ 3

Поздно к партии, но другой способ сделать это - сделать автоматическое редактирование созданного файла makefile. Например, чтобы добавить -DPURIFY к флагам, сначала выполните обычную настройку, а затем:

perl -i~ -plwe 's!^(CFLAG=.*$)!$1 -DPURIFY!' Makefile

Не самое элегантное решение, но оно работает для меня.