A_Clang.mk 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. ################################################################################
  2. # \file AppleClang.mk
  3. # \version 1.0
  4. #
  5. # \brief
  6. # Apple Clang toolchain configuration
  7. #
  8. ################################################################################
  9. # \copyright
  10. # Copyright 2018-2019 Cypress Semiconductor Corporation
  11. # SPDX-License-Identifier: Apache-2.0
  12. #
  13. # Licensed under the Apache License, Version 2.0 (the "License");
  14. # you may not use this file except in compliance with the License.
  15. # You may obtain a copy of the License at
  16. #
  17. # http://www.apache.org/licenses/LICENSE-2.0
  18. #
  19. # Unless required by applicable law or agreed to in writing, software
  20. # distributed under the License is distributed on an "AS IS" BASIS,
  21. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  22. # See the License for the specific language governing permissions and
  23. # limitations under the License.
  24. ################################################################################
  25. ifeq ($(WHICHFILE),true)
  26. $(info Processing $(lastword $(MAKEFILE_LIST)))
  27. endif
  28. #
  29. # The base path to the Clang cross compilation executables
  30. #
  31. ifeq ($(CY_COMPILER_PATH),)
  32. CY_CROSSPATH=$(CY_COMPILER_A_Clang_DIR)
  33. else
  34. CY_CROSSPATH=$(CY_COMPILER_PATH)
  35. endif
  36. #
  37. # Build tools
  38. #
  39. CC=clang
  40. CXX=$(CC)
  41. AS=$(CC)
  42. AR=libtool
  43. LD=ld
  44. #
  45. # DEBUG/NDEBUG selection
  46. #
  47. ifeq ($(CONFIG),Debug)
  48. CY_TOOLCHAIN_DEBUG_FLAG=-DDEBUG
  49. CY_TOOLCHAIN_OPTIMIZATION=-Og
  50. else ifeq ($(CONFIG),Release)
  51. CY_TOOLCHAIN_DEBUG_FLAG=-DNDEBUG
  52. CY_TOOLCHAIN_OPTIMIZATION=-Os
  53. else
  54. CY_TOOLCHAIN_DEBUG_FLAG=
  55. CY_TOOLCHAIN_OPTIMIZATION=
  56. endif
  57. #
  58. # Flags common to compile and link
  59. #
  60. CY_TOOLCHAIN_COMMON_FLAGS=\
  61. -mthumb\
  62. -ffunction-sections\
  63. -fdata-sections\
  64. -g\
  65. -Wall
  66. #
  67. # CPU core specifics
  68. #
  69. ifeq ($(CORE),CM0P)
  70. CY_TOOLCHAIN_FLAGS_CORE=\
  71. -arch armv6m\
  72. -mcpu=cortex-m0plus\
  73. --target=arm-none-macho
  74. CY_TOOLCHAIN_LDFLAGS_CORE=\
  75. -arch armv6m\
  76. -lclang_rt.soft_static
  77. CY_TOOLCHAIN_VFP_FLAGS=
  78. else
  79. ifeq ($(VFP_SELECT),hardfp)
  80. CY_TOOLCHAIN_LD_VFP_FLAGS=-lclang_rt.hard_static
  81. CY_TOOLCHAIN_VFP_FLAGS=-mfloat-abi=hard -mfpu=fpv4-sp-d16
  82. else
  83. CY_TOOLCHAIN_LD_VFP_FLAGS=-lclang_rt.soft_static
  84. CY_TOOLCHAIN_VFP_FLAGS=-mfloat-abi=softfp -mfpu=fpv4-sp-d16
  85. endif # ($(VFP_SELECT),hardfp)
  86. CY_TOOLCHAIN_FLAGS_CORE=\
  87. -arch armv7em\
  88. -mcpu=cortex-m4\
  89. --target=armv7m-none-macho
  90. CY_TOOLCHAIN_LDFLAGS_CORE=\
  91. -arch armv7em\
  92. $(CY_TOOLCHAIN_LD_VFP_FLAGS)
  93. endif # ($(CORE),CM0P)
  94. #
  95. # Command line flags for c-files
  96. #
  97. CY_TOOLCHAIN_CFLAGS=\
  98. -c\
  99. $(CY_TOOLCHAIN_FLAGS_CORE)\
  100. $(CY_TOOLCHAIN_OPTIMIZATION)\
  101. $(CY_TOOLCHAIN_VFP_FLAGS)\
  102. $(CY_TOOLCHAIN_COMMON_FLAGS)\
  103. --no-standard-includes\
  104. -fasm-blocks\
  105. -integrated-as\
  106. -Wall\
  107. -Wno-int-to-pointer-cast\
  108. -static\
  109. -fno-stack-protector\
  110. -fno-common\
  111. -ffreestanding\
  112. -mlong-calls
  113. #
  114. # Command line flags for cpp-files
  115. #
  116. CY_TOOLCHAIN_CXXFLAGS=$(CY_TOOLCHAIN_CFLAGS)
  117. #
  118. # Command line flags for s-files
  119. #
  120. CY_TOOLCHAIN_ASFLAGS=\
  121. -c\
  122. $(CY_TOOLCHAIN_FLAGS_CORE)\
  123. $(CY_TOOLCHAIN_COMMON_FLAGS)\
  124. -fasm-blocks\
  125. -integrated-as\
  126. -Wall\
  127. -Wno-int-to-pointer-cast\
  128. -static\
  129. -fno-stack-protector\
  130. -fno-common\
  131. -ffreestanding\
  132. -mlong-calls
  133. #
  134. # Command line flags for linking
  135. #
  136. CY_TOOLCHAIN_LDFLAGS=\
  137. $(CY_TOOLCHAIN_LDFLAGS_CORE)\
  138. $(CY_TOOLCHAIN_LD_VFP_FLAGS)\
  139. -static\
  140. -segalign 4\
  141. -e Reset_Handler\
  142. -merge_zero_fill_sections\
  143. -pagezero_size 0\
  144. -ios_version_min 4.3\
  145. -preload\
  146. -v\
  147. -read_only_relocs suppress\
  148. -dead_strip\
  149. -dead_strip_dylibs\
  150. -no_branch_islands\
  151. -no_zero_fill_sections\
  152. -L$(CY_CROSSPATH)/lib/macho_embedded
  153. #
  154. # Command line flags for archiving
  155. #
  156. CY_TOOLCHAIN_ARFLAGS=rvs
  157. #
  158. # Toolchain-specific suffixes
  159. #
  160. CY_TOOLCHAIN_SUFFIX_S=S
  161. CY_TOOLCHAIN_SUFFIX_s=s
  162. CY_TOOLCHAIN_SUFFIX_C=c
  163. CY_TOOLCHAIN_SUFFIX_H=h
  164. CY_TOOLCHAIN_SUFFIX_CPP=cpp
  165. CY_TOOLCHAIN_SUFFIX_HPP=hpp
  166. CY_TOOLCHAIN_SUFFIX_O=o
  167. CY_TOOLCHAIN_SUFFIX_A=a
  168. CY_TOOLCHAIN_SUFFIX_D=d
  169. CY_TOOLCHAIN_SUFFIX_LS=mk
  170. CY_TOOLCHAIN_SUFFIX_MAP=map
  171. CY_TOOLCHAIN_SUFFIX_TARGET=mach_o
  172. CY_TOOLCHAIN_SUFFIX_ARCHIVE=a
  173. #
  174. # Toolchain specific flags
  175. #
  176. CY_TOOLCHAIN_OUTPUT_OPTION=-o
  177. CY_TOOLCHAIN_MAPFILE=-map
  178. CY_TOOLCHAIN_LSFLAGS=
  179. CY_TOOLCHAIN_INCRSPFILE=@
  180. CY_TOOLCHAIN_INCRSPFILE_ASM=@
  181. CY_TOOLCHAIN_OBJRSPFILE=-filelist
  182. #
  183. # Produce a makefile dependency rule for each input file
  184. #
  185. CY_TOOLCHAIN_DEPENDENCIES=-MMD -MP -MF "$(subst .$(CY_TOOLCHAIN_SUFFIX_O),.$(CY_TOOLCHAIN_SUFFIX_D),$@)" -MT "$@"
  186. #
  187. # Additional includes in the compilation process based on this
  188. # toolchain
  189. #
  190. CY_TOOLCHAIN_INCLUDES=\
  191. $(CY_COMPILER_GCC_ARM_DIR)/arm-none-eabi/include\
  192. $(CY_COMPILER_GCC_ARM_DIR)/lib/gcc/arm-none-eabi/7.2.1/include\
  193. $(CY_COMPILER_GCC_ARM_DIR)/lib/gcc/arm-none-eabi/7.2.1/include-fixed
  194. #
  195. # Additional libraries in the link process based on this toolchain
  196. #
  197. CY_TOOLCHAIN_DEFINES=
  198. #
  199. # M2BIN tool is used to convert Mach-O to binary
  200. #
  201. CY_TOOLCHAIN_M2BIN=$(CY_BASELIB_PATH)/make/scripts/m2bin