bafe36ac创建于 2022年10月14日历史提交
#!/bin/bash
# Copyright (C) 2021 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# gcc-9 needed
set -e

ohos_root=$1
ohos_hdc_build="ohos_hdc_build"
cwddir=$(pwd)

build_in_source=true
[ "X$ohos_root" == "X" ] && build_in_source=false

if [ "$build_in_source" == "true" ] ; then
	ohos_root_real=$(realpath $ohos_root)
fi

[ "X$KEEP" == "X" ] && [ -d "$ohos_hdc_build" ] && rm -fr $ohos_hdc_build
[ -d "$ohos_hdc_build" ] || mkdir $ohos_hdc_build

STATICLIB=""
INCLUDES=""

function build_libusb ()
{
	libusb_install=$(realpath libusb)
	[ "X$KEEP" == "X" ] && mkdir -pv ${libusb_install}/include && ln -svf /usr/include/libusb-1.0 ${libusb_install}/include/libusb
	INCLUDES+="-I$(realpath ${libusb_install}/include) "
}

function build_openssl ()
{
	pushd third_party_openssl
	[ "X$KEEP" == "X" ] && ./Configure no-shared linux-generic64 && make
	STATICLIB+="$(realpath libcrypto.a) "
	INCLUDES+="-I$(realpath include) "
	popd
}

function build_libuv ()
{
	pushd third_party_libuv
	[ "X$KEEP" == "X" ] && cmake . && make
	STATICLIB+="$(realpath libuv_a.a) "
	INCLUDES+="-I$(realpath include) "
	popd
}

function build_securec ()
{
	pushd third_party_bounds_checking_function
	[ "X$KEEP" == "X" ] && gcc src/*.c -I$(pwd)/include -c && ar rcs libsecurec.a *.o
	STATICLIB+="$(realpath libsecurec.a) "
	INCLUDES+="-I$(realpath include) "
	popd
}

function build_lz4 ()
{
	pushd third_party_lz4
	[ "X$KEEP" == "X" ] && make liblz4.a
	STATICLIB+="$(realpath lib/liblz4.a) "
	INCLUDES+="-I$(realpath lib) "
	popd
}

function build_hdc ()
{
	pushd developtools_hdc
	echo $STATICLIB
	echo $INCLUDES

	DEFINES="-DHDC_HOST -DHARMONY_PROJECT"
	export LDFLAGS="-Wl,--copy-dt-needed-entries"
	export CXXFLAGS="-std=c++17 -ggdb -O0"

	g++ ${DEFINES} ${CXXFLAGS} ${INCLUDES} $(find src/common/ src/host/ \( -name "*.cpp" -or -name "*.c" \)) -lusb-1.0 -ldl -lpthread $STATICLIB -o hdc

	if [ -f hdc ]; then
		echo build success
		cp hdc $cwddir
	else
		echo build fail
	fi
	popd
}

pushd $ohos_hdc_build

if [ "X$KEEP" == "X" ]; then
	for name in "developtools/hdc" "third_party/libuv" "third_party/openssl" "third_party/bounds_checking_function" "third_party/lz4"; do
		reponame=$(echo $name | sed "s/\//_/g")
		if [ "$build_in_source" == "true" ] ; then
			cp -ra ${ohos_root_real}/${name} ${reponame} || exit 1
		else
			git clone https://gitee.com/openharmony/${reponame}
		fi
	done
fi

build_openssl
build_libuv
build_securec
build_lz4
build_libusb

build_hdc

popd