ARM.mk 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. ###############################################################################
  2. # \file ARM.mk
  3. # \version 1.0
  4. #
  5. # \brief
  6. # ARM Compiler (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 ARM Compiler (Clang) cross compilation executables
  30. #
  31. ifeq ($(CY_COMPILER_PATH),)
  32. CY_CROSSPATH=$(CY_COMPILER_ARM_DIR)/bin
  33. else
  34. CY_CROSSPATH=$(CY_COMPILER_PATH)/bin
  35. endif
  36. #
  37. # Build tools
  38. #
  39. CC=$(CY_CROSSPATH)/armclang
  40. CXX=$(CC)
  41. AS=$(CY_CROSSPATH)/armasm
  42. AR=$(CY_CROSSPATH)/armar
  43. LD=$(CY_CROSSPATH)/armlink
  44. #
  45. # DEBUG/NDEBUG selection
  46. #
  47. ifeq ($(CONFIG),Debug)
  48. CY_TOOLCHAIN_DEBUG_FLAG=-DDEBUG
  49. CY_TOOLCHAIN_OPTIMIZATION=-O1
  50. else
  51. ifeq ($(CONFIG),Release)
  52. CY_TOOLCHAIN_DEBUG_FLAG=-DNDEBUG
  53. CY_TOOLCHAIN_OPTIMIZATION=-Oz
  54. else
  55. CY_TOOLCHAIN_DEBUG_FLAG=
  56. CY_TOOLCHAIN_OPTIMIZATION=
  57. endif
  58. endif
  59. #
  60. # Flags common to compile and link
  61. #
  62. CY_TOOLCHAIN_COMMON_FLAGS=--target=arm-arm-none-eabi
  63. #
  64. # CPU core specifics
  65. #
  66. ifeq ($(CORE),CM0P)
  67. CY_TOOLCHAIN_CFLAGS_CORE=-mcpu=cortex-m0plus
  68. CY_TOOLCHAIN_FLAGS_CORE=--cpu=Cortex-M0plus
  69. CY_TOOLCHAIN_VFP_FLAGS=
  70. else
  71. CY_TOOLCHAIN_CFLAGS_CORE=-mcpu=cortex-m4
  72. CY_TOOLCHAIN_FLAGS_CORE=--cpu=Cortex-M4
  73. ifeq ($(VFP_SELECT),hardfp)
  74. CY_TOOLCHAIN_VFP_CFLAGS=-mfloat-abi=hard -mfpu=fpv4-sp-d16
  75. CY_TOOLCHAIN_VFP_FLAGS=--fpu=FPv4-SP
  76. else
  77. CY_TOOLCHAIN_VFP_CFLAGS=-mfloat-abi=softfp -mfpu=fpv4-sp-d16
  78. CY_TOOLCHAIN_VFP_FLAGS=--fpu=SoftVFP+FPv4-SP
  79. endif
  80. endif
  81. #
  82. # Command line flags for c-files
  83. #
  84. CY_TOOLCHAIN_CFLAGS=\
  85. -c\
  86. $(CY_TOOLCHAIN_CFLAGS_CORE)\
  87. $(CY_TOOLCHAIN_OPTIMIZATION)\
  88. $(CY_TOOLCHAIN_VFP_CFLAGS)\
  89. $(CY_TOOLCHAIN_COMMON_FLAGS)\
  90. -g\
  91. -fshort-enums\
  92. -fshort-wchar
  93. #
  94. # Command line flags for cpp-files
  95. #
  96. CY_TOOLCHAIN_CXXFLAGS=$(CY_TOOLCHAIN_CFLAGS)
  97. #
  98. # Command line flags for s-files
  99. #
  100. CY_TOOLCHAIN_ASFLAGS=\
  101. $(CY_TOOLCHAIN_FLAGS_CORE)\
  102. $(CY_TOOLCHAIN_VFP_FLAGS)
  103. #
  104. # Command line flags for linking
  105. #
  106. CY_TOOLCHAIN_LDFLAGS=\
  107. $(CY_TOOLCHAIN_FLAGS_CORE)\
  108. $(CY_TOOLCHAIN_VFP_FLAGS)\
  109. --info=totals\
  110. --stdlib=libc++
  111. #
  112. # Command line flags for archiving
  113. #
  114. CY_TOOLCHAIN_ARFLAGS=-rvs
  115. #
  116. # Toolchain-specific suffixes
  117. #
  118. CY_TOOLCHAIN_SUFFIX_S=S
  119. CY_TOOLCHAIN_SUFFIX_s=s
  120. CY_TOOLCHAIN_SUFFIX_C=c
  121. CY_TOOLCHAIN_SUFFIX_H=h
  122. CY_TOOLCHAIN_SUFFIX_CPP=cpp
  123. CY_TOOLCHAIN_SUFFIX_HPP=hpp
  124. CY_TOOLCHAIN_SUFFIX_O=o
  125. CY_TOOLCHAIN_SUFFIX_A=ar
  126. CY_TOOLCHAIN_SUFFIX_D=d
  127. CY_TOOLCHAIN_SUFFIX_LS=sct
  128. CY_TOOLCHAIN_SUFFIX_MAP=map
  129. CY_TOOLCHAIN_SUFFIX_TARGET=elf
  130. CY_TOOLCHAIN_SUFFIX_ARCHIVE=ar
  131. #
  132. # Toolchain specific flags
  133. #
  134. CY_TOOLCHAIN_OUTPUT_OPTION=-o
  135. CY_TOOLCHAIN_MAPFILE=--map --list
  136. CY_TOOLCHAIN_LSFLAGS=--scatter
  137. CY_TOOLCHAIN_INCRSPFILE=@
  138. CY_TOOLCHAIN_INCRSPFILE_ASM=--via
  139. CY_TOOLCHAIN_OBJRSPFILE=--via
  140. #
  141. # Produce a makefile dependency rule for each input file
  142. #
  143. CY_TOOLCHAIN_DEPENDENCIES=-MMD -MP -MF "$(subst .$(CY_TOOLCHAIN_SUFFIX_O),.$(CY_TOOLCHAIN_SUFFIX_D),$@)" -MT "$@"
  144. #
  145. # Additional includes in the compilation process based on this
  146. # toolchain
  147. #
  148. CY_TOOLCHAIN_INCLUDES=
  149. #
  150. # Additional libraries in the link process based on this toolchain
  151. #
  152. CY_TOOLCHAIN_DEFINES=