Advertisement
Guest User

Untitled

a guest
Sep 18th, 2017
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.50 KB | None | 0 0
  1. #
  2. # Copyright (C) 2012 The Android Open Source Project
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. #
  16. #
  17.  
  18. LOCAL_PATH := $(call my-dir)
  19.  
  20. # The following list contains platform-independent functionalities.
  21. #
  22. # Skip apple_versioning.c since it is unused.
  23. # Skip atomic.c since it needs to be built separately according to the docs.
  24. # Skip clear_cache.c since it redefines a system function on Android.
  25. # Skip gcc_personality_v0.c since it depends on libunwind.
  26. libcompiler_rt_common_SRC_FILES := \
  27. lib/absvdi2.c \
  28. lib/absvsi2.c \
  29. lib/absvti2.c \
  30. lib/adddf3.c \
  31. lib/addsf3.c \
  32. lib/addvdi3.c \
  33. lib/addvsi3.c \
  34. lib/addvti3.c \
  35. lib/ashldi3.c \
  36. lib/ashlti3.c \
  37. lib/ashrdi3.c \
  38. lib/ashrti3.c \
  39. lib/clzdi2.c \
  40. lib/clzsi2.c \
  41. lib/clzti2.c \
  42. lib/cmpdi2.c \
  43. lib/cmpti2.c \
  44. lib/comparedf2.c \
  45. lib/comparesf2.c \
  46. lib/ctzdi2.c \
  47. lib/ctzsi2.c \
  48. lib/ctzti2.c \
  49. lib/divdc3.c \
  50. lib/divdf3.c \
  51. lib/divdi3.c \
  52. lib/divmoddi4.c \
  53. lib/divmodsi4.c \
  54. lib/divsc3.c \
  55. lib/divsf3.c \
  56. lib/divsi3.c \
  57. lib/divti3.c \
  58. lib/divxc3.c \
  59. lib/enable_execute_stack.c \
  60. lib/eprintf.c \
  61. lib/extendsfdf2.c \
  62. lib/ffsdi2.c \
  63. lib/ffsti2.c \
  64. lib/fixdfdi.c \
  65. lib/fixdfsi.c \
  66. lib/fixdfti.c \
  67. lib/fixsfdi.c \
  68. lib/fixsfsi.c \
  69. lib/fixsfti.c \
  70. lib/fixunsdfdi.c \
  71. lib/fixunsdfsi.c \
  72. lib/fixunsdfti.c \
  73. lib/fixunssfdi.c \
  74. lib/fixunssfsi.c \
  75. lib/fixunssfti.c \
  76. lib/fixunsxfdi.c \
  77. lib/fixunsxfsi.c \
  78. lib/fixunsxfti.c \
  79. lib/fixxfdi.c \
  80. lib/fixxfti.c \
  81. lib/floatdidf.c \
  82. lib/floatdisf.c \
  83. lib/floatdixf.c \
  84. lib/floatsidf.c \
  85. lib/floatsisf.c \
  86. lib/floattidf.c \
  87. lib/floattisf.c \
  88. lib/floattixf.c \
  89. lib/floatundidf.c \
  90. lib/floatundisf.c \
  91. lib/floatundixf.c \
  92. lib/floatunsidf.c \
  93. lib/floatunsisf.c \
  94. lib/floatuntidf.c \
  95. lib/floatuntisf.c \
  96. lib/floatuntixf.c \
  97. lib/int_util.c \
  98. lib/lshrdi3.c \
  99. lib/lshrti3.c \
  100. lib/moddi3.c \
  101. lib/modsi3.c \
  102. lib/modti3.c \
  103. lib/muldc3.c \
  104. lib/muldf3.c \
  105. lib/muldi3.c \
  106. lib/mulodi4.c \
  107. lib/mulosi4.c \
  108. lib/muloti4.c \
  109. lib/mulsc3.c \
  110. lib/mulsf3.c \
  111. lib/multi3.c \
  112. lib/mulvdi3.c \
  113. lib/mulvsi3.c \
  114. lib/mulvti3.c \
  115. lib/mulxc3.c \
  116. lib/negdf2.c \
  117. lib/negdi2.c \
  118. lib/negsf2.c \
  119. lib/negti2.c \
  120. lib/negvdi2.c \
  121. lib/negvsi2.c \
  122. lib/negvti2.c \
  123. lib/paritydi2.c \
  124. lib/paritysi2.c \
  125. lib/parityti2.c \
  126. lib/popcountdi2.c \
  127. lib/popcountsi2.c \
  128. lib/popcountti2.c \
  129. lib/powidf2.c \
  130. lib/powisf2.c \
  131. lib/powitf2.c \
  132. lib/powixf2.c \
  133. lib/subdf3.c \
  134. lib/subsf3.c \
  135. lib/subvdi3.c \
  136. lib/subvsi3.c \
  137. lib/subvti3.c \
  138. lib/trampoline_setup.c \
  139. lib/truncdfsf2.c \
  140. lib/ucmpdi2.c \
  141. lib/ucmpti2.c \
  142. lib/udivdi3.c \
  143. lib/udivmoddi4.c \
  144. lib/udivmodsi4.c \
  145. lib/udivmodti4.c \
  146. lib/udivsi3.c \
  147. lib/udivti3.c \
  148. lib/umoddi3.c \
  149. lib/umodsi3.c \
  150. lib/umodti3.c
  151.  
  152. # ARM-specific runtimes
  153. libcompiler_rt_arm_SRC_FILES := \
  154. lib/arm/aeabi_dcmp.S \
  155. lib/arm/aeabi_fcmp.S \
  156. lib/arm/aeabi_idivmod.S \
  157. lib/arm/aeabi_ldivmod.S \
  158. lib/arm/aeabi_memcmp.S \
  159. lib/arm/aeabi_memcpy.S \
  160. lib/arm/aeabi_memmove.S \
  161. lib/arm/aeabi_memset.S \
  162. lib/arm/aeabi_uidivmod.S \
  163. lib/arm/aeabi_uldivmod.S \
  164. lib/arm/comparesf2.S \
  165. lib/arm/divmodsi4.S \
  166. lib/arm/divsi3.S \
  167. lib/arm/modsi3.S \
  168. lib/arm/udivmodsi4.S \
  169. lib/arm/udivsi3.S \
  170. lib/arm/umodsi3.S
  171.  
  172. # MIPS-specific runtimes
  173. libcompiler_rt_mips_SRC_FILES := # nothing to add
  174.  
  175. # X86-specific runtimes
  176. #
  177. # We don't support x86-64 right now
  178. libcompiler_rt_x86_SRC_FILES := \
  179. lib/i386/ashldi3.S \
  180. lib/i386/ashrdi3.S \
  181. lib/i386/divdi3.S \
  182. lib/i386/floatdidf.S \
  183. lib/i386/floatdisf.S \
  184. lib/i386/floatdixf.S \
  185. lib/i386/floatundidf.S \
  186. lib/i386/floatundisf.S \
  187. lib/i386/floatundixf.S \
  188. lib/i386/lshrdi3.S \
  189. lib/i386/moddi3.S \
  190. lib/i386/muldi3.S \
  191. lib/i386/udivdi3.S \
  192. lib/i386/umoddi3.S
  193.  
  194. # The following list contains functions that are not available in libgcc.a, so
  195. # we potentially need them when using a Clang-built component (e.g., -ftrapv
  196. # with 64-bit integer multiplies. See http://llvm.org/bugs/show_bug.cgi?id=14469.)
  197. libcompiler_rt_extras_SRC_FILES := \
  198. lib/mulodi4.c
  199.  
  200. # $(1): arch
  201. define get-libcompiler-rt-source-files
  202. $(if $(findstring $(1),arm),$(call get-libcompiler-rt-arm-source-files),
  203. $(if $(findstring $(1),mips),$(call get-libcompiler-rt-mips-source-files),
  204. $(if $(findstring $(1),x86),$(call get-libcompiler-rt-x86-source-files),
  205. $(error Unsupported ARCH $(1)))))
  206. endef
  207.  
  208. # $(1): source list
  209. # $(2): arch
  210. #
  211. # If lib/<arch>/X.S is included in the source list, we should filter out lib/X.c
  212. # in the result source list (i.e., use the one optimized for the arch.) Otherwise
  213. # there'll be multiple definitions for one symbol.
  214. define filter-libcompiler-rt-common-source-files
  215. $(filter-out $(patsubst lib/$(strip $(2))/%.S,lib/%.c,$(filter %.S,$(1))),$(1))
  216. endef
  217.  
  218. define get-libcompiler-rt-arm-common-source-files
  219. $(call filter-libcompiler-rt-common-source-files,
  220. $(libcompiler_rt_common_SRC_FILES) \
  221. $(libcompiler_rt_arm_SRC_FILES), arm)
  222. endef
  223.  
  224. # $(1): common runtime list
  225. #
  226. # Add ARM runtimes implemented in VFP
  227. define add-libcompiler-rt-arm-vfp-source-files
  228. $(filter-out $(addprefix lib/,adddf3.c addsf3.c comparedf2.c comparesf2.c \
  229. arm/comparesf2.S divdf3.c divsf3.c extendsfdf2.c \
  230. fixdfsi.c fixsfsi.c fixunsdfsi.c fixunssfsi.c \
  231. floatsidf.c floatsisf.c floatunsidf.c floatunsisf.c \
  232. muldf3.c mulsf3.c negdf2.c negsf2.c subdf3.c \
  233. subsf3.c truncdfsf2.c),$(1)) lib/arm/vfp_alias.S
  234. endef
  235.  
  236. define get-libcompiler-rt-arm-source-files
  237. $(if $(findstring $(ARCH_ARM_HAVE_VFP),true),
  238. $(call add-libcompiler-rt-arm-vfp-source-files,
  239. $(call get-libcompiler-rt-arm-common-source-files)),
  240. $(call get-libcompiler-rt-arm-common-source-files))
  241. endef
  242.  
  243. define get-libcompiler-rt-mips-source-files
  244. $(call filter-libcompiler-rt-common-source-files,
  245. $(libcompiler_rt_common_SRC_FILES) \
  246. $(libcompiler_rt_mips_SRC_FILES),mips)
  247. endef
  248.  
  249. define get-libcompiler-rt-x86-source-files
  250. $(call filter-libcompiler-rt-common-source-files,
  251. $(libcompiler_rt_common_SRC_FILES) \
  252. $(libcompiler_rt_x86_SRC_FILES),i386)
  253. endef
  254.  
  255. # $(1): target or host
  256. # $(2): static or shared
  257. define build-libcompiler-rt
  258. ifneq ($(1),target)
  259. ifneq ($(1),host)
  260. $$(error expected target or host for argument 1, received $(1))
  261. endif
  262. endif
  263. ifneq ($(2),static)
  264. ifneq ($(2),shared)
  265. $$(error expected static or shared for argument 2, received $(2))
  266. endif
  267. endif
  268.  
  269. target_or_host := $(1)
  270. static_or_shared := $(2)
  271.  
  272. arch :=
  273. ifeq ($$(target_or_host),target)
  274. arch := $(TARGET_ARCH)
  275. else
  276. arch := $(HOST_ARCH)
  277. endif
  278.  
  279. include $(CLEAR_VARS)
  280.  
  281. LOCAL_MODULE := libcompiler_rt
  282. LOCAL_MODULE_TAGS := optional
  283.  
  284. ifeq ($$(static_or_shared),static)
  285. LOCAL_MODULE_CLASS := STATIC_LIBRARIES
  286. else
  287. LOCAL_MODULE_CLASS := SHARED_LIBRARIES
  288. endif
  289.  
  290. # TODO: Fix -integrated-as
  291. # LOCAL_CFLAGS := -integrated-as
  292.  
  293. # Add -D__ARM_EABI__ for ARM
  294. ifeq ($$(arch),arm)
  295. LOCAL_CFLAGS += -D__ARM_EABI__
  296. endif
  297.  
  298. # Use MC assembler to compile assembly
  299. LOCAL_ASFLAGS += -integrated-as
  300.  
  301. # Use Clang to compile libcompiler_rt
  302. LOCAL_CLANG := true
  303. LOCAL_SRC_FILES := $$(call get-libcompiler-rt-source-files,$$(arch))
  304. LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
  305.  
  306. ifeq ($$(target_or_host),target)
  307. ifeq ($$(static_or_shared),static)
  308. include $(BUILD_STATIC_LIBRARY)
  309. else
  310. include $(BUILD_SHARED_LIBRARY)
  311. endif
  312. else
  313. LOCAL_IS_HOST_MODULE := true
  314. ifeq ($$(static_or_shared),static)
  315. include $(BUILD_HOST_STATIC_LIBRARY)
  316. else
  317. include $(BUILD_HOST_SHARED_LIBRARY)
  318. endif
  319. endif
  320. endef
  321.  
  322. #=====================================================================
  323. # Device Static Library: libcompiler_rt-extras
  324. #=====================================================================
  325.  
  326. include $(CLEAR_VARS)
  327.  
  328. LOCAL_MODULE := libcompiler_rt-extras
  329. LOCAL_MODULE_TAGS := optional
  330. LOCAL_MODULE_CLASS := STATIC_LIBRARIES
  331. LOCAL_CLANG := true
  332. LOCAL_SRC_FILES := $(libcompiler_rt_extras_SRC_FILES)
  333. LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
  334.  
  335. include $(BUILD_STATIC_LIBRARY)
  336.  
  337. #=====================================================================
  338. # Device Static Library: libcompiler_rt
  339. #=====================================================================
  340. $(eval $(call build-libcompiler-rt,target,static))
  341.  
  342. #=====================================================================
  343. # Device Shared Library: libcompiler_rt
  344. #=====================================================================
  345. $(eval $(call build-libcompiler-rt,target,shared))
  346.  
  347. # Build ASan
  348. include $(LOCAL_PATH)/lib/asan/Android.mk
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement