diff --git a/libs/libbuiltin/Makefile b/libs/libbuiltin/Makefile index d003471bc4e2f..bbc92215f43f8 100644 --- a/libs/libbuiltin/Makefile +++ b/libs/libbuiltin/Makefile @@ -20,16 +20,16 @@ include $(TOPDIR)/Make.defs -ifeq ($(CONFIG_BUILTIN_COMPILER_RT),y) -include compiler-rt/Make.defs -endif - BIN ?= libbuiltin$(LIBEXT) BINDIR ?= bin KBIN = libkbuiltin$(LIBEXT) KBINDIR = kbin +ifeq ($(CONFIG_BUILTIN_COMPILER_RT),y) +include compiler-rt/Make.defs +endif + AOBJS = $(addprefix $(BINDIR)$(DELIM), $(ASRCS:.S=$(OBJEXT))) COBJS = $(addprefix $(BINDIR)$(DELIM), $(CSRCS:.c=$(OBJEXT))) CXXOBJS = $(addprefix $(BINDIR)$(DELIM), $(CXXSRCS:.cxx=$(OBJEXT))) @@ -79,7 +79,7 @@ clean: $(Q) $(MAKE) -C bin clean $(Q) $(MAKE) -C kbin clean -distclean: clean +distclean:: clean $(Q) $(MAKE) -C bin distclean $(Q) $(MAKE) -C kbin distclean $(call DELFILE, .depend) diff --git a/libs/libbuiltin/compiler-rt/Make.defs b/libs/libbuiltin/compiler-rt/Make.defs index bce8321c266a9..3fa73d7c5b487 100644 --- a/libs/libbuiltin/compiler-rt/Make.defs +++ b/libs/libbuiltin/compiler-rt/Make.defs @@ -24,6 +24,16 @@ LIBBUILTIN += compiler-rt COMPILER_RT_VERSION=$(CONFIG_COMPILER_RT_VERSION) +ifeq ($(CONFIG_ARCH_ARM),y) + ARCH = arm +else ifeq ($(CONFIG_ARCH_RISCV),y) + ARCH = riscv +else ifeq ($(CONFIG_ARCH_X86_64),y) + ARCH = x86_64 +else ifeq ($(CONFIG_ARCH_ARM64),y) + ARCH = aarch64 +endif + ifeq ($(wildcard compiler-rt/compiler-rt/lib),) compiler-rt-$(COMPILER_RT_VERSION).src.tar.xz: $(call DOWNLOAD,https://github.com/llvm/llvm-project/releases/download/llvmorg-$(COMPILER_RT_VERSION),$@) @@ -34,162 +44,50 @@ compiler-rt/compiler-rt: compiler-rt-$(COMPILER_RT_VERSION).src.tar.xz $(call DELDIR, $<) compiler-rt: compiler-rt/compiler-rt + $(Q) mkdir $(BINDIR)/compiler-rt \ + $(BINDIR)/compiler-rt/compiler-rt \ + $(BINDIR)/compiler-rt/compiler-rt/lib \ + $(BINDIR)/compiler-rt/compiler-rt/lib/builtins \ + $(BINDIR)/compiler-rt/compiler-rt/lib/builtins/$(ARCH) \ + $(BINDIR)/compiler-rt/compiler-rt/lib/profile + endif +distclean:: + $(call DELDIR, $(BINDIR)/compiler-rt) + FLAGS += ${INCDIR_PREFIX}$(CURDIR)/compiler-rt/compiler-rt/include FLAGS += ${INCDIR_PREFIX}$(CURDIR)/compiler-rt/compiler-rt/lib/builtins +FLAGS += ${INCDIR_PREFIX}$(CURDIR)/compiler-rt/compiler-rt/lib/builtins/${ARCH} FLAGS += -Wno-shift-count-negative -Wno-constant-conversion -Wshift-count-overflow FLAGS += -Wno-undef -Wno-incompatible-pointer-types -Wno-visibility -Wno-macro-redefined ################# Builtin Library ################# -# Files related to arithmetic operations -CSRCS += absvdi2.c absvsi2.c absvti2.c adddf3.c addtf3.c addvdi3.c addvsi3.c addvti3.c \ - muldc3.c muldf3.c mulodi4.c mulosi4.c muloti4.c mulsc3.c mulsf3.c multc3.c multf3.c \ - multi3.c mulvdi3.c mulvsi3.c mulvti3.c mulxc3.c negdf2.c negdi2.c negsf2.c negti2.c \ - negvdi2.c negvsi2.c negvti2.c subdf3.c subsf3.c subtf3.c subvdi3.c subvsi3.c subvti3.c - -# Floating point processing related files -CSRCS += floatdidf.c floatdisf.c floatditf.c floatdixf.c floatsidf.c floatsisf.c floatsitf.c \ - floattidf.c floattisf.c floattitf.c floattixf.c floatunditf.c \ - floatunsidf.c floatunsisf.c floatunsitf.c floatuntidf.c floatuntisf.c \ - floatuntitf.c floatuntixf.c - -# Convert and expand related files -CSRCS += fixtfdi.c fixtfsi.c fixtfti.c fixunsdfdi.c fixunsdfsi.c fixunsdfti.c fixunssfdi.c \ - fixunssfsi.c fixunssfti.c fixunstfdi.c fixunstfsi.c fixunstfti.c fixunsxfdi.c fixunsxfsi.c \ - fixunsxfti.c fixxfdi.c fixxfti.c extenddftf2.c extendhfsf2.c extendhftf2.c extendsfdf2.c \ - extendsftf2.c truncdfhf2.c truncdfsf2.c truncsfhf2.c \ - trunctfdf2.c trunctfhf2.c trunctfsf2.c - -ifeq ($(CONFIG_COMPILER_RT_HAS_BFLOAT16),y) - CSRCS += truncdfbf2.c truncsfbf2.c -endif - -# Bit manipulation related files -CSRCS += ashldi3.c ashlti3.c ashrdi3.c ashrti3.c \ - clzti2.c ctzdi2.c ctzsi2.c ctzti2.c lshrdi3.c lshrti3.c popcountdi2.c popcountsi2.c \ - popcountti2.c paritydi2.c paritysi2.c parityti2.c - -# Files related to division and modulo operations -CSRCS += divdc3.c divdf3.c divdi3.c divmoddi4.c divmodti4.c divsc3.c divsf3.c \ - divtc3.c divtf3.c divti3.c divxc3.c moddi3.c modti3.c udivdi3.c udivmoddi4.c \ - udivmodti4.c udivti3.c umoddi3.c umodti3.c - -# Files related to atomic operations -CSRCS += atomic.c atomic_flag_clear.c atomic_flag_clear_explicit.c atomic_flag_test_and_set.c \ - atomic_flag_test_and_set_explicit.c atomic_signal_fence.c atomic_thread_fence.c - -# Other function related files -CSRCS += apple_versioning.c clear_cache.c cmpdi2.c cmpti2.c comparedf2.c comparetf2.c \ - cpu_model.c emutls.c enable_execute_stack.c eprintf.c fp_mode.c gcc_personality_v0.c \ - int_util.c os_version_check.c trampoline_setup.c ucmpdi2.c ucmpti2.c powidf2.c powisf2.c \ - powitf2.c powixf2.c +CSRCS += $(wildcard compiler-rt/compiler-rt/lib/builtins/*.c) +ASRCS += $(wildcard compiler-rt/compiler-rt/lib/builtins/$(ARCH)/*.S) +CSRCS += $(wildcard compiler-rt/compiler-rt/lib/builtins/$(ARCH)/*.c) -# Bit manipulation related arch -ifeq ($(CONFIG_ARCH_ARM),y) - ARCH = arm - # Arithmetic Operations - ASRCS += adddf3vfp.S addsf3.S addsf3vfp.S divmodsi4.S divsi3.S modsi3.S subdf3vfp.S subsf3vfp.S \ - muldf3vfp.S mulsf3vfp.S negdf2vfp.S negsf2vfp.S - - # Floating-Point Operations - ASRCS += comparesf2.S eqdf2vfp.S eqsf2vfp.S extendsfdf2vfp.S fixdfsivfp.S fixsfsivfp.S \ - fixunsdfsivfp.S fixunssfsivfp.S floatsidfvfp.S floatsisfvfp.S floatunssidfvfp.S \ - floatunssisfvfp.S gedf2vfp.S gesf2vfp.S gtdf2vfp.S gtsf2vfp.S ledf2vfp.S lesf2vfp.S \ - ltdf2vfp.S ltsf2vfp.S nedf2vfp.S nesf2vfp.S truncdfsf2vfp.S unorddf2vfp.S unordsf2vfp.S - - # Synchronization Operations - ASRCS += sync_fetch_and_add_4.S sync_fetch_and_add_8.S sync_fetch_and_and_4.S sync_fetch_and_and_8.S \ - sync_fetch_and_max_4.S sync_fetch_and_max_8.S sync_fetch_and_min_4.S sync_fetch_and_min_8.S \ - sync_fetch_and_nand_4.S sync_fetch_and_nand_8.S sync_fetch_and_or_4.S sync_fetch_and_or_8.S \ - sync_fetch_and_sub_4.S sync_fetch_and_sub_8.S sync_fetch_and_umax_4.S sync_fetch_and_umax_8.S \ - sync_fetch_and_umin_4.S sync_fetch_and_umin_8.S sync_fetch_and_xor_4.S sync_fetch_and_xor_8.S \ - sync_synchronize.S - # Memory Operations - ASRCS += aeabi_memcmp.S aeabi_memcpy.S aeabi_memmove.S aeabi_memset.S restore_vfp_d8_d15_regs.S \ - save_vfp_d8_d15_regs.S - - # Division and Modulus Operations - ASRCS += aeabi_idivmod.S aeabi_ldivmod.S aeabi_uidivmod.S aeabi_uldivmod.S udivmodsi4.S udivsi3.S umodsi3.S - - # Bitwise and Other Operations - ASRCS += bswapdi2.S bswapsi2.S chkstk.S clzdi2.S clzsi2.S - - # Branch and Control Flow - ASRCS += switch16.S switch32.S switch8.S switchu8.S - - CSRCS += aeabi_cdcmpeq_check_nan.c aeabi_cfcmpeq_check_nan.c aeabi_div0.c aeabi_drsub.c aeabi_frsub.c -else - CSRCS += addsf3.c divsi3.c modsi3.c - CSRCS += bswapdi2.c bswapsi2.c clzdi2.c clzsi2.c - CSRCS += divmodsi4.c udivmodsi4.c udivsi3.c umodsi3.c - CSRCS += comparesf2.c +ifeq ($(CONFIG_COMPILER_RT_HAS_BFLOAT16),) + BFLOAT16_SRCS := compiler-rt/compiler-rt/lib/builtins/truncdfbf2.c + BFLOAT16_SRCS += compiler-rt/compiler-rt/lib/builtins/truncsfbf2.c + CSRCS := $(filter-out $(BFLOAT16_SRCS), $(CSRCS)) endif -ifeq ($(CONFIG_ARCH_ARM64),y) - ARCH = aarch64 - ASRCS += chkstk.S lse.S - CSRCS += fp_mode.c -endif - -ifeq ($(CONFIG_ARCH_RISCV),y) - ARCH = riscv - ASRCS += muldi3.S mulsi3.S restore.S save.S - CSRCS += fp_mode.c -else - CSRCS += muldi3.c -endif - -ifeq ($(CONFIG_ARCH_X86_64),y) - ARCH = x86_64 - ASRCS += chkstk2.S chkstk.S floatundidf.S floatundisf.S floatundixf.S - CSRCS += floatdidf.c floatdisf.c floatdixf.c -else - CSRCS += floatundidf.c floatundisf.c floatundixf.c -endif +################# Profile Library ################# ifeq ($(CONFIG_COMPILER_RT_PROFILE),y) - -# Include paths FLAGS += ${INCDIR_PREFIX}$(CURDIR)/compiler-rt/compiler-rt/lib/profile - -# Suppress specific warnings FLAGS += -Wno-cleardeprecated-pragma -Wno-deprecated-pragma -Wno-incompatible-pointer-types FLAGS += -Wno-shadow -Wno-strict-prototypes -Wno-undef -Wno-unknown-warning-option - -# Define compiler-specific macros FLAGS += -DCOMPILER_RT_HAS_UNAME - -# Disable code coverage analysis for the library FLAGS += -fno-profile-generate -# Profile support source files -CSRCS += GCDAProfiling.c InstrProfilingBuffer.c InstrProfiling.c InstrProfilingFile.c InstrProfilingInternal.c -CSRCS += InstrProfilingMerge.c InstrProfilingMergeFile.c InstrProfilingNameVar.c -CSRCS += InstrProfilingUtil.c InstrProfilingValue.c InstrProfilingVersionVar.c InstrProfilingWriter.c -CPPSRCS += InstrProfilingRuntime.cpp - -# Profile platform support -CSRCS += InstrProfilingPlatform.c - -# Dependency and search paths -DEPPATH += --dep-path compiler-rt/compiler-rt/lib/profile -VPATH += :compiler-rt/compiler-rt/lib/profile - +CSRCS += $(wildcard compiler-rt/compiler-rt/lib/profile/*.c) +CPPSRCS += $(wildcard compiler-rt/compiler-rt/lib/profile/*.cpp) +CSRCS += compiler-rt/InstrProfilingPlatform.c endif -FLAGS += ${INCDIR_PREFIX}$(CURDIR)/compiler-rt/compiler-rt/lib/builtins/${ARCH} - AFLAGS += $(FLAGS) CFLAGS += $(FLAGS) CXXFLAGS += $(FLAGS) - -DEPPATH += --dep-path compiler-rt/compiler-rt/lib/builtins/${ARCH} -VPATH += :compiler-rt/compiler-rt/lib/builtins/${ARCH} - -DEPPATH += --dep-path compiler-rt/compiler-rt/lib/builtins -VPATH += :compiler-rt/compiler-rt/lib/builtins - -DEPPATH += --dep-path compiler-rt -VPATH += :compiler-rt