Как переопределить значение переменной для цели/шаблона GN?

Я добавил цель shared_library GN в свою сборку Chromium. Он имеет расширение в соответствии с определенным в toolchain.gnirules:

# Extension for shared library files (including leading dot).
if (is_mac || is_ios) {
  shlib_extension = ".dylib"
} else if (is_android && is_component_build) {
  # By appending .cr, we prevent name collisions with libraries already
  # loaded by the Android zygote.
  shlib_extension = ".cr.so"
} else if (is_posix) {
  shlib_extension = ".so"
} else if (is_win) {
  shlib_extension = ".dll"
} else {
  assert(false, "Platform not supported")
}

# Prefix for shared library files.
if (is_posix) {
  shlib_prefix = "lib"
} else {
  shlib_prefix = ""
}

Я хочу изменить расширение, поэтому мне нужно переопределить переменную shlib_extension, но только для моей цели shared_library. Если я изменю toolchain.gni, это повлияет на все цели, которые используют переменную shlib_extension.

Я бы не хотел использовать атрибут output_name shared_library, поскольку я вижу, что использование out_name="lib${target_name}.cr" делает следующее v8.ninja:

...
output_extension = .so
output_dir = .
solibs = ./libv8_libbase.cr.so

но если наличие shlib_ext=".cr.so" делает следующее v8.ninja:

...
output_extension = .cr.so
output_dir = .
solibs = ./libicui18n.cr.so ./libicuuc.cr.so ./libv8_libbase.cr.so

(это означает, что output_name изменяет имя файла, а не расширение)

Как логическое продолжение вопроса, возможно ли переопределить переменные типа is_debug или is_component_build не в файле .gn, а только для цели/шаблона?

Допустим, я хочу построить V8 так же, как is_component_build=true (и сделать это в v8.gni в шаблонах), но остальной код принимает значение переменной по умолчанию или заданное пользователем.


person 4ntoine    schedule 28.02.2018    source источник


Ответы (1)


В моем случае добавление output_extension у меня работало:

shared_library(target_name) {
  output_extension = "cr.so"
  ...
}

Не уверен в общем случае переопределения переменных.

person 4ntoine    schedule 02.03.2018