Genel bakış
Derleyiciyi doğru seçeneklerle çağırmak için Bazel'ın derleyicinin dahili bileşenleri hakkında dizin ve önemli işaretler ekleme 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 şunları bilmesi gerekiyor:
- Derleyicinin thinLTO, modüller, dinamik bağlantı veya PIC'yi (konumdan bağımsız kod) destekleyip desteklemediği.
- gcc, ld, ar, objcopy gibi gerekli araçlara giden yollar.
- Yerleşik sistemde dizinler bulunur. Bazel'ın, kaynak dosyaya dahil edilen tüm üst bilgilerin
BUILD
dosyasında doğru bir şekilde tanımlandığını doğrulaması için bunlara ihtiyacı vardır. - Varsayılan sysroot.
- Derleme, bağlantı oluşturma, arşivleme için hangi işaretlerin kullanılacağı.
- Desteklenen derleme modları (opt, dbg, fastbuild) için hangi işaretlerin kullanılacağı.
- Değişkenleri derleyici için özellikle gerekli kılın.
Derleyici birden çok mimariyi destekliyorsa Bazel'ın bunları ayrı olarak yapılandırması gerekir.
CcToolchainConfigInfo
, Bazel C++ kurallarının davranışını yapılandırmak için gerekli ayrıntı düzeyini sağlayan bir sağlayıcıdır. Bazel, varsayılan olarak derlemeniz için CcToolchainConfigInfo
öğesini otomatik olarak yapılandırır ancak manuel olarak yapılandırabilirsiniz. Bunun için, CcToolchainConfigInfo
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()
numarasını arayarak CcToolchainConfigInfo
oluşturabilirsiniz.
Süreçte ihtiyaç duyacağınız tüm struct'lar için Starlark kurucularını @rules_cc//cc:cc_toolchain_config_lib.bzl
içinde bulabilirsiniz.
Bir C++ hedefi analiz aşamasına girdiğinde, Bazel BUILD
dosyasına uygun cc_toolchain
hedefini seçer ve cc_toolchain.toolchain_config
özelliğinde belirtilen hedeften CcToolchainConfigInfo
sağlayıcısını alır. cc_toolchain
hedefi, bu bilgileri bir CcToolchainProvider
aracılığıyla C++ hedefine aktarır.
Örneğin, cc_binary
veya cc_library
gibi bir kuralla somutlaştırılan 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çeneklerinden geçirilen yapılandırma işaretleri- Ortam değişkenleri
- İşlemin yürütüldüğü korumalı alanda gereken yapılar
Korumalı alan için gereken yapılar hariç yukarıdaki tüm bilgiler, cc_toolchain
öğesinin işaret ettiği Starlark hedefinde belirtilir.
Korumalı alana gönderilecek yapılar cc_toolchain
hedefinde bildirilir. Ö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ığı şu şekilde ç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 yalnızca--cpu
işaret değerine veya ortak--cpu | --compiler
değerine göre belirler. Seçim süreci şu şekildedir:--compiler
seçeneği belirtilirse Bazel,--cpu | --compiler
ilecc_toolchain_suite.toolchains
özelliğinden ilgili girişi seçer. Bazel karşılık gelen bir girişi bulamazsa hata verir.--compiler
seçeneği belirtilmezse Bazel, yalnızca--cpu
ilecc_toolchain_suite.toolchains
özelliğinden ilgili girişi seçer.Hiçbir iş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 donanımlı C++ özelliklerinin uygulanmasına olanak tanır. C++ kuralları, Bazel kaynak kodunda ayrıntılı olarak belgelenen birden çok benzersiz işlemi destekler.
Özellikler
Özellik; komut satırı işaretleri, işlemler, yürütme ortamı üzerindeki kısıtlamalar veya bağımlılık değişiklikleri gerektiren 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şimde bulunup derlemeye header_modules
ya da thin_lto
gibi yeni derleme işlemleri ve girişleri eklemek gibi basit bir işlem olabilir.
İdeal olarak CcToolchainConfigInfo
, özelliklerin listesi içerir. Bu listede her özellik, her biri belirli Bazel işlemleri için geçerli olan işaret listesini tanımlayan bir veya daha fazla işaret grubundan oluşur.
Bir özellik adı ile 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, bir Bazel sürümü, yeni özelliklerin kullanılmasını gerektirmediği sürece CcToolchainConfigInfo
yapılandırmalarının davranışını etkilemez.
Bir özellik, aşağıdaki yollardan biriyle etkinleştirilir:
- Özelliğin
enabled
alanıtrue
olarak ayarlanmıştır. - Bazel veya kural sahibi açıkça etkinleştirir.
- Kullanıcı, bu özelliği
--feature
Bazel seçeneği veyafeatures
kural özelliği aracılığıyla etkinleştirir.
Özellikler birbirine bağımlı olabilir, komut satırı işaretlerine, BUILD
dosya ayarlarına ve diğer değişkenlere bağlı olabilir.
Özellik ilişkileri
Bağımlılıklar genellikle doğrudan Bazel ile yönetilir. Bazel yalnızca gereksinimleri uygular ve derlemede tanımlanan özelliklerin doğasından kaynaklanan çatışmaları yönetir. Araç zinciri spesifikasyonu, özellik desteği ve genişletmeyi yöneten Starlark kuralında doğrudan kullanım için 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üzeyi. Bu özellik yalnızca belirtilen gerekli özellikler etkinse desteklenir. Örneğin, bir özellik yalnızca belirli derleme modlarında desteklendiğinde (opt , dbg veya fastbuild ). "requires" birden fazla "feature_set" içeriyorsa (belirtilen tüm özellikler etkinleştirildiğinde) "feature_set"lerden herhangi biri karşılandığında özellik desteklenir.
|
implies = ['feature'] |
Özellik düzeyi. Bu özellik, belirtilen özellikleri ima eder. Bir özelliğin etkinleştirilmesi, ima edilen tüm özellikleri dolaylı olarak da etkinleştirir (yani yinelemeli olarak çalışır). Ayrıca, temizleyicilerin sık kullanılan parçaları gibi bir dizi özelliğin ortak işlev alt kümelerini de hesaba katma olanağı sağlar. Örtülü özellikler devre dışı bırakılamaz. |
provides = ['feature'] |
Özellik düzeyi. Bu özelliğin, birbirini dışlayan birkaç alternatif özellikten biri olduğunu belirtir. Örneğin, tüm temizleyiciler Bu özellik, kullanıcı aynı anda iki veya daha fazla karşılıklı olarak birbirini dışlayan özellik isterse alternatifleri listeleyerek hata işlemeyi iyileştirir. |
with_features = [ with_feature_set( features = ['feature-1'], not_features = ['feature-2'], ), ] |
İşaretleme düzeyi. Bir özellik, birden çok işaret grubu belirtebilir.
with_features belirtildiğinde, işaret grubu yalnızca belirtilen features grubundaki tüm özelliklerin etkinleştirildiği ve not_features kümesinde belirtilen tüm özelliklerin devre dışı bırakıldığı en az bir with_feature_set varsa derleme komutuna genişletilir.
with_features belirtilmezse ayarlanan işaret, belirtilen her işleme koşulsuz olarak uygulanır.
|
İşlemler
Eylemler, bir işlemin nasıl çalışacağını varsaymadan yürütülürken koşulları değiştirme esnekliği sağlar. action_config
, bir işlemin çağırdığı araç ikili programını, feature
ise işlem çağrıldığında aracın nasıl davranacağını belirleyen yapılandırmayı (işaretler) belirtir.
Özellikler, işlemler Bazel işlem grafiğini değiştirebileceğinden, hangi Bazel işlemlerini etkilediklerini belirtmek için işlemlere referans verir. CcToolchainConfigInfo
sağlayıcısı, ilişkili işaretleri ve araçları olan c++-compile
gibi işlemleri içerir. Her işleme, bir özellikle ilişkilendirilerek
işaretler atanır.
Her işlem adı, Bazel tarafından gerçekleştirilen, derleme veya bağlantı oluşturma gibi tek bir işlem türünü temsil eder. Bununla birlikte, eylemler ve Bazel işlem türleri arasında çoktan-bire bir ilişki vardır. Bazel işlem türü, bir eylem uygulayan Java sınıfını (CppCompileAction
gibi) belirtir. Özellikle, aşağıdaki tabloda verilen "derleyici eylemleri" ve "derleyici eylemleri" CppCompileAction
, bağlantı işlemleri ise CppLinkAction
şeklindedir.
Derleyici işlemleri
İşlem | Açıklama |
preprocess-assemble
|
Ön işleme sistemiyle birleştirin. Genellikle .S dosyaları için.
|
assemble
|
Önceden işleme olmadan monte edin. Genellikle .s dosyaları için.
|
Derleyici işlemleri
İşlem | Açıklama |
cc-flags-make-variable
|
CC_FLAGS öğesini, türlere yayar.
|
c-compile
|
C olarak derleyin. |
c++-compile
|
C++ olarak derleyin. |
c++-header-parsing
|
Başlığın bağımsız olduğundan emin olmak için derleyicinin ayrıştırıcısını bir başlık dosyasında çalıştırın. Aksi takdirde, derleme hataları oluşabilir. 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ığa bağlantı oluşturun. |
c++-link-nodeps-dynamic-library
|
Yalnızca cc_library kaynak içeren paylaşılan bir kitaplığı bağlayın.
|
c++-link-executable
|
Çalıştırmaya hazır son kitaplığı 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
dosya) derler ve bazı anlamları ada kodlar.
İşlem | Açıklama |
c++-link-static-library
|
Statik kitaplık (arşiv) oluşturun. |
LTO işlemleri
İşlem | Açıklama |
lto-backend
|
Bit kodlarını yerel nesnelere derleyen ThinLTO işlemi. |
lto-index
|
Global dizin oluşturan ThinLTO işlemi. |
action_config kullanma
action_config
, işlem sırasında çağrılacak aracı (ikili) ve özelliklerle tanımlanan işaret gruplarını belirterek bir 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()
oluşturucusu aşağıdaki parametrelere sahiptir:
Özellik | Açıklama |
action_name
|
Bu işleme karşılık gelen Bazel işlemi. Bazel, işlem başına aracı 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 grubuna sahip listede ilk araç olur. Varsayılan değer sağlanmalıdır. |
flag_sets
|
Bir işlem grubu için geçerli olan işaretlerin listesi. Aynı özellikte olduğu gibi. |
env_sets
|
Bir işlem grubu için geçerli olan ortam kısıtlamalarının listesi. Aynı özellikte olduğu gibi. |
action_config
, daha önce açıklanan özellik ilişkileri tarafından belirtildiği gibi diğer özellikleri ve action_config
'leri zorunlu kılabilir ve ima edebilir. Bu davranış, bir özelliğin davranışına benzer.
Son iki özellik, özelliklerde karşılık gelen özelliklere göre gereksizdir ve bazı Bazel işlemleri belirli işaretler veya ortam değişkenleri gerektirdiğinden ve amaç gereksiz action_config
+feature
eşlemelerinden kaçınmak olduğu için dahil edilmiştir. Genellikle tek bir özelliğin birden fazla action_config
ile paylaşılması tercih edilir.
Aynı araç zincirinde aynı action_name
değerine sahip birden fazla action_config
tanımlayamazsınız. Bu, araç yollarındaki belirsizliği önler ve action_config
amacını güçlendirir. İşlemin özellikleri, araç zincirinde tek bir yerde net bir şekilde açıklanır.
Araç kurucuyu kullanma
action_config
öğesi, tools
parametresi aracılığıyla bir araç grubunu belirtebilir.
tool()
oluşturucu şu parametreleri alır:
Alan | Açıklama |
path
|
Söz konusu aracın yolu (mevcut konuma göre). |
with_features
|
Bu aracın kullanılabilmesi için karşılanması gereken en az bir özellik listesi bulunur. |
Belirli bir action_config
için yalnızca tek bir tool
, araç yolu ve yürütme gereksinimlerini Bazel işlemine uygular. Özellik yapılandırmasıyla eşleşen with_feature
grubuna sahip bir araç bulunana kadar action_config
öğesinde tools
özelliği yinelenerek 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
Özellikler ve işlemler, farklı platformlar arası anlamlara sahip Bazel eylemlerini uygulamak için birlikte kullanılabilir. Örneğin, macOS'te hata ayıklama sembolü oluşturma işlemi için, derleme işleminde simgeler oluşturulması, ardından bağlantı işlemi sırasında sıkıştırılmış dsym arşivi oluşturmak için özel bir araç çağrılması ve ardından Xcode tarafından kullanılabilecek uygulama paketi ve .plist
dosyaları oluşturmak için bu arşivin açılması gerekir.
Bazel ile bu süreç 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"],
),
]
Aynı özellik, fission
kullanan Linux veya .pdb
dosyası üreten Windows için tamamen farklı ş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"],
),
],
),
],
),
]
Grupları işaretle
CcToolchainConfigInfo
, işaretleri belirli bir amaca hizmet eden gruplar halinde gruplandırmanıza olanak tanır. İşaret değeri içinde, derleyicinin işareti derleme komutuna eklerken genişlettiği önceden tanımlanmış değişkenler kullanarak bir işaret belirtebilirsiniz. Örneğin:
flag_group (
flags = ["%{output_execpath}"],
)
Bu durumda, işaretin içeriği eylemin çıkış dosyası yoluyla değiştirilir.
İşaretleme grupları, derleme komutuna, listede göründükleri sırayla yukarıdan aşağıya, soldan sağa olacak şekilde genişletilir.
Derleme komutuna eklendiğinde farklı değerlerle tekrarlanması gereken işaretler için bayrak 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 bir yol öğesi için -I<path>
değerine genişler. İşaretleme grubu bildiriminin gövdesindeki tüm işaretler (veya flag_group
'ler) bir birim olarak genişletilir. Örneğin:
flag_group (
iterate_over = "include_paths",
flags = ["-I", "%{include_paths}"],
)
include_paths
listesindeki her bir 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}"],
)
şuna 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 adım 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 alanının varlığına dayalı koşullu genişletmeyi destekler. Bunun için expand_if_available
, expand_if_not_available
, expand_if_true
, expand_if_false
veya expand_if_equal
özelliklerini kullanır. Ö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 bir referans sağlanır.
CcToolchainConfigInfo derleme değişkenleri
Aşağıda CcToolchainConfigInfo
derleme değişkenlerine referans verilmiştir.
Değişken | İşlem | Açıklama |
source_file
|
compile | Derlenecek kaynak dosya. |
input_file
|
şerit | Kaldırılacak yapı. |
output_file
|
derleme, çıkarma | 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çerli olur. İçerik, output_file ile aynıdır.
|
output_preprocess_file
|
compile | Ön işlenmiş çıkış. Yalnızca kaynak dosyaları ön işleyen (genellikle --save_temps işareti kullanıldığında) işlemleri derlemek için geçerlidir. İçerik, output_file ile aynıdır.
|
includes
|
compile | Derleyicinin koşulsuz olarak derlenen kaynağa eklemesi gereken dosya sırası. |
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 başlıkları aradığı dizinleri içerir.
|
system_include_paths
|
compile | -isystem dizisi, derleyicinin #include <foo.h> kullanılarak eklenen başlıkları 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ından gelen 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ğlanacak dosyaları, bağlayıcı çağrısında giriş olarak işaretler. |
def_file_path
|
bağlantı | MSVC içeren Windows'da kullanılan geçersiz dosyanı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ı param dosyasının konumu. |
output_execpath
|
bağlantı | Bağlayıcı çıktısının yürütme yolu. |
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şturma 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şturucu aracını kullanarak 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 belirtir (Bazel seçeneği "--force_pic" geçirildi). |
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ı | Mevcut işlem bir cc_test bağlantı işlemi olduğunda doğru, aksi takdirde yanlış değerini alır.
|
is_using_fission
|
derleme, 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 dosyaları yerine .dwo dosyalarında bulunur ve derleyici ile bağlayıcının bunu bilmesi gerekir.
|
fdo_instrument_path
|
derleme, bağlantı | FDO araçları profilini depolayan dizine giden yol. |
fdo_profile_path
|
compile | FDO profiline giden yol. |
fdo_prefetch_hints_path
|
compile | Önbellek önceden getirme profilinin yolu. |
cs_fdo_instrument_path
|
derleme, bağlantı | Bağlama duyarlı FDO araçları profilini depolayan dizine giden yol. |
İyi bilinen özellikler
Aşağıda, özelliklere ve bunların etkinleştirme koşullarına referans verilmiştir.
Özellik | Belgeler |
opt | dbg | fastbuild
|
Derleme moduna göre varsayılan olarak etkinleştirilir. |
static_linking_mode | dynamic_linking_mode
|
Bağlantı moduna göre varsayılan olarak etkinleştirilir. |
per_object_debug_info
|
supports_fission özelliği belirtilip etkinleştirildiyse 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 bağlantı vermez. Bunun yerine, doğrudan nesnelere bağlantı oluşturmak için --start-lib/--end-lib bağlayıcı seçeneklerini kullanır. Bazel'ın statik kitaplıklar derlemesine gerek olmadığından bu, derlemeyi hızlandırır.
|
supports_interface_shared_libraries
|
Etkinleştirilirse (ve --interface_shared_objects seçeneği ayarlanırsa) Bazel, linkstatic öğesinin Yanlış (varsayılan olarak cc_test ) değerine ayarlandığı hedefleri arayüz paylaşılan kitaplıklarına bağlar. Bu, artımlı yeniden bağlantıyı 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 ve dinamik bağlantı modunda 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 kullanmayı bilir. PIC derlemesi gerektiğinde "pic" değişkeni mevcuttur. Varsayılan olarak etkinleştirilmemişse ve "--force_pic" iletilirse, Bazel "supports_pic" isteğinde bulunur ve özelliğin etkinleştirildiğini doğrular. Özellik eksikse veya etkinleştirilemediyse "--force_pic" kullanılamaz. |
static_linking_mode | dynamic_linking_mode
|
Bağlantı moduna göre varsayılan olarak etkinleştirilir. |
no_legacy_features
|
Mevcut olduğunda Bazel'ın C++ yapılandırmasına eski özellikleri eklemesini önler. Özelliklerin tam listesini aşağıda bulabilirsiniz. |
Eski özelliklere yama uygulama mantığı
Bazel, geriye dönük uyumluluk için araç zincirinin özelliklerine 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
(varsa) özelliğini ekler - Araç zincirinin en üstüne
pic
(varsa) özelliğini ekler - Araç zincirinin en üstüne
per_object_debug_info
(varsa) özelliğini ekler - Araç zincirinin en üstüne
preprocessor_defines
(varsa) özelliğini ekler - Araç zincirinin en üstüne
includes
(varsa) özelliğini ekler - Araç zincirinin en üstüne
include_paths
(varsa) özelliğini ekler - Araç zincirinin en üstüne
fdo_instrument
(varsa) özelliğini ekler - Araç zincirinin en üstüne
fdo_optimize
(varsa) özelliğini ekler - Araç zincirinin en üstüne
cs_fdo_instrument
(varsa) özelliğini ekler - Araç zincirinin en üstüne
cs_fdo_optimize
(varsa) özelliğini ekler - Araç zincirinin en üstüne
fdo_prefetch_hints
(varsa) özelliğini ekler - Araç zincirinin en üstüne
autofdo
(varsa) özelliğini ekler - Araç zincirinin en üstüne
build_interface_libraries
(varsa) özelliğini ekler - Araç zincirinin en üstüne
dynamic_library_linker_tool
(varsa) özelliğini ekler - Araç zincirinin en üstüne
shared_flag
(varsa) özelliğini ekler - Araç zincirinin en üstüne
linkstamps
(varsa) özelliğini ekler - Araç zincirinin en üstüne
output_execpath_flags
(varsa) özelliğini ekler - Araç zincirinin en üstüne
runtime_library_search_directories
(varsa) özelliğini ekler - Araç zincirinin en üstüne
library_search_directories
(varsa) özelliğini ekler - Araç zincirinin en üstüne
archiver_flags
(varsa) özelliğini ekler - Araç zincirinin en üstüne
libraries_to_link
(varsa) özelliğini ekler - Araç zincirinin en üstüne
force_pic_flags
(varsa) özelliğini ekler - Araç zincirinin en üstüne
user_link_flags
(varsa) özelliğini ekler - Araç zincirinin en üstüne
legacy_link_flags
(varsa) özelliğini ekler - Araç zincirinin en üstüne
static_libgcc
(varsa) özelliğini ekler - Araç zincirinin en üstüne
fission_support
(varsa) özelliğini ekler - Araç zincirinin en üstüne
strip_debug_symbols
(varsa) özelliğini ekler - Araç zincirinin en üstüne
coverage
(varsa) özelliğini ekler - Araç zincirinin en üstüne
llvm_coverage_map_format
(varsa) özelliğini ekler - Araç zincirinin en üstüne
gcc_coverage_map_format
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
fully_static_link
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
user_compile_flags
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
sysroot
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
unfiltered_compile_flags
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
linker_param_file
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
compiler_input_flags
(varsa) özelliğini ekler - Araç zincirinin alt kısmına
compiler_output_flags
(varsa) özelliğini ekler
Bu, uzun bir özellik listesidir. Plan, Starlark'taki Crosstool aracından sonra bunları ortadan kaldırmaktır. Meraklı okuyucular için uygulamayı CppActionConfigs'de görebilir, üretim araç zincirleri için araç zincirini daha bağımsız hale getirmek için no_legacy_features
eklemeyi düşünün.