# determines TARGET_CPU, if not forced by user
  if [ -z "$TARGET_CPU" ]; then
    TARGET_CPU=cortex-a53
  fi

  # 64bit userland and neon required by armv8
  if [ -z "${TARGET_FEATURES}" ]; then
    TARGET_FEATURES="64bit neon"
  else
    TARGET_FEATURES+=" 64bit neon"
  fi

# TARGET_CPU:
# generic cortex-a35 cortex-a53 cortex-a57 cortex-a72 cortex-a76
# exynos-m1 qdf24xx thunderx xgene1 cortex-a57.cortex-a53
# cortex-a72.cortex-a53

# determine architecture's family
  case $TARGET_CPU in
    generic|cortex-a35|cortex-a53|cortex-a57|cortex-a72|exynos-m1|qdf24xx|thunderx|xgene1|cortex-a57.cortex-a53|cortex-a72.cortex-a53|cortex-a73.cortex-a53)
      TARGET_SUBARCH=aarch64
      TARGET_VARIANT=armv8-a
      ;;
    cortex-a76)
      TARGET_SUBARCH=aarch64
      TARGET_VARIANT=armv8.2-a
      ;;
  esac

  TARGET_GCC_ARCH=${TARGET_SUBARCH/-}
  TARGET_KERNEL_ARCH=arm64

# setup ARCH specific *FLAGS
  TARGET_CFLAGS="-march=${TARGET_VARIANT}${TARGET_CPU_FLAGS} -mabi=lp64 -Wno-psabi -mtune=$TARGET_CPU"
# Disable runtime checking support of ARMv8.0's optional LSE feature. Breaks gdb and mesa compile.
  TARGET_CFLAGS="${TARGET_CFLAGS} -mno-outline-atomics"
  TARGET_LDFLAGS=""
  TARGET_ARCH_GCC_OPTS="--with-abi=lp64 --with-arch=$TARGET_VARIANT"
