1# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. 2# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without modification, 5# are permitted provided that the following conditions are met: 6# 7# 1. Redistributions of source code must retain the above copyright notice, this list of 8# conditions and the following disclaimer. 9# 10# 2. Redistributions in binary form must reproduce the above copyright notice, this list 11# of conditions and the following disclaimer in the documentation and/or other materials 12# provided with the distribution. 13# 14# 3. Neither the name of the copyright holder nor the names of its contributors may be used 15# to endorse or promote products derived from this software without specific prior written 16# permission. 17# 18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 20# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 22# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 23# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 24# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 25# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 26# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 27# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 28# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 30import("//build/lite/config/component/lite_component.gni") 31import("//kernel/liteos_a/liteos.gni") 32import("$THIRDPARTY_TOYBOX_DIR/toybox.gni") 33 34group("toybox") { 35 deps = [ ":build_toybox" ] 36} 37 38copy("copy_toybox_src") { 39 sources = TOYBOX_SRC_DIR 40 outputs = [ "$target_out_dir/toybox_build" ] 41} 42 43copy("copy_toybox_config") { 44 deps = [ ":copy_toybox_src" ] 45 sources = [ "liteos_a_custom.config" ] 46 outputs = [ "$target_out_dir/{{source_file_part}}" ] 47} 48 49build_ext_component("build_toybox") { 50 deps = [ 51 ":copy_toybox_config", 52 ":copy_toybox_src", 53 ] 54 deps += [ "$THIRDPARTY_MUSL_DIR:sysroot_lite" ] 55 exec_path = rebase_path("$target_out_dir/toybox_build") 56 57 cflags = [ 58 "-fstack-protector-strong", 59 "-D_FORTIFY_SOURCE=2", 60 ] 61 cflags = string_join(" ", cflags) 62 63 extra_flags = string_join(" ", target_arch_cflags) 64 if (ohos_build_compiler == "clang") { 65 extra_flags += " --target=$target_triple" 66 extra_flags += " --sysroot=" + rebase_path(ohos_current_sysroot) 67 } 68 69 command = "rm -rf .git && cp -rfp porting/liteos_a/. . && env" 70 command += " CC=\"$ohos_current_cc_command\"" 71 command += " STRIP=\"$ohos_current_strip_command\"" 72 command += " OUTNAME=toybox" 73 command += " CFLAGS=\"$cflags $extra_flags\"" 74 command += " make toybox" 75 command += " && install -D toybox " 76 command += rebase_path("$root_out_dir/bin/toybox", exec_path) 77 command += " && install -D generated/unstripped/toybox " 78 command += rebase_path("$root_out_dir/unstripped/bin/toybox", exec_path) 79 80 outputs = [ 81 "$root_out_dir/unstripped/bin/toybox", 82 "$root_out_dir/bin/toybox", 83 ] 84} 85