# A set of predefined MULTILIB which can be used for different ARM targets.
# Via the configure option --with-multilib-list, user can customize the
# final MULTILIB implementation.

comma := ,

with_multilib_list := $(subst $(comma), ,$(with_multilib_list))))

MULTILIB_OPTIONS   = mthumb/marm
MULTILIB_DIRNAMES  = thumb arm
MULTILIB_OPTIONS  += march=armv6s-m/march=armv7-m/march=armv7e-m/march=armv7/march=armv8-m.base/march=armv8-m.main
MULTILIB_DIRNAMES += armv6-m armv7-m armv7e-m armv7-ar armv8-m.base armv8-m.main
MULTILIB_OPTIONS  += mfloat-abi=softfp/mfloat-abi=hard
MULTILIB_DIRNAMES += softfp fpu
MULTILIB_OPTIONS  += mfpu=fpv5-sp-d16/mfpu=fpv5-d16/mfpu=fpv4-sp-d16/mfpu=vfpv3-d16
MULTILIB_DIRNAMES += fpv5-sp-d16 fpv5-d16 fpv4-sp-d16 vfpv3-d16

MULTILIB_MATCHES   = march?armv6s-m=mcpu?cortex-m0
MULTILIB_MATCHES  += march?armv6s-m=mcpu?cortex-m0.small-multiply
MULTILIB_MATCHES  += march?armv6s-m=mcpu?cortex-m0plus
MULTILIB_MATCHES  += march?armv6s-m=mcpu?cortex-m0plus.small-multiply
MULTILIB_MATCHES  += march?armv6s-m=mcpu?cortex-m1
MULTILIB_MATCHES  += march?armv6s-m=mcpu?cortex-m1.small-multiply
MULTILIB_MATCHES  += march?armv6s-m=march?armv6-m
MULTILIB_MATCHES  += march?armv7-m=mcpu?cortex-m3
MULTILIB_MATCHES  += march?armv7e-m=mcpu?cortex-m4
MULTILIB_MATCHES  += march?armv7e-m=mcpu?cortex-m7
MULTILIB_MATCHES  += march?armv7e-m=mcpu?marvell-pj4
MULTILIB_MATCHES  += march?armv7=march?armv7-r
MULTILIB_MATCHES  += march?armv7=march?armv7-a
MULTILIB_MATCHES  += march?armv7=march?armv8-a
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-r4
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-r4f
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-r5
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-r7
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-r8
MULTILIB_MATCHES  += march?armv7=mcpu?generic-armv7-a
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a5
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a7
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a8
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a9
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a12
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a15
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a17
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a15.cortex-a7
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a17.cortex-a7
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a53
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a57
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a72
MULTILIB_MATCHES  += march?armv7=mcpu?exynos-m1
MULTILIB_MATCHES  += march?armv7=mcpu?xgene1
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a57.cortex-a53
MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a72.cortex-a53
MULTILIB_MATCHES  += march?armv8-m.main=march?armv8-m.main+dsp
MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv3
MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv3-fp16
MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv3-d16-fp16
MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv3xd
MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv3xd-fp16
MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv4
MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv4-d16
MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?neon
MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?neon-fp16
MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?neon-vfpv4

MULTILIB_EXCEPTIONS =
MULTILIB_REUSE =

MULTILIB_REQUIRED  = mthumb
MULTILIB_REQUIRED += marm
MULTILIB_REQUIRED += mfloat-abi=hard

MULTILIB_OSDIRNAMES  = mthumb=!thumb
MULTILIB_OSDIRNAMES += marm=!arm
MULTILIB_OSDIRNAMES += mfloat-abi.hard=!fpu

ifneq (,$(findstring armv6-m,$(with_multilib_list)))
MULTILIB_REQUIRED   += mthumb/march=armv6s-m
MULTILIB_OSDIRNAMES += mthumb/march.armv6s-m=!armv6-m
endif

ifneq (,$(findstring armv8-m.base,$(with_multilib_list)))
MULTILIB_REQUIRED   += mthumb/march=armv8-m.base
MULTILIB_OSDIRNAMES += mthumb/march.armv8-m.base=!armv8-m.base
endif

ifneq (,$(findstring armv7-m,$(with_multilib_list)))
MULTILIB_REQUIRED   += mthumb/march=armv7-m
MULTILIB_OSDIRNAMES += mthumb/march.armv7-m=!armv7-m
endif

