brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.6 KiB · 9026444 Raw
418 lines · plain
1# This file is licensed under the Apache License v2.0 with LLVM Exceptions.2# See https://llvm.org/LICENSE.txt for license information.3# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception4 5load("@rules_cc//cc:defs.bzl", "cc_library")6 7package(8    default_visibility = ["//visibility:public"],9    features = ["layering_check"],10)11 12licenses(["notice"])13 14cc_library(15    name = "config",16    defines = select({17        "@platforms//os:linux": [18            "COMPILER_RT_HAS_ATOMICS=1",19            "COMPILER_RT_HAS_FCNTL_LCK=1",20            "COMPILER_RT_HAS_UNAME=1",21        ],22        # Will raise error unless supported platforms.23    }),24    target_compatible_with = select({25        "@platforms//os:linux": [],26        "//conditions:default": ["@platforms//:incompatible"],27    }),28)29 30WIN32_ONLY_FILES = [31    "lib/profile/WindowsMMap.c",32]33 34cc_library(35    name = "profile",36    srcs = glob(37        [38            "lib/profile/*.c",39            "lib/profile/*.cpp",40            "lib/profile/*.h",41        ],42        exclude = WIN32_ONLY_FILES,43    ) + select({44        "@platforms//os:windows": WIN32_ONLY_FILES,45        "//conditions:default": [],46    }),47    hdrs = glob([48        "include/profile/*.h",49        "include/profile/*.inc",50    ]),51    includes = [52        "include",53    ],54    linkstatic = True,55    deps = [56        ":config",57    ],58)59 60cc_library(61    name = "orc_rt_common_headers",62    hdrs = [63        "lib/orc/adt.h",64        "lib/orc/bitmask_enum.h",65        "lib/orc/common.h",66        "lib/orc/compiler.h",67        "lib/orc/debug.h",68        "lib/orc/endianness.h",69        "lib/orc/error.h",70        "lib/orc/executor_address.h",71        "lib/orc/executor_symbol_def.h",72        "lib/orc/interval_map.h",73        "lib/orc/interval_set.h",74        "lib/orc/jit_dispatch.h",75        "lib/orc/record_section_tracker.h",76        "lib/orc/rtti.h",77        "lib/orc/simple_packed_serialization.h",78        "lib/orc/stl_extras.h",79        "lib/orc/string_pool.h",80        "lib/orc/unique_function.h",81        "lib/orc/wrapper_function_utils.h",82    ],83    strip_include_prefix = "lib/orc",84)85 86cc_library(87    name = "orc_rt",88    srcs = [89        "lib/orc/debug.cpp",90        "lib/orc/dlfcn_wrapper.cpp",91        "lib/orc/log_error_to_stderr.cpp",92        "lib/orc/rtti.cpp",93        "lib/orc/run_program_wrapper.cpp",94    ] + select({95        "@platforms//os:macos": [96            "lib/orc/macho_platform.cpp",97            "lib/orc/macho_platform.h",98            "lib/orc/macho_tlv.arm64.S",99            "lib/orc/macho_tlv.x86-64.S",100        ],101        "@platforms//os:linux": [102            "lib/orc/elfnix_platform.cpp",103            "lib/orc/elfnix_platform.h",104            "lib/orc/elfnix_tls.aarch64.S",105            "lib/orc/elfnix_tls.ppc64.S",106            "lib/orc/elfnix_tls.x86-64.S",107        ],108    }),109    hdrs = glob(["include/orc_rt/*.h"]),110    includes = ["include"],111    linkstatic = True,112    deps = [113        ":orc_rt_common_headers",114    ],115)116 117BUILTINS_CRTBEGIN_SRCS = ["lib/builtins/crtbegin.c"]118 119filegroup(120    name = "builtins_crtbegin_src",121    srcs = BUILTINS_CRTBEGIN_SRCS,122)123 124BUILTINS_CRTEND_SRCS = ["lib/builtins/crtend.c"]125 126filegroup(127    name = "builtins_crtend_src",128    srcs = BUILTINS_CRTEND_SRCS,129)130 131BUILTINS_HOSTED_SRCS = [132    "lib/builtins/clear_cache.c",133    "lib/builtins/emutls.c",134    "lib/builtins/enable_execute_stack.c",135    "lib/builtins/eprintf.c",136]137 138# Source files in the builtins library that build on top of libc and are only139# appropriate in hosted environments.140filegroup(141    name = "builtins_hosted_srcs",142    srcs = BUILTINS_HOSTED_SRCS,143)144 145BUILTINS_BF16_SRCS_PATTERNS = [146    "lib/builtins/*bf*.c",147]148 149# Source files for the 16-bit Brain floating-point number builtins.150filegroup(151    name = "builtins_bf16_srcs",152    srcs = glob(BUILTINS_BF16_SRCS_PATTERNS),153)154 155BUILTINS_X86_FP80_SRCS_PATTERNS = [156    # `xc` marks 80-bit complex number builtins.157    "lib/builtins/*xc*.c",158 159    # `xf` marks 80-bit floating-point builtins.160    "lib/builtins/*xf*.c",161]162 163# Source files for the 80-bit floating-point and complex number builtins.164filegroup(165    name = "builtins_x86_fp80_srcs",166    srcs = glob(167        BUILTINS_X86_FP80_SRCS_PATTERNS,168        exclude = BUILTINS_BF16_SRCS_PATTERNS,169    ),170)171 172BUILTINS_TF_SRCS_PATTERNS = [173    # `tc` marks 128-bit complex number builtins.174    "lib/builtins/*tc*.c",175 176    # `tf` marks 128-bit floating-point builtins.177    "lib/builtins/*tf*.c",178]179 180BUILTINS_TF_EXCLUDES = (181    BUILTINS_HOSTED_SRCS +182    BUILTINS_BF16_SRCS_PATTERNS +183    BUILTINS_X86_FP80_SRCS_PATTERNS184)185 186# Source files for the 128-bit floating-point and complex number builtins.187filegroup(188    name = "builtins_tf_srcs",189    srcs = glob(190        BUILTINS_TF_SRCS_PATTERNS,191        exclude = BUILTINS_TF_EXCLUDES,192    ),193)194 195BUILTNS_ATOMICS_SRCS = ["lib/builtins/atomic.c"]196 197filegroup(198    name = "builtins_atomics_srcs",199    srcs = BUILTNS_ATOMICS_SRCS + ["lib/builtins/assembly.h"],200)201 202BUILTINS_MACOS_ATOMIC_SRCS_PATTERNS = [203    "lib/builtins/atomic_*.c",204]205 206# Source files for macOS atomic builtins.207filegroup(208    name = "builtins_macos_atomic_srcs",209    srcs = glob(BUILTINS_MACOS_ATOMIC_SRCS_PATTERNS),210)211 212# Apple-platform specific SME source file.213filegroup(214    name = "builtins_aarch64_apple_sme_srcs",215    srcs = ["lib/builtins/aarch64/arm_apple_sme_abi.s"],216)217 218# Non-Apple platform SME sources. These sources assume function219# multi-versioning, `-fno-builtin`, `__ARM_UNALIGNED` feature support, and FP220# availability. Other configurations will need to add a new filegroup if221# desired.222filegroup(223    name = "builtins_aarch64_sme_srcs",224    srcs = [225        "lib/builtins/aarch64/sme-abi.S",226        "lib/builtins/aarch64/sme-abi-assert.c",227    ] + glob(["lib/builtins/aarch64/sme-libc-opt-*.S"]),228)229 230# A list of (pat, size, model) tuples for AArch64's outline atomics.231AARCH64_OUTLINE_ATOMICS = [232    (pat, size, model)233    for pat in [234        "cas",235        "swp",236        "ldadd",237        "ldclr",238        "ldeor",239        "ldset",240    ]241    for size in [242        "1",243        "2",244        "4",245        "8",246        "16",247    ]248    for model in [249        "1",250        "2",251        "3",252        "4",253    ]254    if pat == "cas" or size != "16"255]256 257AARCH64_OUTLINE_ATOMICS_FMT = "lib/builtins/aarch64/outline_atomic_{0}{1}_{2}.S"258 259# lse.S is compiled multiple times with different macros as the input. Model260# this as a genrule producing individual files with the macros at the start.261[[genrule(262    name = "builtins_aarch64_outline_atomic_" + pat + size + "_" + model,263    srcs = ["lib/builtins/aarch64/lse.S"],264    outs = [AARCH64_OUTLINE_ATOMICS_FMT.format(pat, size, model)],265    cmd = (266        "echo '#define L_" + pat + "' >> $(OUTS) && " +267        "echo '#define SIZE " + size + "' >> $(OUTS) && " +268        "echo '#define MODEL " + model + "' >> $(OUTS) && " +269        "cat $(SRCS) >> $(OUTS)"270    ),271)] for (pat, size, model) in AARCH64_OUTLINE_ATOMICS]272 273# Source files for the AArch64 architecture-specific builtins.274filegroup(275    name = "builtins_aarch64_srcs",276    srcs = [277        "lib/builtins/cpu_model/aarch64.c",278        "lib/builtins/cpu_model/aarch64.h",279    ] + [280        AARCH64_OUTLINE_ATOMICS_FMT.format(pat, size, model)281        for (pat, size, model) in AARCH64_OUTLINE_ATOMICS282    ] + glob(283        [284            "lib/builtins/cpu_model/AArch64*.inc",285            "lib/builtins/cpu_model/aarch64/**/*.inc",286            "lib/builtins/aarch64/*.S",287            "lib/builtins/aarch64/*.c",288            "lib/builtins/aarch64/*.cpp",289        ],290        allow_empty = True,291        exclude = [292            # This file isn't intended to directly compile, and instead is used293            # above to generate a collection of outline atomic helpers.294            "lib/builtins/aarch64/lse.S",295            # These files are provided by SME-specific file groups above.296            "lib/builtins/aarch64/*sme*",297        ],298    ),299)300 301BUILTINS_ARM_VFP_SRCS_PATTERNS = [302    "lib/builtins/arm/*vfp*.S",303    "lib/builtins/arm/*vfp*.c",304    "lib/builtins/arm/*vfp*.cpp",305]306 307# Source files for the ARM VFP-specific builtins.308filegroup(309    name = "builtins_arm_vfp_srcs",310    srcs = glob(311        BUILTINS_ARM_VFP_SRCS_PATTERNS,312        allow_empty = True,313    ),314)315 316# Source files for the ARM architecture-specific builtins.317filegroup(318    name = "builtins_arm_srcs",319    srcs = glob(320        [321            "lib/builtins/arm/*.S",322            "lib/builtins/arm/*.c",323            "lib/builtins/arm/*.cpp",324        ],325        allow_empty = True,326        exclude = BUILTINS_ARM_VFP_SRCS_PATTERNS,327    ),328)329 330# Source files for the PPC architecture-specific builtins.331filegroup(332    name = "builtins_ppc_srcs",333    srcs = glob(334        [335            "lib/builtins/ppc/*.S",336            "lib/builtins/ppc/*.c",337            "lib/builtins/ppc/*.cpp",338        ],339        allow_empty = True,340    ),341)342 343# Source files for the RISC-V architecture-specific builtins.344filegroup(345    name = "builtins_riscv_srcs",346    srcs = glob(347        [348            "lib/builtins/riscv/*.S",349            "lib/builtins/riscv/*.c",350            "lib/builtins/riscv/*.cpp",351        ],352        allow_empty = True,353    ),354)355 356# Source files for the x86 architecture specific builtins (both 32-bit and357# 64-bit).358filegroup(359    name = "builtins_x86_arch_srcs",360    srcs = [361        "lib/builtins/cpu_model/x86.c",362        "lib/builtins/i386/fp_mode.c",363    ],364)365 366# Source files for the x86-64 architecture specific builtins.367filegroup(368    name = "builtins_x86_64_srcs",369    srcs = glob(370        [371            "lib/builtins/x86_64/*.S",372            "lib/builtins/x86_64/*.c",373            "lib/builtins/x86_64/*.cpp",374        ],375        allow_empty = True,376    ),377)378 379# Source files for the 32-bit-specific x86 architecture specific builtins.380filegroup(381    name = "builtins_i386_srcs",382    srcs = glob(383        [384            "lib/builtins/i386/*.S",385            "lib/builtins/i386/*.c",386            "lib/builtins/i386/*.cpp",387        ],388        allow_empty = True,389        exclude = [390            # This file is used for both i386 and x86_64 and so included in the391            # broader x86 sources.392            "lib/builtins/i386/fp_mode.c",393        ],394    ),395)396 397# Source files for portable components of the compiler builtins library.398filegroup(399    name = "builtins_generic_srcs",400    srcs = ["lib/builtins/cpu_model/cpu_model.h"] + glob(401        [402            "lib/builtins/*.c",403            "lib/builtins/*.cpp",404            "lib/builtins/*.h",405            "lib/builtins/*.inc",406        ],407        allow_empty = True,408        exclude = (409            BUILTINS_CRTBEGIN_SRCS +410            BUILTINS_CRTEND_SRCS +411            BUILTINS_TF_EXCLUDES +412            BUILTINS_TF_SRCS_PATTERNS +413            BUILTNS_ATOMICS_SRCS +414            BUILTINS_MACOS_ATOMIC_SRCS_PATTERNS415        ),416    ),417)418