15f9996aaSopenharmony_ci# Copyright (c) 2020 Huawei Device Co., Ltd. 25f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 35f9996aaSopenharmony_ci# you may not use this file except in compliance with the License. 45f9996aaSopenharmony_ci# You may obtain a copy of the License at 55f9996aaSopenharmony_ci# 65f9996aaSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 75f9996aaSopenharmony_ci# 85f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 95f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 105f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 115f9996aaSopenharmony_ci# See the License for the specific language governing permissions and 125f9996aaSopenharmony_ci# limitations under the License. 135f9996aaSopenharmony_ci 145f9996aaSopenharmony_ciimport("//build/lite/config/toolchain/config.gni") 155f9996aaSopenharmony_ci 165f9996aaSopenharmony_citemplate("iccarm_toolchain") { 175f9996aaSopenharmony_ci toolchain(target_name) { 185f9996aaSopenharmony_ci assert(defined(invoker.ar), "gcc_toolchain() must specify a \"ar\" value") 195f9996aaSopenharmony_ci assert(defined(invoker.cc), "gcc_toolchain() must specify a \"cc\" value") 205f9996aaSopenharmony_ci assert(defined(invoker.cxx), "gcc_toolchain() must specify a \"cxx\" value") 215f9996aaSopenharmony_ci assert(defined(invoker.ld), "gcc_toolchain() must specify a \"ld\" value") 225f9996aaSopenharmony_ci 235f9996aaSopenharmony_ci cc = invoker.cc 245f9996aaSopenharmony_ci cxx = invoker.cxx 255f9996aaSopenharmony_ci as = invoker.as 265f9996aaSopenharmony_ci ar = invoker.ar 275f9996aaSopenharmony_ci ld = invoker.ld 285f9996aaSopenharmony_ci 295f9996aaSopenharmony_ci need_strip = false 305f9996aaSopenharmony_ci if (defined(invoker.strip)) { 315f9996aaSopenharmony_ci strip = invoker.strip 325f9996aaSopenharmony_ci need_strip = true 335f9996aaSopenharmony_ci } 345f9996aaSopenharmony_ci 355f9996aaSopenharmony_ci if (defined(invoker.extra_ldflags) && invoker.extra_ldflags != "") { 365f9996aaSopenharmony_ci extra_ldflags = " " + invoker.extra_ldflags 375f9996aaSopenharmony_ci } else { 385f9996aaSopenharmony_ci extra_ldflags = "" 395f9996aaSopenharmony_ci } 405f9996aaSopenharmony_ci 415f9996aaSopenharmony_ci tool("cc") { 425f9996aaSopenharmony_ci command = "$cc {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}" 435f9996aaSopenharmony_ci if (enable_save_temps) { 445f9996aaSopenharmony_ci preprocess_outfile = "{{output}}.i" 455f9996aaSopenharmony_ci list_outfile = "{{output}}.lst" 465f9996aaSopenharmony_ci asm_outfile = "{{output}}.s" 475f9996aaSopenharmony_ci command += " --preprocess $preprocess_outfile -lCN $list_outfile -lA $asm_outfile" 485f9996aaSopenharmony_ci } 495f9996aaSopenharmony_ci description = "iccarm CC {{output}}" 505f9996aaSopenharmony_ci outputs = 515f9996aaSopenharmony_ci [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ] 525f9996aaSopenharmony_ci } 535f9996aaSopenharmony_ci tool("cxx") { 545f9996aaSopenharmony_ci depfile = "{{output}}.d" 555f9996aaSopenharmony_ci command = "$cxx {{defines}} {{include_dirs}} {{cflags_cc}} -c {{source}} -o {{output}}" 565f9996aaSopenharmony_ci if (enable_save_temps) { 575f9996aaSopenharmony_ci preprocess_outfile = "{{output}}.i" 585f9996aaSopenharmony_ci list_outfile = "{{output}}.lst" 595f9996aaSopenharmony_ci asm_outfile = "{{output}}.s" 605f9996aaSopenharmony_ci command += " --preprocess $preprocess_outfile -lCN $list_outfile -lA $asm_outfile" 615f9996aaSopenharmony_ci } 625f9996aaSopenharmony_ci description = "iccarm CXX {{output}}" 635f9996aaSopenharmony_ci outputs = 645f9996aaSopenharmony_ci [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ] 655f9996aaSopenharmony_ci } 665f9996aaSopenharmony_ci tool("asm") { 675f9996aaSopenharmony_ci depfile = "{{output}}.d" 685f9996aaSopenharmony_ci command = "$as {{defines}} {{include_dirs}} {{asmflags}} {{source}} -o {{output}}" 695f9996aaSopenharmony_ci description = "iccarm ASM {{output}}" 705f9996aaSopenharmony_ci outputs = 715f9996aaSopenharmony_ci [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ] 725f9996aaSopenharmony_ci } 735f9996aaSopenharmony_ci tool("alink") { 745f9996aaSopenharmony_ci outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}" 755f9996aaSopenharmony_ci rspfile = "{{output}}.rsp" 765f9996aaSopenharmony_ci rspfile_content = "{{inputs}}" 775f9996aaSopenharmony_ci command = "rm -f {{output}} && $ar {{inputs}} -o {{output}}" 785f9996aaSopenharmony_ci 795f9996aaSopenharmony_ci description = "iccarm AR {{output}}" 805f9996aaSopenharmony_ci outputs = [ outfile ] 815f9996aaSopenharmony_ci 825f9996aaSopenharmony_ci default_output_dir = "{{root_out_dir}}/libs" 835f9996aaSopenharmony_ci default_output_extension = ".a" 845f9996aaSopenharmony_ci output_prefix = "lib" 855f9996aaSopenharmony_ci } 865f9996aaSopenharmony_ci tool("solink") { 875f9996aaSopenharmony_ci outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}" 885f9996aaSopenharmony_ci unstripped_outfile = outfile 895f9996aaSopenharmony_ci 905f9996aaSopenharmony_ci rspfile = "$outfile.rsp" 915f9996aaSopenharmony_ci rspfile_content = "{{inputs}}" 925f9996aaSopenharmony_ci command = "" 935f9996aaSopenharmony_ci if (need_strip) { 945f9996aaSopenharmony_ci unstripped_outfile = "{{output_dir}}/unstripped/usr/lib/{{target_output_name}}{{output_extension}}" 955f9996aaSopenharmony_ci } 965f9996aaSopenharmony_ci command += "$ld -shared {{ldflags}} $extra_ldflags " + "-Wl, --start-group {{inputs}} {{libs}} -Wl, --end-group -o $unstripped_outfile" 975f9996aaSopenharmony_ci if (need_strip) { 985f9996aaSopenharmony_ci command += " && $strip \"$unstripped_outfile\" \"$outfile\"" 995f9996aaSopenharmony_ci } 1005f9996aaSopenharmony_ci description = "iccarm SOLINK $outfile" 1015f9996aaSopenharmony_ci outputs = [ outfile ] 1025f9996aaSopenharmony_ci if (unstripped_outfile != outfile) { 1035f9996aaSopenharmony_ci outputs += [ unstripped_outfile ] 1045f9996aaSopenharmony_ci } 1055f9996aaSopenharmony_ci default_output_dir = "{{root_out_dir}}" 1065f9996aaSopenharmony_ci default_output_extension = ".so" 1075f9996aaSopenharmony_ci output_prefix = "lib" 1085f9996aaSopenharmony_ci } 1095f9996aaSopenharmony_ci tool("link") { 1105f9996aaSopenharmony_ci outfile = "{{output_dir}}/bin/{{target_output_name}}{{output_extension}}" 1115f9996aaSopenharmony_ci unstripped_outfile = outfile 1125f9996aaSopenharmony_ci 1135f9996aaSopenharmony_ci rspfile = "$outfile.rsp" 1145f9996aaSopenharmony_ci command = "" 1155f9996aaSopenharmony_ci if (need_strip) { 1165f9996aaSopenharmony_ci unstripped_outfile = "{{output_dir}}/unstripped/bin/{{target_output_name}}{{output_extension}}" 1175f9996aaSopenharmony_ci } 1185f9996aaSopenharmony_ci 1195f9996aaSopenharmony_ci if (enable_iccarm_link_helper) { 1205f9996aaSopenharmony_ci link_helper = 1215f9996aaSopenharmony_ci rebase_path("//build/lite/toolchain/iccarm_link_helper.sh") 1225f9996aaSopenharmony_ci command += "$ld {{ldflags}} $extra_ldflags \$($link_helper {{inputs}} {{libs}}) -o $unstripped_outfile" 1235f9996aaSopenharmony_ci } else { 1245f9996aaSopenharmony_ci command += "$ld {{ldflags}} $extra_ldflags " + 1255f9996aaSopenharmony_ci "{{inputs}} {{libs}} -o $unstripped_outfile" 1265f9996aaSopenharmony_ci } 1275f9996aaSopenharmony_ci if (need_strip) { 1285f9996aaSopenharmony_ci command += " && $strip \"$unstripped_outfile\" \"$outfile\"" 1295f9996aaSopenharmony_ci } 1305f9996aaSopenharmony_ci 1315f9996aaSopenharmony_ci description = "iccarm LINK $outfile" 1325f9996aaSopenharmony_ci default_output_dir = "{{root_out_dir}}" 1335f9996aaSopenharmony_ci rspfile_content = "{{inputs}}" 1345f9996aaSopenharmony_ci outputs = [ outfile ] 1355f9996aaSopenharmony_ci if (unstripped_outfile != outfile) { 1365f9996aaSopenharmony_ci outputs += [ unstripped_outfile ] 1375f9996aaSopenharmony_ci } 1385f9996aaSopenharmony_ci } 1395f9996aaSopenharmony_ci tool("stamp") { 1405f9996aaSopenharmony_ci if (host_os == "win") { 1415f9996aaSopenharmony_ci command = "cmd /c type nul > \"{{output}}\"" 1425f9996aaSopenharmony_ci } else { 1435f9996aaSopenharmony_ci command = "/usr/bin/touch {{output}}" 1445f9996aaSopenharmony_ci } 1455f9996aaSopenharmony_ci description = "STAMP {{output}}" 1465f9996aaSopenharmony_ci } 1475f9996aaSopenharmony_ci tool("copy") { 1485f9996aaSopenharmony_ci if (host_os == "win") { 1495f9996aaSopenharmony_ci command = "python $ohos_root_path/build/lite/copy_files.py --src_type=file --src={{source}} --dest_dir={{output}}" 1505f9996aaSopenharmony_ci } else if (host_os == "linux") { 1515f9996aaSopenharmony_ci command = "cp -afd {{source}} {{output}}" 1525f9996aaSopenharmony_ci } 1535f9996aaSopenharmony_ci description = "COPY {{source}} {{output}}" 1545f9996aaSopenharmony_ci } 1555f9996aaSopenharmony_ci } 1565f9996aaSopenharmony_ci} 157