Genel bakış
Derleyiciyi doğru seçeneklerle çağırmak için Bazel'in, derleyici dahili öğeleri hakkında dizinleri ve önemli işaretleri dahil etme gibi bazı bilgilere ihtiyacı vardır. Başka bir deyişle, Bazel'in çalışmalarını anlamak için derleyicinin basitleştirilmiş bir modeline ihtiyacı vardır.
Bazel'ın aşağıdakileri bilmesi gerekir:
- Derleyicinin thinLTO, modül, dinamik bağlantı veya PIC (konumdan bağımsız kod) destekleyip desteklemediği.
- gcc, ld, ar, objcopy gibi gerekli araçlara giden yollar.
- Yerleşik sistemde dizinler bulunur. Bazel, kaynak dosyada yer alan tüm üstbilgilerin
BUILD
dosyasında düzgün şekilde tanımlandığını doğrulamak için bunlara ihtiyaç duyar. - Varsayılan sysroot.
- Derleme, bağlantı oluşturma, arşivleme için kullanılacak işaretler.
- Desteklenen derleme modları (opt, dbg, fastbuild) için kullanılacak işaretler.
- Derleyici tarafından özellikle gerekli kılınan değişkenleri yapın.
Derleyici birden fazla mimariyi destekliyorsa Bazel'in bunları ayrı olarak yapılandırması gerekir.
CcToolchainConfigInfo
, Bazel'in C++ kurallarının davranışını yapılandırmak için gerekli ayrıntı düzeyini sağlayan bir sağlayıcıdır. Varsayılan olarak Bazel, derlemeniz için CcToolchainConfigInfo
politikasını otomatik olarak yapılandırır ancak dilerseniz manuel olarak yapılandırabilirsiniz. Bunun için CcToolchainConfigInfo
özelliğini sağlayan bir Starlark kuralına ve cc_toolchain
öğesinin toolchain_config
özelliğini kuralınıza yönlendirmeniz gerekir.
cc_common.create_cc_toolchain_config_info()
numaralı telefonu arayarak CcToolchainConfigInfo
oluşturabilirsiniz.
İşlemde ihtiyacınız olacak tüm struct'lar için Starlark oluşturucularını @rules_cc//cc:cc_toolchain_config_lib.bzl
'de bulabilirsiniz.
C++ hedefi analiz aşamasına geçtiğinde Bazel, BUILD
dosyasına göre uygun cc_toolchain
hedefini seçer ve cc_toolchain.toolchain_config
özelliğinde belirtilen hedeften CcToolchainConfigInfo
sağlayıcısını edinir. cc_toolchain
hedefi, bu bilgiyi bir CcToolchainProvider
üzerinden C++ hedefine iletir.
Örneğin, cc_binary
veya cc_library
gibi bir kuralla örneklenen bir derleme veya bağlantı işlemi için aşağıdaki bilgiler gerekir:
- Kullanılacak derleyici veya bağlayıcı
- Derleyici/bağlayıcı için komut satırı işaretleri
--copt/--linkopt
seçenekleri üzerinden iletilen yapılandırma işaretleri- Ortam değişkenleri
- İşlemin yürütüleceği korumalı alanda gereken yapılar
Korumalı alanda gerekli olan yapılar dışında yukarıdaki bilgilerin tümü, cc_toolchain
öğesinin işaret ettiği Starlark hedefinde belirtilmiştir.
Korumalı alana gönderilecek yapılar cc_toolchain
hedefinde tanımlanır. Örneğin, cc_toolchain.linker_files
özelliğiyle korumalı alana gönderilecek bağlayıcı ikili program ve araç zinciri kitaplıklarını belirtebilirsiniz.
Araç zinciri seçimi
Araç zinciri seçim mantığı aşağıdaki gibi çalışır:
Kullanıcı,
BUILD
dosyasında bircc_toolchain_suite
hedefi belirtir ve--crosstool_top
seçeneğini kullanarak Bazel'ı hedefe yönlendirir.cc_toolchain_suite
hedefi birden fazla araç zincirine referans veriyor.--cpu
ve--compiler
işaretlerinin değerleri, bu araç zincirlerinden hangisinin seçileceğini ya yalnızca--cpu
işaret değerine ya da ortak--cpu | --compiler
değerine göre belirler. Seçim süreci aşağıdaki gibidir:--compiler
seçeneği belirtilirse Bazel,--cpu | --compiler
ilecc_toolchain_suite.toolchains
özelliğinden ilgili girişi seçer. Bazel karşılık gelen girişi bulamazsa hata verir.--compiler
seçeneği belirtilmezse Bazel,cc_toolchain_suite.toolchains
özelliğinden ilgili girişi yalnızca--cpu
ile seçer.İşaret belirtilmezse Bazel, ana makine sistemini inceler ve bulgularına dayanarak bir
--cpu
değeri seçer. İnceleme mekanizması kodunu inceleyin.
Bir araç zinciri seçildikten sonra, Starlark kuralında karşılık gelen feature
ve action_config
nesneleri derlemenin yapılandırmasını (yani daha sonra açıklanan öğeler) yönetir. Bu mesajlar, Bazel ikili programı değiştirilmeden Bazel'de tam kapsamlı C++ özelliklerinin uygulanmasına olanak tanır. C++ kuralları, Bazel kaynak kodunda ayrıntılı olarak açıklanan birden çok benzersiz işlemi destekler.
Özellikler
Özellik; komut satırı işaretleri, işlemler, yürütme ortamıyla ilgili kısıtlamalar veya bağımlılık değişiklikleri gerektiren bir varlıktır. Bir özellik, BUILD
dosyalarının treat_warnings_as_errors
gibi işaret yapılandırmalarını seçmesine izin vermek veya C++ kurallarıyla etkileşim kurmak ve derlemeye header_modules
ya da thin_lto
gibi yeni derleme işlemleri ve girişleri eklemek gibi basit bir şey olabilir.
İdeal olarak CcToolchainConfigInfo
, her özelliğin bir veya daha fazla işaret grubundan oluşan bir özellik listesi içerir. Bu grupların her biri, belirli Bazel işlemleri için geçerli olan işaretlerin listesini tanımlar.
Özellik ada göre belirtilir. Bu, Starlark kuralı yapılandırmasının Bazel sürümlerinden tamamen ayrıştırılmasına olanak tanır. Başka bir deyişle, Bazel sürümü yeni özelliklerin kullanımını gerektirmediği sürece CcToolchainConfigInfo
yapılandırmalarının davranışını etkilemez.
Bir özellik, aşağıdaki yöntemlerden biriyle etkinleştirilir:
- Özelliğin
enabled
alanıtrue
olarak ayarlanmış. - Bazel veya kural sahibi bu özelliği açıkça etkinleştirir.
- Kullanıcı, bu özelliği
--feature
Bazel seçeneği veyafeatures
kural özelliğiyle etkinleştirir.
Komut satırı bayraklarına, BUILD
dosya ayarlarına ve başka değişkenlere bağlı olarak özelliklerin birbirine bağımlılıkları olabilir.
Özellik ilişkileri
Bağımlılıklar genellikle doğrudan Bazel ile yönetilir. Bazel, yalnızca gereksinimleri zorunlu kılar ve derlemede tanımlanan özelliklerin doğasına özgü çakışmaları yönetir. Araç zinciri spesifikasyonu, doğrudan özellik desteği ve genişletmeyi yöneten Starlark kuralında kullanılmak üzere daha ayrıntılı kısıtlamalara olanak tanır. Desteklenen biçimler şunlardır:
Kısıtlama | Açıklama |
requires = [ feature_set (features = [ 'feature-name-1', 'feature-name-2' ]), ] |
Özellik düzeyinde. Bu özellik yalnızca belirtilen gerekli özellikler etkinleştirildiğinde desteklenir. Örneğin, bir özellik yalnızca belirli derleme modlarında (opt , dbg veya fastbuild ) desteklendiğinde. "Koşullar" birden fazla "feature_set" içeriyorsa bu özellik desteklenir (belirtilen tüm özellikler etkinleştirildiğinde).
|
implies = ['feature'] |
Özellik düzeyinde. Bu özellik, belirtilen özellikleri belirtir. Bir özelliğin etkinleştirilmesi, içerdiği tüm özellikleri de dolaylı olarak etkinleştirir (yani yinelemeli olarak çalışır). Ayrıca, dezenfektanların ortak kısımları gibi bir dizi özelliğin genel işlevlerinin dikkate alınmasını sağlar. Dolaylı özellikler devre dışı bırakılamaz. |
provides = ['feature'] |
Özellik düzeyinde. Bu özelliğin, birlikte kullanılabilen birkaç alternatif özellikten biri olduğunu belirtir. Örneğin, tüm dezenfektanlar Bu sayede, kullanıcı aynı anda iki veya daha fazla birbirini dışlayan özellik isterse alternatifler listeleyerek hata giderme sürecini iyileştirir. |
with_features = [ with_feature_set( features = ['feature-1'], not_features = ['feature-2'], ), ] |
İşaret grubu düzeyinde. Bir özellik, birden çok işaret grubu belirtebilir.
with_features belirtildiğinde, işaret grubu yalnızca belirtilen features grubundaki tüm özelliklerin etkin olduğu ve not_features grubundaki tüm özelliklerin devre dışı bırakıldığı en az bir with_feature_set varsa derleme komutuna genişletilir.
with_features belirtilmezse belirlenen her işlem için belirlenen işaret koşulsuz olarak uygulanır.
|
İşlemler
Eylemler, nasıl çalışacağını varsaymadan eylemin yürütüleceği koşulları değiştirme esnekliği sağlar. action_config
, bir işlemin çağırdığı araç ikili programını belirtirken feature
, işlem çağrıldığında aracın nasıl çalışacağını belirleyen yapılandırmayı (işaretler) belirtir.
İşlemler Bazel işlem grafiğini değiştirebileceğinden, özellikler, hangi Bazel işlemlerini etkilediklerini belirtmek için işlemlere referans verir. CcToolchainConfigInfo
sağlayıcısı, ilişkilendirilmiş işaret ve araçlar içeren işlemler (ör. c++-compile
) içeriyor. İşaretler, bir özellikle ilişkilendirilerek
her işleme atanır.
Her işlem adı, Bazel tarafından gerçekleştirilen, derleme veya bağlama gibi tek bir işlem türünü temsil eder. Bununla birlikte, eylemler ile Bazel işlem türleri arasında bire bir ilişki vardır. Bazel işlem türü, bir işlem (CppCompileAction
gibi) uygulayan Java sınıfını belirtir. Özellikle, aşağıdaki tabloda yer alan "derleyici işlemleri" ve "derleyici işlemleri" CppCompileAction
, bağlantı işlemleri ise CppLinkAction
'dir.
Derleyici işlemleri
İşlem | Açıklama |
preprocess-assemble
|
Ön işleme özelliğiyle birleştirin. Genellikle .S dosyaları içindir.
|
assemble
|
Ön işlemeden derleyin. Genellikle .s dosyaları içindir.
|
Derleyici işlemleri
İşlem | Açıklama |
cc-flags-make-variable
|
CC_FLAGS öğesini Genrules'a yayar.
|
c-compile
|
C olarak derleyin. |
c++-compile
|
C++ olarak derleyin. |
c++-header-parsing
|
Başlığın derleme hataları oluşturacağından, başlığın bağımsız olduğundan emin olmak için bir başlık dosyasında derleyici ayrıştırıcısını çalıştırın. Yalnızca modülleri destekleyen araç zincirleri için geçerlidir. |
Bağlantı işlemleri
İşlem | Açıklama |
c++-link-dynamic-library
|
Tüm bağımlılıklarını içeren paylaşılan bir kitaplığı bağlayın. |
c++-link-nodeps-dynamic-library
|
Yalnızca cc_library kaynak içeren paylaşılan bir kitaplığı bağlayın.
|
c++-link-executable
|
Çalıştırılmaya hazır son bir kitaplık bağlayın. |
Artırılmış gerçeklik (AR) işlemleri
AR işlemleri, nesne dosyalarını ar
aracılığıyla arşiv kitaplıklarında (.a
dosyaları) birleştirir ve bazı anlamları ada kodlar.
İşlem | Açıklama |
c++-link-static-library
|
Statik kitaplık oluşturun (arşiv). |
LTO işlemleri
İşlem | Açıklama |
lto-backend
|
Bit kodlarını yerel nesnelerde derleyen ThinLTO işlemi. |
lto-index
|
Global dizin oluşturan ThinLTO işlemi. |
action_config'i kullanma
action_config
, işlem sırasında çağrılacak aracı (ikili) ve özelliklerle tanımlanan işaret gruplarını belirterek Bazel işlemini tanımlayan bir Starlark yapısıdır. Bu işaretler, işlemin yürütülmesine kısıtlamalar uygular.
action_config()
kurucusu aşağıdaki parametrelere sahiptir:
Özellik | Açıklama |
action_name
|
Bu eylemin karşılık geldiği Bazel eylemi. Bazel, işlem başına araç ve yürütme gereksinimlerini keşfetmek için bu özelliği kullanır. |
tools
|
Çağrılacak yürütülebilir dosya. İşleme uygulanan araç, özellik yapılandırmasıyla eşleşen bir özellik kümesine sahip listedeki ilk araç olur. Varsayılan değer sağlanmalıdır. |
flag_sets
|
Bir işlem grubu için geçerli olan işaretleme listesi. Bu özellik özelliktekiyle aynıdır. |
env_sets
|
Bir işlem grubu için geçerli olan ortam kısıtlamalarının listesi. Özellik için kullanılır. |
action_config
, daha önce açıklanan özellik ilişkilerinde belirtilen diğer özellikleri ve action_config
'ları gerektirebilir ve ifade edebilir. Bu davranış, bir özelliğin davranışına benzer.
Son iki özellik, özelliklerdeki karşılık gelen özelliklere kıyasla gereksizdir ve bazı Bazel işlemleri için belirli işaretler veya ortam değişkenleri gerektirdiği ve gereksiz action_config
+feature
eşlemelerini önlemek amaçlandığı için dahil edilir. Genellikle tek bir özelliğin birden fazla action_config
üzerinde paylaşılması tercih edilir.
Aynı araç zincirinde aynı action_name
ile birden fazla action_config
tanımlayamazsınız. Bu, araç yollarındaki belirsizliği önler ve action_config
işlevinin ardındaki amacı zorunlu kılar. Bu amaç, bir işlemin özelliklerinin araç zincirinde tek bir yerde net bir şekilde açıklanmasıdır.
Araç oluşturucu kullanma
action_config
, tools
parametresi aracılığıyla bir araç grubu belirtebilir.
tool()
oluşturucusu, aşağıdaki parametreleri alır:
Alan | Açıklama |
path
|
Söz konusu aracın yolu (geçerli konuma göre). |
with_features
|
Özellik listesi, bu aracın kullanılabilmesi için en az bir özelliğin karşılanması gerekenleri içerir. |
Belirli bir action_config
için yalnızca bir tool
kendi araç yolu ve yürütme gerekliliklerini Bazel işlemine uygular. Özellik yapılandırmasıyla eşleşen with_feature
grubuna sahip bir araç bulunana kadar action_config
üzerinde tools
özelliği aracılığıyla bir araç seçilir (daha fazla bilgi için bu sayfanın önceki kısımlarındaki Özellik ilişkileri bölümüne bakın). Araç listelerinizi, boş bir özellik yapılandırmasına karşılık gelen
varsayılan bir araçla sonlandırmanız gerekir.
Örnek kullanım
Farklı platformlar arası anlamlara sahip Bazel
işlemlerini uygulamak için özellikler ve işlemler birlikte kullanılabilir. Örneğin..plist
Bazel ile bu işlem aşağıdaki gibi uygulanabilir. unbundle-debuginfo
bir Bazel işlemidir:
load("@rules_cc//cc:defs.bzl", "ACTION_NAMES")
action_configs = [
action_config (
action_name = ACTION_NAMES.cpp_link_executable,
tools = [
tool(
with_features = [
with_feature(features=["generate-debug-symbols"]),
],
path = "toolchain/mac/ld-with-dsym-packaging",
),
tool (path = "toolchain/mac/ld"),
],
),
]
features = [
feature(
name = "generate-debug-symbols",
flag_sets = [
flag_set (
actions = [
ACTION_NAMES.c_compile,
ACTION_NAMES.cpp_compile
],
flag_groups = [
flag_group(
flags = ["-g"],
),
],
)
],
implies = ["unbundle-debuginfo"],
),
]
Bu özellik, fission
kullanan Linux veya .pdb
dosyaları oluşturan Windows için tamamen farklı bir şekilde uygulanabilir. Örneğin, fission
tabanlı hata ayıklama sembolü oluşturma uygulaması aşağıdaki gibi görünebilir:
load("@rules_cc//cc:defs.bzl", "ACTION_NAMES")
action_configs = [
action_config (
name = ACTION_NAMES.cpp_compile,
tools = [
tool(
path = "toolchain/bin/gcc",
),
],
),
]
features = [
feature (
name = "generate-debug-symbols",
requires = [with_feature_set(features = ["dbg"])],
flag_sets = [
flag_set(
actions = [ACTION_NAMES.cpp_compile],
flag_groups = [
flag_group(
flags = ["-gsplit-dwarf"],
),
],
),
flag_set(
actions = [ACTION_NAMES.cpp_link_executable],
flag_groups = [
flag_group(
flags = ["-Wl", "--gdb-index"],
),
],
),
],
),
]
İşaret grupları
CcToolchainConfigInfo
, işaretleri belirli bir amaca hizmet eden gruplar halinde gruplandırmanıza olanak tanır. İşaret değeri içindeki önceden tanımlanmış değişkenleri kullanarak bir işaret belirtebilirsiniz. İşaretçi, işareti derleme komutuna eklerken derleyici tarafından genişletilir. Örneğin:
flag_group (
flags = ["%{output_execpath}"],
)
Bu durumda, işaretin içeriği işlemin çıkış dosyası yoluyla değiştirilir.
İşaretleme grupları derleme komutuna, yukarıdan aşağıya, soldan sağa doğru yukarıda göründükleri sırayla genişletilir.
Derleme komutuna eklendiğinde farklı değerlerle tekrarlanması gereken işaretler için işaret grubu, list
türündeki değişkenleri yineleyebilir. Örneğin, list
türündeki include_path
değişkeni:
flag_group (
iterate_over = "include_paths",
flags = ["-I%{include_paths}"],
)
include_paths
listesindeki her yol öğesi için -I<path>
değerine genişler. Bayrak grubu beyanının gövdesindeki tüm işaretler (veya flag_group
'ler) birim olarak genişletilir. Örneğin:
flag_group (
iterate_over = "include_paths",
flags = ["-I", "%{include_paths}"],
)
include_paths
listesindeki her yol öğesi için -I <path>
değerine genişler.
Bir değişken birden çok kez tekrarlanabilir. Örneğin:
flag_group (
iterate_over = "include_paths",
flags = ["-iprefix=%{include_paths}", "-isystem=%{include_paths}"],
)
şu şekilde genişler:
-iprefix=<inc0> -isystem=<inc0> -iprefix=<inc1> -isystem=<inc1>
Değişkenler, nokta gösterimi kullanılarak erişilebilen yapılara karşılık gelebilir. Örneğin:
flag_group (
flags = ["-l%{libraries_to_link.name}"],
)
Yapılar iç içe yerleştirilebilir ve sıralar da içerebilir. Ad çakışmalarını önlemek ve açık olmak için alanlarda tam yolu belirtmeniz gerekir. Örneğin:
flag_group (
iterate_over = "libraries_to_link",
flag_groups = [
flag_group (
iterate_over = "libraries_to_link.shared_libraries",
flags = ["-l%{libraries_to_link.shared_libraries.name}"],
),
],
)
Koşullu genişletme
İşaret grupları, belirli bir değişkenin veya expand_if_available
, expand_if_not_available
, expand_if_true
, expand_if_false
ya da expand_if_equal
özelliklerini kullanan alanın veya söz konusu değişkenin varlığına dayalı olarak koşullu genişletmeyi destekler. Örneğin:
flag_group (
iterate_over = "libraries_to_link",
flag_groups = [
flag_group (
iterate_over = "libraries_to_link.shared_libraries",
flag_groups = [
flag_group (
expand_if_available = "libraries_to_link.shared_libraries.is_whole_archive",
flags = ["--whole_archive"],
),
flag_group (
flags = ["-l%{libraries_to_link.shared_libraries.name}"],
),
flag_group (
expand_if_available = "libraries_to_link.shared_libraries.is_whole_archive",
flags = ["--no_whole_archive"],
),
],
),
],
)
CcToolchainConfigInfo referansı
Bu bölümde C++ kurallarını başarıyla yapılandırmak için gereken derleme değişkenleri, özellikler ve diğer bilgilere ilişkin bir referans sunulmaktadır.
CcToolchainConfigInfo derleme değişkenleri
Aşağıda, CcToolchainConfigInfo
derleme değişkenine referans verilmiştir.
Değişken | İşlem | Açıklama |
source_file
|
compile | Derlenecek kaynak dosya. |
input_file
|
şerit | Çıkarılacak yapı. |
output_file
|
compile | Derleme çıktısı. |
output_assembly_file
|
compile | Yayınlanan derleme dosyası. Yalnızca compile işlemi derleme metni yayınladığında (genellikle --save_temps işareti kullanıldığında) geçerlidir. İçerik, output_file ile aynıdır.
|
output_preprocess_file
|
compile | Önceden işlenmiş çıkış. Yalnızca kaynak dosyalarını önceden işleyen derleme işlemleri için (genellikle --save_temps işareti kullanıldığında) geçerlidir. İçerik, output_file ile aynıdır.
|
includes
|
compile | Derleyicinin, derlenen kaynağa koşulsuz olarak dahil etmesi gereken dosya dizisi. |
include_paths
|
compile | Derleyicinin, #include<foo.h> ve #include "foo.h" kullanılarak eklenen üst bilgileri aradığı sıra dizinleri.
|
quote_include_paths
|
compile | -iquote dizisi, derleyicinin #include "foo.h" kullanılarak eklenen üst bilgileri aradığı dizinleri içerir.
|
system_include_paths
|
compile | -isystem dizisi, derleyicinin #include <foo.h> kullanılarak eklenen üst bilgileri aradığı dizinleri içerir.
|
dependency_file
|
compile | Derleyici tarafından oluşturulan .d bağımlılık dosyası.
|
preprocessor_defines
|
compile | defines dizisi, ör. --DDEBUG .
|
pic
|
compile | Çıkışı konumdan bağımsız kod olarak derler. |
gcov_gcno_file
|
compile | gcov kapsam dosyası.
|
per_object_debug_info_file
|
compile | Nesne başına hata ayıklama bilgileri (.dwp ) dosyası.
|
stripotps
|
şerit | stripopts dizisi.
|
legacy_compile_flags
|
compile | compiler_flag , optional_compiler_flag , cxx_flag ve optional_cxx_flag gibi eski CROSSTOOL alanlarındaki işaret dizisi.
|
user_compile_flags
|
compile | copt kural özelliğinden veya --copt , --cxxopt ve --conlyopt işaretlerinden gelen işaret dizisi.
|
unfiltered_compile_flags
|
compile | unfiltered_cxx_flag eski CROSSTOOL alanından veya unfiltered_compile_flags özelliğinden gelen işaret dizisi. Bunlar, nocopts kural özelliği tarafından filtrelenmez.
|
sysroot
|
sysroot
|
|
runtime_library_search_directories
|
bağlantı | Bağlayıcı çalışma zamanı arama yolundaki girişler, genellikle -rpath işaretiyle ayarlanır.
|
library_search_directories
|
bağlantı | Bağlayıcı arama yolundaki girişler (genellikle -L işaretiyle ayarlanır).
|
libraries_to_link
|
bağlantı | Bağlayıcı çağrısında giriş olarak bağlanacak dosyalar sağlayan işaretler. |
def_file_path
|
bağlantı | Windows'da MSVC ile kullanılan def dosyasının konumu. |
linker_param_file
|
bağlantı | Komut satırı uzunluk sınırını aşmak için bazel tarafından oluşturulan bağlayıcı parametre dosyasının konumu. |
output_execpath
|
bağlantı | Bağlayıcı çıktısını yürütme. |
generate_interface_library
|
bağlantı | arayüz kitaplığının oluşturulup oluşturulmayacağına bağlı olarak "yes" veya "no" .
|
interface_library_builder_path
|
bağlantı | Arayüz kitaplığı oluşturucu aracına giden yol. |
interface_library_input_path
|
bağlantı | Arayüz kitaplığı ifso oluşturma aracı için giriş.
|
interface_library_output_path
|
bağlantı | ifso oluşturma aracı kullanılarak arayüz kitaplığının oluşturulacağı yol.
|
legacy_link_flags
|
bağlantı | Eski CROSSTOOL alanlarından gelen bağlayıcı işaretleri.
|
user_link_flags
|
bağlantı | --linkopt veya linkopts özelliğinden gelen bağlayıcı işaretleri.
|
linkstamp_paths
|
bağlantı | Bağlantı damgası yolları veren bir derleme değişkeni. |
force_pic
|
bağlantı | Bu değişkenin varlığı, PIC/PIE kodunun oluşturulması gerektiğini gösterir (Bazel seçeneği "--force_pic" başarılı oldu). |
strip_debug_symbols
|
bağlantı | Bu değişkenin varlığı, hata ayıklama sembollerinin kaldırılması gerektiğini gösterir. |
is_cc_test
|
bağlantı | Geçerli işlem cc_test bağlantı işlemi olduğunda güvenilir, değilse false (yanlış) değerini alır.
|
is_using_fission
|
derle, bağlantı oluştur, derle, bağlantı | Bu değişkenin varlığı, fisyonun (nesne başına hata ayıklama bilgisi) etkinleştirildiğini gösterir. Hata ayıklama bilgileri, .o yerine .dwo dosyalarında yer alacağından derleyici ile bağlayıcının bunu bilmesi gerekir.
|
fdo_instrument_path
|
derle, bağlantı oluştur, derle, bağlantı | FDO araç profilinin depolandığı dizinin yolu. |
fdo_profile_path
|
compile | FDO profilinin yolu. |
fdo_prefetch_hints_path
|
compile | Önbellek önceden getirme profilinin yolu. |
csfdo_instrument_path
|
derle, bağlantı oluştur, derle, bağlantı | Bağlama duyarlı FDO araç profilinin depolandığı dizine giden yol. |
İyi bilinen özellikler
Aşağıda, özellikler ve bunların etkinleştirme koşulları referans olarak verilmiştir.
Özellik | Belgeler |
opt | dbg | fastbuild
|
Derleme moduna göre varsayılan olarak etkindir. |
static_linking_mode | dynamic_linking_mode
|
Bağlantı moduna göre varsayılan olarak etkindir. |
per_object_debug_info
|
supports_fission özelliği belirtilip etkinleştirilmişse ve mevcut derleme modu --fission işaretinde belirtilmişse etkinleştirilir.
|
supports_start_end_lib
|
Etkinleştirilirse (ve --start_end_lib seçeneği ayarlanırsa) Bazel statik kitaplıklara değil, doğrudan nesnelere bağlanmak için --start-lib/--end-lib bağlayıcı seçeneklerini kullanır. Bu işlem, Bazel'in statik kitaplıklar derlemesine gerek olmadığı için derlemeyi hızlandırır.
|
supports_interface_shared_libraries
|
Etkinleştirilirse (ve --interface_shared_objects seçeneği ayarlanırsa) Bazel, linkstatic değeri False (varsayılan olarak cc_test ) olarak ayarlanmış hedefleri arayüzde paylaşılan kitaplıklara bağlar. Bu, artımlı yeniden bağlama işlemini hızlandırır.
|
supports_dynamic_linker
|
Etkinleştirilirse C++ kuralları, araç zincirinin paylaşılan kitaplıklar oluşturabileceğini bilir. |
static_link_cpp_runtimes
|
Etkinleştirilirse Bazel, C++ çalışma zamanını statik olarak statik bağlantı modunda, dinamik bağlantı modunda ise dinamik olarak bağlar. cc_toolchain.static_runtime_lib veya cc_toolchain.dynamic_runtime_lib özelliğinde belirtilen yapılar (bağlantı moduna bağlı olarak) bağlantı işlemlerine eklenir.
|
supports_pic
|
Etkinleştirilirse araç zinciri, dinamik kitaplıklar için PIC nesnelerini kullanacağını bilir. PIC derlemesi gerektiğinde "pic" değişkeni mevcuttur. Varsayılan olarak etkinleştirilmezse ve "--force_pic" geçilirse Bazel, "supports_pic" (supports_pic) isteğinde bulunur ve özelliğin etkinleştirildiğini doğrular. Özellik eksikse veya etkinleştirilemiyorsa "--force_pic" kullanılamaz. |
static_linking_mode | dynamic_linking_mode
|
Bağlantı moduna göre varsayılan olarak etkindir. |
no_legacy_features
|
Mevcut olduğunda Bazel'in C++ yapılandırmasına eski özellikleri eklemesini engeller. Özelliklerin tam listesini aşağıda bulabilirsiniz. |
Eski özelliklere yama uygulama mantığı
Bazel, geriye dönük uyumluluk için araç zinciri özelliklerinde aşağıdaki değişiklikleri uygular:
legacy_compile_flags
özelliğini araç zincirinin en üstüne taşırdefault_compile_flags
özelliğini araç zincirinin en üstüne taşır- Araç zincirinin en üstüne
dependency_file
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
pic
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
per_object_debug_info
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
preprocessor_defines
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
includes
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
include_paths
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
fdo_instrument
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
fdo_optimize
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
cs_fdo_instrument
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
cs_fdo_optimize
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
fdo_prefetch_hints
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
autofdo
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
build_interface_libraries
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
dynamic_library_linker_tool
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
shared_flag
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
linkstamps
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
output_execpath_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
runtime_library_search_directories
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
library_search_directories
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
archiver_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
libraries_to_link
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
force_pic_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
user_link_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
legacy_link_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
static_libgcc
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
fission_support
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
strip_debug_symbols
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
coverage
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
llvm_coverage_map_format
(mevcut değilse) özelliği ekler - Araç zincirinin en üstüne
gcc_coverage_map_format
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
fully_static_link
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
user_compile_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
sysroot
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
unfiltered_compile_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
linker_param_file
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
compiler_input_flags
(mevcut değilse) özelliği ekler - Araç zincirinin en altına
compiler_output_flags
(mevcut değilse) özelliği ekler
Bu, uzun bir özellik listesidir. Planlanan, Starlark'ta Crosstool tamamlandığında bunlardan kurtulmak. Meraklı okuyucular için uygulamayı CppActionConfigs'de görebilir, üretim araç zincirleri için ise araç zincirini daha bağımsız hale getirmek amacıyla no_legacy_features
öğesini eklemeyi düşünebilirsiniz.