mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/usr/bin/env bash
 | |
| 
 | |
| shopt -s nullglob
 | |
| 
 | |
| toolchain_by_config() {
 | |
|   CF=$1
 | |
|   FMT=$2
 | |
| 
 | |
|   BR2_VER=$(grep BR2_DEFAULT_KERNEL_VERSION $CF)
 | |
|   if [ -n "$BR2_VER" ]; then
 | |
|     VENDOR=$(echo $CF | cut -d - -f 4 | cut -d / -f 1 | sed -r 's/\<./\U&/g')
 | |
|     KVER=$(echo $BR2_VER | cut -d \" -f 2 | awk -F . '{printf "%s_%s", $1, $2}')
 | |
|     GCC_VER=$(sed -rn "s/^BR2_GCC_VERSION_([0-9]*)_X=y/\1/p" $CF)
 | |
|     ARCH=$(sed -rn "s/^BR2_(arm[a-z0-9_]+)=y/\1/p" $CF)
 | |
|     if [ -z "$ARCH" ]; then
 | |
|       ARCH=$(sed -rn "s/^BR2_(cortex_[a-z0-9_]+)=y/\1/p" $CF)
 | |
|     fi
 | |
|     if [ -z "$ARCH" ]; then
 | |
|       ARCH=$(sed -rn "s/^BR2_(arm)=y/\1/p" $CF)
 | |
|     else
 | |
|       # Here we have something from ARM modern family
 | |
|       HF=$(sed -rn "s/^BR2_ARM_EABI(HF)=y/\1/p" $CF | tr '[:upper:]' '[:lower:]')
 | |
|     fi
 | |
| 
 | |
|     if [ -z "$ARCH" ]; then
 | |
|       ARCH=$(sed -rn "s/^BR2_(mips_[a-z]*)=y/\1/p" $CF)
 | |
|     else
 | |
|       THUMB=$(sed -rn "s/^BR2_ARM_INSTRUCTIONS_(THUMB2)=y/\1/p" $CF)
 | |
|       if [ -n "$THUMB" ]; then
 | |
|         ARCH="${ARCH}_${THUMB,,}"
 | |
|       fi
 | |
|       if [ -n "$HF" ]; then
 | |
|         ARCH="${ARCH}_${HF}"
 | |
|       fi
 | |
|     fi
 | |
| 
 | |
|     LIBC=$(sed -rn "s/^BR2_TOOLCHAIN_BUILDROOT_LIBC=\"(.*)\"/\1/p" $CF)
 | |
| 
 | |
|     SOC=$(echo $CF | cut -d _ -f 3)
 | |
|     case $FMT in
 | |
|       list)
 | |
|         echo $ARCH $GCC_VER $LIBC $KVER $VENDOR $CF
 | |
|         ;;
 | |
|       uniq)
 | |
|         echo $ARCH $GCC_VER $LIBC $KVER
 | |
|         ;;
 | |
|       *)
 | |
|         if [ -n "$2" ]; then
 | |
|           BR_DIR=buildroot-$2
 | |
|           GCC_VER=$(sed -rn \
 | |
|             "s/^\s+default\s+\"([0-9.]+)\"\s+if BR2_GCC_VERSION_${GCC_VER}_X/\1/p" \
 | |
|               $BR_DIR/package/gcc/Config.in.host)
 | |
|           case $LIBC in
 | |
|             musl)
 | |
|               VER=$(sed -rn "s/^MUSL_VERSION\s*=\s*([0-9.]+)/\1/p" \
 | |
|                 $BR_DIR/package/musl/musl.mk)
 | |
|               ;;
 | |
|             uclibc)
 | |
|               VER=$(sed -rn "s/^UCLIBC_VERSION\s*=\s*([0-9.]+)/\1/p" \
 | |
|                 $BR_DIR/package/uclibc/uclibc.mk)
 | |
|               ;;
 | |
|             glibc)
 | |
|               VER=$(sed -rn "s/^GLIBC_VERSION\s*=\s*([0-9.]+).*/\1/p" \
 | |
|               $BR_DIR/package/glibc/glibc.mk  | tail -1)
 | |
|               ;;
 | |
|             esac
 | |
|           HASH=$(echo $VER | sha1sum | cut -c 1-8)
 | |
|           echo ${ARCH}-gcc${GCC_VER}-${LIBC}-${KVER}-${HASH}
 | |
|         else
 | |
|           echo ${ARCH}-gcc${GCC_VER}-${LIBC}-${KVER}
 | |
|         fi
 | |
|         ;;
 | |
|     esac
 | |
|   fi
 | |
| }
 | |
| 
 | |
| if [ $# -eq 0 ]; then
 | |
|   $0 list | sort
 | |
| else
 | |
|   if [ "$1" != "list" ] && [ "$1" != "uniq" ]; then
 | |
|     toolchain_by_config $1 $2
 | |
|   else
 | |
|     for D in br-ext-chip-*; do
 | |
|       for CF in $D/configs/*; do
 | |
|         toolchain_by_config $CF $1
 | |
|       done
 | |
|     done
 | |
|   fi
 | |
| fi
 |