#!/bin/bash

# ----------------------------------------------------------------------------------------------------
# lanch_name : qemu源码编译
# lanch_id   : 1
# lanch_help : 
# lanch_argv : [WGET]        下载源码包
# lanch_argv : [RESET_CODE]  重置代码(到源码包)
# lanch_argv : [RESET_BUILD] 全部重新configure和make
# lanch_argv : [BUILD_ALL]   编译全部代码(含依赖库)
# lanch_argv : [TARGET_ALL]  编译全部平台,默认仅x86_64和aarch64
# ----------------------------------------------------------------------------------------------------
SCRIPT_PATH=$(cd ${0%/*} && pwd)
PROJECT_PATH=${SCRIPT_PATH%/*}
WORKSAPCE_PATH=$(pwd)
MAKE_CPU_CNT=`expr $(nproc --all) - 2`



# ----------------------------------------------------------------------------------------------------
PATH_RESOURCE=${PROJECT_PATH}/resource
PATH_SOURCE=${PROJECT_PATH}/source
PATH_BUILD=${WORKSAPCE_PATH}/worksapce/build
if [ ! ${PATH_RELEASE} ]; then 
	PATH_RELEASE=${WORKSAPCE_PATH}/worksapce/release;
	PATH_RELEASE=${WORKSAPCE_PATH}/worksapce/qemu-x86_64; 
fi
PATH_SOURCE_3TH=${PATH_BUILD}/source_3th
PATH_BUILD_3TH=${PATH_BUILD}/project_3th
PATH_RELEASE_3TH=${PATH_BUILD}/release_3th
	mkdir -p ${PATH_RESOURCE}
	mkdir -p ${PATH_SOURCE}
	mkdir -p ${PATH_BUILD}
	mkdir -p ${PATH_RELEASE}
	mkdir -p ${PATH_SOURCE_3TH}
	mkdir -p ${PATH_BUILD_3TH}
	mkdir -p ${PATH_RELEASE_3TH}


# ----------------------------------------------------------------------------------------------------
unset ENABLE_WGET
unset ENABLE_BUILD_3TH
unset ENABLE_RESET_CODE
unset ENABLE_TARGET_ALL
for argv in $*; do
	if [ "$argv" == "WGET" ]; then
		ENABLE_WGET=1
	fi
	if [ "$argv" == "BUILD_3TH" ]; then
		ENABLE_BUILD_3TH=1
	fi
	if [ "$argv" == "RESET_CODE" ]; then
		ENABLE_RESET_CODE=1
	fi
	if [ "$argv" == "TARGET_ALL" ]; then
		ENABLE_TARGET_ALL=1
	fi
done
if  [ ! $(ls ${PATH_RESOURCE} | grep qemu- 2>/dev/null) ]; then
	ENABLE_WGET=1
fi
if  [ ! $(ls ${PATH_RELEASE_3TH} | grep lib 2>/dev/null) ]; then
	ENABLE_BUILD_3TH=1
fi
if  [ ! $(ls ${PATH_SOURCE} | grep qemu- 2>/dev/null) ]; then
	ENABLE_RESET_CODE=1
fi


# ----------------------------------------------------------------------------------------------------
wget_plus(){
	WGET_CMD="$*"
	WGET_SRC=$1
	WGET_DES_PATH=$(pwd)
	WGET_FILE=${WGET_SRC##*/}
	for argv in $*; do
		if [ "$argv_last" == "-P" ]; then
			if [ "${argv:0:1}" == "/" ]; then
				WGET_DES_PATH="${argv}"
			else
				WGET_DES_PATH="${WGET_DES_PATH}/${argv}"
			fi
		fi
		argv_last=${argv}
	done
	
	if [ ! -f ${WGET_DES_PATH}/${WGET_FILE} ]; then
		WGET_STATE="File download"
	else
		WGET_STATE="File exists"
	fi
	
	if [ ${wget_echo_info} ]; then
		echo -e "\033[0;35m# export wget_echo_info=1; unset wget_echo_info\033[0m"
		echo -e "\033[0;35m# WGET_CMD=${WGET_CMD}\033[0m"
		echo -e "\033[0;35m# WGET_SRC=${WGET_SRC}\033[0m"
		echo -e "\033[0;35m# WGET_DES_PATH=${WGET_DES_PATH}\033[0m"
		echo -e "\033[0;35m# WGET_FILE=${WGET_FILE}\033[0m"
		echo -e "\033[0;35m# WGET_STATE=${WGET_STATE}\033[0m"
	fi
	
	if [ ! -f ${WGET_DES_PATH}/${WGET_FILE} ]; then
		wget ${WGET_CMD}
	fi
}
if [ ${ENABLE_WGET} ]; then
	rm ${PATH_RESOURCE}/*-*.* 2>/dev/null
fi
wget_plus http://www.zlib.net/zlib-1.2.11.tar.gz                                    -P ${PATH_RESOURCE} -q --show-progress
wget_plus https://www.cairographics.org/releases/pixman-0.40.0.tar.gz               -P ${PATH_RESOURCE} -q --show-progress
wget_plus https://github.com/libffi/libffi/releases/download/v3.3/libffi-3.3.tar.gz -P ${PATH_RESOURCE} -q --show-progress
wget_plus https://download.gnome.org/sources/glib/2.48/glib-2.48.1.tar.xz           -P ${PATH_RESOURCE} -q --show-progress
wget_plus https://download.qemu.org/qemu-5.1.0.tar.xz                               -P ${PATH_RESOURCE} -q --show-progress


# ----------------------------------------------------------------------------------------------------
STATIC_SHARED_OPTION0="";#--shared
STATIC_SHARED_OPTION1="--enable-shared=yes --enable-static=no"

STATIC_SHARED_OPTION0="--static"
STATIC_SHARED_OPTION1="--enable-shared=no  --enable-static=yes"

# ----------------------------------------------------------------------------------------------------
if [ ${ENABLE_BUILD_3TH} ]; then
	rm ${PATH_SOURCE_3TH}/*-* -rf
	tar zxf ${PATH_RESOURCE}/zlib-* -C ${PATH_SOURCE_3TH}
	tar zxf ${PATH_RESOURCE}/pixman-* -C ${PATH_SOURCE_3TH}
	tar zxf ${PATH_RESOURCE}/libffi-* -C ${PATH_SOURCE_3TH}
	tar xf ${PATH_RESOURCE}/glib-* -C ${PATH_SOURCE_3TH}
	
	mkdir -p ${PATH_BUILD_3TH}/project/zlib
	cd ${PATH_BUILD_3TH}/project/zlib
		if [ ! -f "Makefile" ]; then
			${PATH_SOURCE_3TH}/zlib-*/configure --prefix=${PATH_RELEASE_3TH} ${STATIC_SHARED_OPTION0}
		fi
		make -j${MAKE_CPU_CNT}
		make install
	cd ../..
	
	mkdir -p ${PATH_BUILD_3TH}/project/pixman
	cd ${PATH_BUILD_3TH}/project/pixman
		autoreconf -vfi
		if [ ! -f "Makefile" ]; then
			${PATH_SOURCE_3TH}/pixman-*/configure --prefix=${PATH_RELEASE_3TH}  ${STATIC_SHARED_OPTION1}
		fi
		make -j${MAKE_CPU_CNT}
		make install
	cd ../..

	mkdir -p ${PATH_BUILD_3TH}/project/libffi
	cd ${PATH_BUILD_3TH}/project/libffi	
		if [ ! -f "Makefile" ]; then
			${PATH_SOURCE_3TH}/libffi-*/configure --prefix=${PATH_RELEASE_3TH} PKG_CONFIG_PATH=${PATH_RELEASE_3TH}/lib/pkgconfig ${STATIC_SHARED_OPTION1}
		fi
		make -j${MAKE_CPU_CNT}
		make install
	cd ../..

	mkdir -p ${PATH_BUILD_3TH}/project/glib
	cd ${PATH_BUILD_3TH}/project/glib
		if [ ! -f "Makefile" ]; then
			${PATH_SOURCE_3TH}/glib-*/configure --prefix=${PATH_RELEASE_3TH} PKG_CONFIG_PATH=${PATH_RELEASE_3TH}/lib/pkgconfig --with-pcre=internal ${STATIC_SHARED_OPTION1}
		fi
		make -j${MAKE_CPU_CNT}
		make install
	cd ../..
	
	tree -L 2 ${PATH_RELEASE_3TH}
fi


# ----------------------------------------------------------------------------------------------------
if [ ${ENABLE_RESET_CODE} ]; then
	rm ${PATH_SOURCE}/qemu-* -rf
	tar vxf ${PATH_RESOURCE}/qemu-* -C ${PATH_SOURCE}
fi


# ----------------------------------------------------------------------------------------------------
mkdir -p ${PATH_BUILD}/project/qemu
cd ${PATH_BUILD}/project/qemu
	if [ ! -f "Makefile" ]; then
		export PKG_CONFIG_PATH=${PATH_RELEASE_3TH}/lib/pkgconfig
		if [ ${ENABLE_TARGET_ALL} ]; then
			${PATH_SOURCE}/qemu-*/configure --prefix=${PATH_RELEASE} ${STATIC_SHARED_OPTION0}
		else
			${PATH_SOURCE}/qemu-*/configure --prefix=${PATH_RELEASE} ${STATIC_SHARED_OPTION0} --target-list="x86_64-softmmu x86_64-linux-user aarch64-softmmu aarch64-linux-user"
		fi
	fi
	make -j${MAKE_CPU_CNT}
	make install
cd ../..