ifneq (,$(findstring armv7e-m,$(with_multilib_list)))
MULTILIB_REQUIRED   += mthumb/march=armv7e-m
MULTILIB_REQUIRED   += mthumb/march=armv7e-m/mfloat-abi=softfp/mfpu=fpv4-sp-d16
MULTILIB_REQUIRED   += mthumb/march=armv7e-m/mfloat-abi=hard/mfpu=fpv4-sp-d16
MULTILIB_REQUIRED   += mthumb/march=armv7e-m/mfloat-abi=softfp/mfpu=fpv5-d16
MULTILIB_REQUIRED   += mthumb/march=armv7e-m/mfloat-abi=hard/mfpu=fpv5-d16
MULTILIB_REQUIRED   += mthumb/march=armv7e-m/mfloat-abi=softfp/mfpu=fpv5-sp-d16
MULTILIB_REQUIRED   += mthumb/march=armv7e-m/mfloat-abi=hard/mfpu=fpv5-sp-d16
MULTILIB_OSDIRNAMES += mthumb/march.armv7e-m=!armv7e-m
MULTILIB_OSDIRNAMES += mthumb/march.armv7e-m/mfloat-abi.hard/mfpu.fpv4-sp-d16=!armv7e-m/fpu
MULTILIB_OSDIRNAMES += mthumb/march.armv7e-m/mfloat-abi.softfp/mfpu.fpv4-sp-d16=!armv7e-m/softfp
MULTILIB_OSDIRNAMES += mthumb/march.armv7e-m/mfloat-abi.hard/mfpu.fpv5-d16=!armv7e-m/fpu/fpv5-d16
MULTILIB_OSDIRNAMES += mthumb/march.armv7e-m/mfloat-abi.softfp/mfpu.fpv5-d16=!armv7e-m/softfp/fpv5-d16
MULTILIB_OSDIRNAMES += mthumb/march.armv7e-m/mfloat-abi.hard/mfpu.fpv5-sp-d16=!armv7e-m/fpu/fpv5-sp-d16
MULTILIB_OSDIRNAMES += mthumb/march.armv7e-m/mfloat-abi.softfp/mfpu.fpv5-sp-d16=!armv7e-m/softfp/fpv5-sp-d16
endif

ifneq (,$(findstring armv8-m.main,$(with_multilib_list)))
MULTILIB_REQUIRED   += mthumb/march=armv8-m.main
MULTILIB_REQUIRED   += mthumb/march=armv8-m.main/mfloat-abi=softfp/mfpu=fpv5-d16
MULTILIB_REQUIRED   += mthumb/march=armv8-m.main/mfloat-abi=hard/mfpu=fpv5-d16
MULTILIB_REQUIRED   += mthumb/march=armv8-m.main/mfloat-abi=softfp/mfpu=fpv5-sp-d16
MULTILIB_REQUIRED   += mthumb/march=armv8-m.main/mfloat-abi=hard/mfpu=fpv5-sp-d16
MULTILIB_OSDIRNAMES += mthumb/march.armv8-m.main=!armv8-m.main
MULTILIB_OSDIRNAMES += mthumb/march.armv8-m.main/mfloat-abi.hard/mfpu.fpv5-d16=!armv8-m.main/fpu/fpv5-d16
MULTILIB_OSDIRNAMES += mthumb/march.armv8-m.main/mfloat-abi.softfp/mfpu.fpv5-d16=!armv8-m.main/softfp/fpv5-d16
MULTILIB_OSDIRNAMES += mthumb/march.armv8-m.main/mfloat-abi.hard/mfpu.fpv5-sp-d16=!armv8-m.main/fpu/fpv5-sp-d16
MULTILIB_OSDIRNAMES += mthumb/march.armv8-m.main/mfloat-abi.softfp/mfpu.fpv5-sp-d16=!armv8-m.main/softfp/fpv5-sp-d16
endif

ifneq (,$(filter armv7 armv7-r armv7-a,$(with_multilib_list)))
MULTILIB_REQUIRED   += mthumb/march=armv7
MULTILIB_REQUIRED   += mthumb/march=armv7/mfloat-abi=softfp/mfpu=vfpv3-d16
MULTILIB_REQUIRED   += mthumb/march=armv7/mfloat-abi=hard/mfpu=vfpv3-d16
MULTILIB_OSDIRNAMES += mthumb/march.armv7=!armv7-ar/thumb
MULTILIB_OSDIRNAMES += mthumb/march.armv7/mfloat-abi.hard/mfpu.vfpv3-d16=!armv7-ar/thumb/fpu
MULTILIB_OSDIRNAMES += mthumb/march.armv7/mfloat-abi.softfp/mfpu.vfpv3-d16=!armv7-ar/thumb/softfp
MULTILIB_REUSE      += mthumb/march.armv7=marm/march.armv7
MULTILIB_REUSE      += mthumb/march.armv7/mfloat-abi.softfp/mfpu.vfpv3-d16=marm/march.armv7/mfloat-abi.softfp/mfpu.vfpv3-d16
MULTILIB_REUSE      += mthumb/march.armv7/mfloat-abi.hard/mfpu.vfpv3-d16=marm/march.armv7/mfloat-abi.hard/mfpu.vfpv3-d16
endif
