aboutsummaryrefslogtreecommitdiff
path: root/third_party/llvm_builtins/BUILD.gn
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/llvm_builtins/BUILD.gn')
-rw-r--r--third_party/llvm_builtins/BUILD.gn260
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."
+ }
+}