# defs.ppc - PPC specific definitions shared by all toolchains # # Copyright (c) 2002-2012 Wind River Systems, Inc. # # The right to copy, distribute, modify or otherwise make use # of this software may be licensed only pursuant to the terms # of an applicable Wind River license agreement. # # modification history # -------------------- # 02w,16jul15,rtm Fix for VXW6-83093 # 02v,16oct12,kch Added mils haNet for e500mc. # 02u,04sep12,pfl renamed libmilsvdk.a to libmils.a # 02z,01nov12,kk fix merge issue, reinstate 465 for SMP # 02y,24jul12,h_k added e6500 CPU variant support. (WIND00333229) # 03a,23apr12,h_k removed PPC85XX _e500mc support. (WIND00346346) # 02z,25jan12,mze Standardize ENDIAN # 02y,08mar12,h_k removed libaim.a from VX_ARCHIVE_LIST_ppc465. # (WIND00320752) # 02x,14feb12,h_k removed PPC860 build. (WIND00327400) # 02w,22nov11,x_s added libaim.a for VX_ARCHIVE_LIST_ppc465 # 02t,13may11,kab Adding mils vdk for e500mc # 02v,03may11,syt added support for PPC465 # 02u,28feb11,x_s added SMP support for PPC476 # 02t,23feb11,agf add Hypervisor VBI lib to e500v2 build # 02s,05nov10,pch CQ212178: avoid building 970 for SMP # 02r,30sep10,kab Restore e500mc builds # 02s,05nov10,pch CQ212178: avoid building 970 for SMP # 02v,15dec10,x_z added hard float point support for PPC476 # 02u,30sep10,kab Restore e500mc builds # 02t,23aug10,x_z removed hard float and SMP support for _ppc476 # 02s,12mar10,x_s added _ppc476 cpu variant # 02r,07dec09,pmr temporarily remove e500mc from build list # 02q,14nov09,to GUEST: set CPU variants for GUEST # 02p,29jul09,pee missed on CPU/TOOL combination in last checkin. # 02o,27jul09,pee adding legacy CPU interface under PPC32 # 02n,17oct08,pch CQ140014: update comments re supported CPU_VARIANT settings # 02m,08sep08,pee fixing TC_INFO. # 02l,02sep08,pmr e500mc hard float # 02k,29aug08,pee fixing TOOL in LD_LINK_TOOL_DIR. # 02j,26aug08,mze typo # 02i,25aug08,mze fix TC_INFO # 02h,21aug08,mze test # 02g,19aug08,mze TOOL changes # 02f,27jun08,pee WIND000126394 # 02e,30jun08,pee modification to SMP support for VSB # 02d,27jun08,pee fixing gnu/hard # 02c,12jun08,pee VSB adaptation. # 02b,31mar08,pmr add e500mc # 02a,12dec07,dtr Fix FP reference. # 01z,28nov07,dtr Define e500v2 FP type. # 01y,19nov07,dtr Use e500v2 instead of ev2 for TOOL. # 01x,05nov07,dtr Add ev2diab support for 85XX. # 01w,30aug07,dtr Add e500 to SMP build. # 01v,19jul07,pch CQ98899: settings of ADDED_CFLAGS must include "override" # 01u,09may07,dtr Add e200 cpu variant build support. # 01t,05may07,dcc moved VX_CPU_FAMILY definition. # 01s,08mar07,pee added generic option support # 01r,27jun06,pee added TC_INFO for osconfig # 01q,06jun06,dtr Add 603 soft float support. # 01r,26may06,pch Add PPC970 to SMP build # 01q,18apr06,lei added VXBUILD & DIR_EXT to support for SMP build # 01p,15sep05,jlb Add CPU_CLASS macro set to PPC32 # 01o,18jul05,dtr _e500v2 cpu variant added. # 01n,04apr05,kkz removing PPC970 until it is shippable # 01p,25mar05,dtr Add in 83xx and g2le CPU_VARIANT. # 01o,10feb05,pch Add _ppc970. # 01n,12nov04,dtr Adding in _ppc860 CPU variant. # 01m,26jul04,pch SPR 99846: Add support for _745x variant # 01l,02jun04,mil Removed libaim.a after consolidated into PPC32. # 01k,10may04,mil Added libaim.a for ppc440, ppc60x and ppc85XX. # 01j,09apr04,rec add PPC970 # 01i,05apr04,mcm Fix for SPR 95829 - added a new macro to help set the path # for Diab C++ libraries. Also fixed the assignments to # LD_LINK_PATH_ATEND and LD_LINK_PATH_EXTRA to use += # 01h,04mar04,pch temporarily disable ppc860 build # 01g,03mar04,mil Added PPC85XX. # 01f,04feb04,pch PPC32 floating-point adjustments # *** mention of libhwdb.a in variants of PPC32 is temporary # *** until it supports runtime selection among single-step, # *** emulation using breakpoints, and hands-off mode. # 01e,19dec03,kab Add 440gx diab support # 01d,10dec03,yvp Added ABI_SPEC. # 01c,19nov03,c_c Added VX_CPU_FAMILY definition here. # 01b,30jan03,pch add LD_LINK_PATH_ATEND to support generic build # 01a,12dec02,pch written # # DESCRIPTION # This file contains PPC specific definitions and flags # to be shared by all toolchains. # # NOTE # The file name comes from defs.$(VX_CPU_FAMILY) # ## map TOOL to TOOL_FAMILY, if not already done ifeq ($(TOOL_FAMILY),) ifeq ($(findstring gnu,$(TOOL)),gnu) TOOL_FAMILY = gnu else ifeq ($(findstring diab,$(TOOL)),diab) TOOL_FAMILY = diab endif endif endif VX_CPU_FAMILY = ppc BUILD_ENDIAN_SUFFIX_big = BUILD_ENDIAN_SUFFIX_little = le include $(TGT_DIR)/h/tool/$(TOOL_FAMILY)/defs.$(TOOL_FAMILY) TOOLENV = ppc ARCH_DIR = ppc ABI_SPEC = ppc CPU_CLASS = PPC32 ifeq ($(LIB_DIR_TAG),) # We are not already building a variant, so set up variant lists # for those processors which support them. ifeq ($(CPU),PPC440) # Base PPC440 supports the 440x4 core, used in the PPC440GP. # The _x5 variant supports the 440x5 core, used in the PPC440GX # and most other recent designs, which has a separate exception # class for Machine Check. CPU_VARIANT_LIST = _x5 VX_ARCHIVE_LIST_x5 = libarch.a CPU_VARIANT_CPU_TOOL_LIST_x5 = PPC440diab PPC440gnu endif ifeq ($(CPU),PPC85XX) # Base PPC85XX supports the e500 core version used in the MPC8540, # 8541, 8555, and 8560. # The _e500v2 variant supports the e500v2 core, used in the MPC8548 # and 8572, which has extended addressing for MMU and data cache # flush assist. CPU_VARIANT_LIST = _e500v2 _e200 VX_ARCHIVE_LIST_e500v2 = libarch.a CPU_VARIANT_CPU_TOOL_LIST_e500v2 = PPC85XXsfdiab PPC85XXsfgnu \ PPC85XXe500v2diab PPC85XXe500v2gnu VX_ARCHIVE_LIST_e200 = libarch.a CPU_VARIANT_CPU_TOOL_LIST_e200 = PPC85XXsfdiab PPC85XXsfgnu endif ifeq ($(CPU),PPC604) # Base PPC604 supports 604, 604e, 750, 750CX, 750FX, 755, 7400, 7410. # The _745x variant supports the MPC745x family, which have different # synchronization requirements, mostly involving HID0 and MSR. CPU_VARIANT_LIST = _745x VX_ARCHIVE_LIST_745x = libarch.a CPU_VARIANT_CPU_TOOL_LIST_745x = PPC604diab PPC604gnu endif ifeq ($(CPU),PPC603) # Base PPC603 supports 603, 603e, 826x, 828x, 824x. # The _83xx variant supports the MPC83xx family, which have different # cache sizes and support for additional secondary functionality. # The _g2le variant supports the MPC827x and other members of the # next generation of the MPC82xx family, which have additional # functionality beyond the 603e core. CPU_VARIANT_LIST = _83xx _g2le VX_ARCHIVE_LIST_83xx = libarch.a CPU_VARIANT_CPU_TOOL_LIST_83xx = PPC603diab PPC603gnu VX_ARCHIVE_LIST_g2le = libarch.a CPU_VARIANT_CPU_TOOL_LIST_g2le = PPC603diab PPC603gnu endif ifeq ($(CPU),PPC32) ifeq ($(_WRS_CONFIG_WRHV_GUEST),y) CPU_VARIANT_LIST_CONFIG_VBI_E500MC_y = _ppc85XX_e500mc CPU_VARIANT_LIST_CONFIG_VBI_E500MC_ = _ppc85XX _ppc85XX_e500v2 CPU_VARIANT_LIST = \ $(CPU_VARIANT_LIST_CONFIG_VBI_E500MC_$(_WRS_CONFIG_VBI_PPC_E500MC)) else # Variants of PPC32 are the same as the old PPC CPU names, but # in lower case and with a leading underscore, and with one of # the above-described settings appended as needed to support the # corresponding hardware. Each variant is built with either the # hard- or soft-float TOOLs, as appropriate. The 440, 603, e500mc, # and e6500 are built both ways, because they are supported both with # and without hardware FPUs. # For SMP build only the _ppc604_745x, _ppc85XX, _ppc476 and _ppc465 CPU_VARIANT_LIST_CONFIG_SMP_y = _ppc604_745x _ppc85XX \ _ppc85XX_e500v2 _ppc85XX_e500mc \ _ppc85XX_e6500 _ppc476 _ppc465 # Despite first appearances of the name, the following is for not-SMP. CPU_VARIANT_LIST_CONFIG_SMP_ = _ppc403 _ppc405 _ppc440 _ppc440_x5 \ _ppc465 _ppc476 \ _ppc603 _ppc603_83xx _ppc603_g2le \ _ppc604 _ppc604_745x _ppc85XX \ _ppc85XX_e500v2 _ppc85XX_e200 \ _ppc85XX_e500mc _ppc85XX_e6500 \ _ppc860 _ppc970 CPU_VARIANT_LIST = $(CPU_VARIANT_LIST_CONFIG_SMP_$(_WRS_CONFIG_SMP)) endif _ADDITIONAL_CPU_SUPPORT = $(_ADDITIONAL_CPU_SUPPORT_$(_WRS_CONFIG_FP)_$(_WRS_CONFIG_SMP)) _ADDITIONAL_CPU_SUPPORT_soft_ = PPC85XX PPC440 PPC603 PPC405 PPC476 PPC465 _ADDITIONAL_CPU_SUPPORT_hard_ = PPC604 PPC440 PPC603 PPC604 PPC476 PPC465 _ADDITIONAL_CPU_SUPPORT_e500v2_ = PPC85XX _ADDITIONAL_CPU_SUPPORT_soft_y = PPC85XX _ADDITIONAL_CPU_SUPPORT_hard_y = PPC604 _ADDITIONAL_CPU_SUPPORT_e500v2_y = PPC85XX VX_ARCHIVE_LIST_ppc403 = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc403 = PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc405 = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc405 = PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc440 = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc440 = PPC32diab PPC32gnu \ PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc440_x5 = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc440_x5 = PPC32diab PPC32gnu \ PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc465 = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc465 = PPC32diab PPC32gnu \ PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc476 = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc476 = PPC32diab PPC32gnu \ PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc603 = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc603 = PPC32diab PPC32gnu \ PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc603_83xx = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc603_83xx = PPC32diab PPC32gnu \ PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc603_g2le = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc603_g2le = PPC32diab PPC32gnu \ PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc604 = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc604 = PPC32diab PPC32gnu VX_ARCHIVE_LIST_ppc604_745x = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc604_745x = PPC32diab PPC32gnu VX_ARCHIVE_LIST_ppc85XX = libarch.a libhwdb.a libwrhv.a CPU_VARIANT_CPU_TOOL_LIST_ppc85XX = PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc85XX_e500v2 = libarch.a libhwdb.a libwrhv.a CPU_VARIANT_CPU_TOOL_LIST_ppc85XX_e500v2 = PPC32sfdiab PPC32sfgnu \ PPC32e500v2diab PPC32e500v2gnu VX_ARCHIVE_LIST_ppc85XX_e200 = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc85XX_e200 = PPC32sfdiab PPC32sfgnu VX_ARCHIVE_LIST_ppc85XX_e500mc = libarch.a libhwdb.a \ libwrhv.a libmils.a libhaNet.a CPU_VARIANT_CPU_TOOL_LIST_ppc85XX_e500mc = PPC32sfdiab PPC32sfgnu \ PPC32diab PPC32gnu VX_ARCHIVE_LIST_ppc85XX_e6500 = libarch.a libhwdb.a libwrhv.a CPU_VARIANT_CPU_TOOL_LIST_ppc85XX_e6500 = PPC32sfdiab PPC32sfgnu \ PPC32diab PPC32gnu VX_ARCHIVE_LIST_ppc970 = libarch.a libhwdb.a CPU_VARIANT_CPU_TOOL_LIST_ppc970 = PPC32diab PPC32gnu PPC32VARIANT= endif else # LIB_DIR_TAG set => this is a library build for a CPU variant. ifeq ($(CPU),PPC32) # Remap LIB_DIR_TAG to CPU for CPP, and remember type number # for use in setting TGT_FLAG or CC_ARCH_SPEC. ifeq ($(LIB_DIR_TAG),_ppc440_x5) DEFINE_CC += -UCPU -DCPU=PPC440 -DCPU_VARIANT=_x5 PPC32VARIANT=440 else ifeq ($(LIB_DIR_TAG),_ppc604_745x) DEFINE_CC += -UCPU -DCPU=PPC604 -DCPU_VARIANT=_745x PPC32VARIANT=604 else ifeq ($(LIB_DIR_TAG),_ppc603_83xx) DEFINE_CC += -UCPU -DCPU=PPC603 -DCPU_VARIANT=_83xx PPC32VARIANT=603 else ifeq ($(LIB_DIR_TAG),_ppc603_g2le) DEFINE_CC += -UCPU -DCPU=PPC603 -DCPU_VARIANT=_g2le PPC32VARIANT=603 else ifeq ($(LIB_DIR_TAG),_ppc85XX_e500v2) DEFINE_CC += -UCPU -DCPU=PPC85XX -DCPU_VARIANT=_e500v2 PPC32VARIANT=85XX else ifeq ($(LIB_DIR_TAG),_ppc85XX_e200) DEFINE_CC += -UCPU -DCPU=PPC85XX -DCPU_VARIANT=_e200 PPC32VARIANT=85XX else ifeq ($(LIB_DIR_TAG),_ppc85XX_e500mc) DEFINE_CC += -UCPU -DCPU=PPC85XX -DCPU_VARIANT=_e500mc PPC32VARIANT=85XX else ifeq ($(LIB_DIR_TAG),_ppc85XX_e6500) DEFINE_CC += -UCPU -DCPU=PPC85XX -DCPU_VARIANT=_e6500 PPC32VARIANT=85XX else ifeq ($(LIB_DIR_TAG),_ppc465) DEFINE_CC += -UCPU -DCPU=PPC465 PPC32VARIANT=465 else DEFINE_CC += -UCPU -DCPU=$(LIB_DIR_TAG:_ppc%=PPC%) PPC32VARIANT=$(LIB_DIR_TAG:_ppc%=%) endif endif endif endif endif endif endif endif endif else DEFINE_CC += -DCPU_VARIANT=$(LIB_DIR_TAG) endif endif # BSP builds for CPU variants set CPU_VARIANT ifneq ($(CPU_VARIANT),) DEFINE_CC += -DCPU_VARIANT=$(CPU_VARIANT) # prepended to the "normal" link path LD_LINK_PATH_EXTRA += \ -L$(LIB_ROOT)/$(VX_CPU_FAMILY)$(ARCH_OPTION_SUFFIX)/$(CPU)$(CPU_OPTION_SUFFIX)/$(TOOL_SPECIFIC_DIR)$(CPU_VARIANT)$(MINOR_OPTION_SUFFIX) \ -L$(LIB_ROOT)/$(VX_CPU_FAMILY)$(ARCH_OPTION_SUFFIX)/$(CPU)$(CPU_OPTION_SUFFIX)/$(TOOL_COMMON_DIR)$(CPU_VARIANT)$(MINOR_OPTION_SUFFIX) # variants of PPC32 need CPP's "CPU" redefined and the type number saved # as for LIB_DIR_TAG, so that the BSP can build processor-specific code; # but use _ARCH_ADDED_CFLAGS instead of DEFINE_CC so that the project builder # will pick up the redefinition. ifeq ($(CPU),PPC32) ifeq ($(CPU_VARIANT),_ppc440_x5) _ARCH_ADDED_CFLAGS += -UCPU -DCPU=PPC440 -UCPU_VARIANT -DCPU_VARIANT=_x5 PPC32VARIANT=440 else ifeq ($(CPU_VARIANT),_ppc604_745x) _ARCH_ADDED_CFLAGS += -UCPU -DCPU=PPC604 -UCPU_VARIANT -DCPU_VARIANT=_745x PPC32VARIANT=604 else ifeq ($(CPU_VARIANT),_ppc603_83xx) _ARCH_ADDED_CFLAGS += -UCPU -DCPU=PPC603 -UCPU_VARIANT -DCPU_VARIANT=_83xx PPC32VARIANT=603 else ifeq ($(CPU_VARIANT),_ppc603_g2le) _ARCH_ADDED_CFLAGS += -UCPU -DCPU=PPC603 -UCPU_VARIANT -DCPU_VARIANT=_g2le PPC32VARIANT=603 else ifeq ($(CPU_VARIANT),_ppc85XX_e500v2) _ARCH_ADDED_CFLAGS += -UCPU -DCPU=PPC85XX -UCPU_VARIANT -DCPU_VARIANT=_e500v2 PPC32VARIANT=85XX else ifeq ($(CPU_VARIANT),_ppc85XX_e200) _ARCH_ADDED_CFLAGS += -UCPU -DCPU=PPC85XX -UCPU_VARIANT -DCPU_VARIANT=_e200 PPC32VARIANT=85XX else ifeq ($(CPU_VARIANT),_ppc85XX_e500mc) _ARCH_ADDED_CFLAGS += -UCPU -DCPU=PPC85XX -UCPU_VARIANT -DCPU_VARIANT=_e500mc PPC32VARIANT=85XX else ifeq ($(CPU_VARIANT),_ppc85XX_e6500) _ARCH_ADDED_CFLAGS += -UCPU -DCPU=PPC85XX -UCPU_VARIANT -DCPU_VARIANT=_e6500 PPC32VARIANT=85XX else ifeq ($(CPU_VARIANT),_ppc465) _ARCH_ADDED_CFLAGS += -UCPU -DCPU=PPC465 PPC32VARIANT=465 else _ARCH_ADDED_CFLAGS += -UCPU -DCPU=$(CPU_VARIANT:_ppc%=PPC%) PPC32VARIANT=$(CPU_VARIANT:_ppc%=%) endif endif endif endif endif endif endif endif endif endif endif # Legacy BSP compatibility: old BSP's specify CPU=PPC603 etc. and possibly a # CPU_VARIANT relative to the specified CPU. Hard or soft float is implicit # in the CPU setting rather than being specified as part of the TOOL. These # legacy settings require no special handling for compilation, which gets the # correct settings from the make.$(CPU)$(TOOL) files; but the link search path # needs to be adjusted to find libarch.a in its new location. # If specified CPU is not PPC32, look in PPC32 (appropriate variant first, # then base, both under appropriate TOOL depending on CPU) for anything not # found in the specified variant or CPU. These go at the end of the link path. ifneq ($(CPU),PPC32) VAR_OF_32=$(CPU:PPC%=_ppc%)$(CPU_VARIANT) SF_32= ifneq ($(CPU),PPC603) ifneq ($(CPU),PPC604) ifneq ($(CPU),PPC970) ifneq ($(BUILD_FP_PREFIX),e500v2) ifneq ($(BUILD_FP_PREFIX),sf) ifneq ($(findstring sf,$(TOOL)),sf) SF_32=sf endif endif endif endif endif endif # The LD_LINK_TOOL_DIR macro is used by defs.diab to set the path # for the C++ libraries LD_LINK_TOOL_DIR = $(LIB_ROOT)/$(VX_CPU_FAMILY)$(ARCH_OPTION_SUFFIX)/PPC32$(CPU_OPTION_SUFFIX)/$(TOOL_SPECIFIC_DIR) LD_LINK_PATH_ATEND += \ -L$(LD_LINK_TOOL_DIR)$(VAR_OF_32)$(MINOR_OPTION_SUFFIX) \ -L$(LIB_ROOT)/$(VX_CPU_FAMILY)$(ARCH_OPTION_SUFFIX)/PPC32$(CPU_OPTION_SUFFIX)/$(SF_32)$(TOOL_COMMON_DIR)$(VAR_OF_32)$(MINOR_OPTION_SUFFIX) \ -L$(LD_LINK_TOOL_DIR)$(MINOR_OPTION_SUFFIX) \ -L$(LIB_ROOT)/$(VX_CPU_FAMILY)$(ARCH_OPTION_SUFFIX)/PPC32$(CPU_OPTION_SUFFIX)/$(SF_32)$(TOOL_COMMON_DIR)$(MINOR_OPTION_SUFFIX) endif BUILD_FP_PREFIX_e500v2 = e500v2 ifeq ($(SF_32),sf) _WRS_CONFIG_FP ?= soft endif ifeq ($(SF_32),e500v2) _WRS_CONFIG_FP ?= e500v2 endif ifeq ($(TC_INFO),TRUE) FP = hard ifeq ($(_WRS_CONFIG_FP),soft) FP = soft endif ifeq ($(findstring e500v2, $(TOOL)),e500v2) FP = e500v2 endif ifeq ($(_WRS_CONFIG_ENDIAN),little) ENDIAN = little else ENDIAN = big endif endif # end of defs.ppc