diff options
Diffstat (limited to 'third_party/llvm_builtins/BUILD.gn')
-rw-r--r-- | third_party/llvm_builtins/BUILD.gn | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/third_party/llvm_builtins/BUILD.gn b/third_party/llvm_builtins/BUILD.gn new file mode 100644 index 000000000..d38f26ffe --- /dev/null +++ b/third_party/llvm_builtins/BUILD.gn @@ -0,0 +1,260 @@ +# Copyright 2023 The Pigweed Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +import("//build_overrides/pigweed.gni") + +import("$dir_pw_build/error.gni") +import("$dir_pw_build/target_types.gni") + +declare_args() { + # This should be set to the path of the llvm compiler-rt/builtins directory. + dir_pw_third_party_llvm_builtins = "" + + # Points to a pw_source_set that enumerates builtins specific to + # the current toolchain. + pw_third_party_llvm_builtins_TARGET_BUILTINS = "" +} + +config("no-warnings") { + cflags = [ + "-Wno-double-promotion", + "-Wno-undef", + "-Wno-unused-parameter", + "-Wno-strict-prototypes", + ] +} + +files = [ + "absvdi2.c", + "absvsi2.c", + "absvti2.c", + "adddf3.c", + "addsf3.c", + "addtf3.c", + "addvdi3.c", + "addvsi3.c", + "addvti3.c", + "ashldi3.c", + "ashlti3.c", + "ashrdi3.c", + "ashrti3.c", + "clzti2.c", + "cmpdi2.c", + "cmpti2.c", + "comparedf2.c", + "ctzdi2.c", + "ctzsi2.c", + "ctzti2.c", + "divdc3.c", + "divdf3.c", + "divdi3.c", + "divmoddi4.c", + "divsc3.c", + "divsf3.c", + "divtc3.c", + "divtf3.c", + "divti3.c", + "extendhfsf2.c", + "extendsfdf2.c", + "ffsdi2.c", + "ffssi2.c", + "ffsti2.c", + "fixdfdi.c", + "fixdfsi.c", + "fixdfti.c", + "fixsfdi.c", + "fixsfsi.c", + "fixsfti.c", + "fixunsdfdi.c", + "fixunsdfsi.c", + "fixunsdfti.c", + "fixunssfdi.c", + "fixunssfsi.c", + "fixunssfti.c", + "floatdidf.c", + "floatdisf.c", + "floatsidf.c", + "floatsisf.c", + "floattidf.c", + "floattisf.c", + "floatundidf.c", + "floatundisf.c", + "floatunsidf.c", + "floatunsisf.c", + "floatuntidf.c", + "floatuntisf.c", + "int_util.c", + "lshrdi3.c", + "lshrti3.c", + "moddi3.c", + "modti3.c", + "muldc3.c", + "muldf3.c", + "muldi3.c", + "mulodi4.c", + "mulosi4.c", + "muloti4.c", + "mulsc3.c", + "mulsf3.c", + "multf3.c", + "multi3.c", + "mulvdi3.c", + "mulvsi3.c", + "mulvti3.c", + "negdf2.c", + "negdi2.c", + "negsf2.c", + "negti2.c", + "negvdi2.c", + "negvsi2.c", + "negvti2.c", + "os_version_check.c", + "paritydi2.c", + "paritysi2.c", + "parityti2.c", + "popcountdi2.c", + "popcountsi2.c", + "popcountti2.c", + "powidf2.c", + "powisf2.c", + "powitf2.c", + "subdf3.c", + "subsf3.c", + "subtf3.c", + "subvdi3.c", + "subvsi3.c", + "subvti3.c", + "trampoline_setup.c", + "truncdfhf2.c", + "truncdfsf2.c", + "truncsfhf2.c", + "ucmpdi2.c", + "ucmpti2.c", + "udivdi3.c", + "udivmoddi4.c", + "udivmodti4.c", + "udivti3.c", + "umoddi3.c", + "umodti3.c", +] + +pw_source_set("arm_builtins") { + configs = [ ":no-warnings" ] + remove_configs = [ "//pw_build:extra_strict_warnings" ] + + sources = [] + + arm_files = [ + "arm/aeabi_cdcmp.S", + "arm/aeabi_cdcmpeq_check_nan.c", + "arm/aeabi_cfcmp.S", + "arm/aeabi_cfcmpeq_check_nan.c", + "arm/aeabi_dcmp.S", + "arm/aeabi_div0.c", + "arm/aeabi_drsub.c", + "arm/aeabi_fcmp.S", + "arm/aeabi_frsub.c", + "arm/aeabi_idivmod.S", + "arm/aeabi_ldivmod.S", + "arm/aeabi_memcmp.S", + "arm/aeabi_memcpy.S", + "arm/aeabi_memmove.S", + "arm/aeabi_memset.S", + "arm/aeabi_uidivmod.S", + "arm/aeabi_uldivmod.S", + "arm/bswapdi2.S", + "arm/bswapsi2.S", + "arm/clzdi2.S", + "arm/clzsi2.S", + "arm/comparesf2.S", + "arm/divmodsi4.S", + "arm/divsi3.S", + "arm/fp_mode.c", + "arm/modsi3.S", + "arm/switch16.S", + "arm/switch32.S", + "arm/switch8.S", + "arm/switchu8.S", + "arm/sync_fetch_and_add_4.S", + "arm/sync_fetch_and_add_8.S", + "arm/sync_fetch_and_and_4.S", + "arm/sync_fetch_and_and_8.S", + "arm/sync_fetch_and_max_4.S", + "arm/sync_fetch_and_max_8.S", + "arm/sync_fetch_and_min_4.S", + "arm/sync_fetch_and_min_8.S", + "arm/sync_fetch_and_nand_4.S", + "arm/sync_fetch_and_nand_8.S", + "arm/sync_fetch_and_or_4.S", + "arm/sync_fetch_and_or_8.S", + "arm/sync_fetch_and_sub_4.S", + "arm/sync_fetch_and_sub_8.S", + "arm/sync_fetch_and_umax_4.S", + "arm/sync_fetch_and_umax_8.S", + "arm/sync_fetch_and_umin_4.S", + "arm/sync_fetch_and_umin_8.S", + "arm/sync_fetch_and_xor_4.S", + "arm/sync_fetch_and_xor_8.S", + "arm/sync_synchronize.S", + "arm/udivmodsi4.S", + "arm/udivsi3.S", + "arm/umodsi3.S", + ] + + if (dir_pw_third_party_llvm_builtins != "") { + foreach(file, arm_files) { + sources += [ "$dir_pw_third_party_llvm_builtins/$file" ] + } + } else { + not_needed([ "arm_files" ]) + } +} + +# This list includes the cpu's for which their is a `:${current_cpu}_builtins` +# target. +_default_supported_cpus = [ "arm" ] +_current_cpu_is_known = _default_supported_cpus + [ current_cpu ] - + [ current_cpu ] != _default_supported_cpus + +pw_static_library("llvm_builtins") { + add_global_link_deps = false + + configs = [ ":no-warnings" ] + remove_configs = [ "//pw_build:extra_strict_warnings" ] + + sources = [] + + if (dir_pw_third_party_llvm_builtins != "") { + foreach(file, files) { + sources += [ "$dir_pw_third_party_llvm_builtins/$file" ] + } + } else { + not_needed([ "files" ]) + } + + if (pw_third_party_llvm_builtins_TARGET_BUILTINS != "") { + deps = [ pw_third_party_llvm_builtins_TARGET_BUILTINS ] + } else if (_current_cpu_is_known) { + deps = [ ":${current_cpu}_builtins" ] + } else { + deps = [ ":unknown_cpu" ] + } +} + +if (pw_third_party_llvm_builtins_TARGET_BUILTINS == "" && + !_current_cpu_is_known) { + pw_error("unknown_cpu") { + message = "Tried to build $dir_pw_third_party_llvm_builtins:llvm_builtins, but pw_third_party_llvm_builtins_TARGET_BUILTINS was not set and `current_cpu=\"$current_cpu\"` does not have well-known builtins set up." + } +} |