#!/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 ../..