1fb726d48Sopenharmony_ci# Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved. 2fb726d48Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 3fb726d48Sopenharmony_ci# you may not use this file except in compliance with the License. 4fb726d48Sopenharmony_ci# You may obtain a copy of the License at 5fb726d48Sopenharmony_ci# 6fb726d48Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 7fb726d48Sopenharmony_ci# 8fb726d48Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 9fb726d48Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 10fb726d48Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11fb726d48Sopenharmony_ci# See the License for the specific language governing permissions and 12fb726d48Sopenharmony_ci# limitations under the License. 13fb726d48Sopenharmony_ci 14fb726d48Sopenharmony_ciimport("//gn/wasm.gni") 15fb726d48Sopenharmony_cideclare_args() { 16fb726d48Sopenharmony_ci if (target_os == "linux" || target_os == "macx") { 17fb726d48Sopenharmony_ci cc = "clang" 18fb726d48Sopenharmony_ci cxx = "clang++" 19fb726d48Sopenharmony_ci pic = "-fPIC" 20fb726d48Sopenharmony_ci rebuild_string = "" 21fb726d48Sopenharmony_ci extra_asmflags = "" 22fb726d48Sopenharmony_ci asm = "clang" 23fb726d48Sopenharmony_ci } else if (target_os == "windows") { 24fb726d48Sopenharmony_ci cc = "gcc.exe" 25fb726d48Sopenharmony_ci cxx = "g++.exe" 26fb726d48Sopenharmony_ci rebuild_string = "" 27fb726d48Sopenharmony_ci extra_asmflags = "" 28fb726d48Sopenharmony_ci asm = "gcc.exe" 29fb726d48Sopenharmony_ci pic = "" 30fb726d48Sopenharmony_ci } 31fb726d48Sopenharmony_ci if (use_wasm == true) { 32fb726d48Sopenharmony_ci print("make_wasm") 33fb726d48Sopenharmony_ci } else if (use_wasm == false) { 34fb726d48Sopenharmony_ci print("no make_wasm") 35fb726d48Sopenharmony_ci } 36fb726d48Sopenharmony_ci cc_wrapper = "" 37fb726d48Sopenharmony_ci} 38fb726d48Sopenharmony_citoolchain("wasm") { 39fb726d48Sopenharmony_ci # emsdk_dir and em_config are defined in wasm.gni. 40fb726d48Sopenharmony_ci print("use gcc_like_chain wasm") 41fb726d48Sopenharmony_ci if (!is_mac) { 42fb726d48Sopenharmony_ci ar = "emar" 43fb726d48Sopenharmony_ci } 44fb726d48Sopenharmony_ci cc = "emcc" 45fb726d48Sopenharmony_ci cxx = "em++" 46fb726d48Sopenharmony_ci if (!use_local_emsdk) { 47fb726d48Sopenharmony_ci if (!is_mac) { 48fb726d48Sopenharmony_ci ar = "$emsdk_dir/emscripten/emar --em-config $em_config" 49fb726d48Sopenharmony_ci } 50fb726d48Sopenharmony_ci cc = "$emsdk_dir/emscripten/emcc --em-config $em_config" 51fb726d48Sopenharmony_ci cxx = "$emsdk_dir/emscripten/em++ --em-config $em_config" 52fb726d48Sopenharmony_ci } 53fb726d48Sopenharmony_ci lib_switch = "-l" 54fb726d48Sopenharmony_ci ld_arg = "" 55fb726d48Sopenharmony_ci lib_dir_switch = "-L" 56fb726d48Sopenharmony_ci external_cxxflags = "" 57fb726d48Sopenharmony_ci external_cflags = "" 58fb726d48Sopenharmony_ci external_ldflags = "" 59fb726d48Sopenharmony_ci if (defined(linker) && linker != "") { 60fb726d48Sopenharmony_ci ld_arg = "-fuse-ld=$_invoker_linker" 61fb726d48Sopenharmony_ci _invoker_linker = linker 62fb726d48Sopenharmony_ci } 63fb726d48Sopenharmony_ci if (defined(sysroot) && sysroot != "") { 64fb726d48Sopenharmony_ci _invoker_sysroot = sysroot 65fb726d48Sopenharmony_ci cxx = "$cxx --sysroot=$_invoker_sysroot" 66fb726d48Sopenharmony_ci cc = "$cc --sysroot=$_invoker_sysroot" 67fb726d48Sopenharmony_ci } 68fb726d48Sopenharmony_ci if (defined(gcc_toolchain) && gcc_toolchain != "") { 69fb726d48Sopenharmony_ci ld_arg = "$ld_arg --gcc-toolchain=$gcc_toolchain" 70fb726d48Sopenharmony_ci } 71fb726d48Sopenharmony_ci if (defined(external_cxxflags)) { 72fb726d48Sopenharmony_ci print("defined external_cxxflags") 73fb726d48Sopenharmony_ci external_cxxflags = external_cxxflags 74fb726d48Sopenharmony_ci } 75fb726d48Sopenharmony_ci if (defined(external_cflags)) { 76fb726d48Sopenharmony_ci external_cflags = external_cflags 77fb726d48Sopenharmony_ci } 78fb726d48Sopenharmony_ci 79fb726d48Sopenharmony_ci tool("cc") { 80fb726d48Sopenharmony_ci depfiles = "{{output}}.d" 81fb726d48Sopenharmony_ci command = "$cc_wrapper $cc -MMD -MF $depfiles {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} ${external_cflags} -c {{source}} -o {{output}}" 82fb726d48Sopenharmony_ci outputfiles = 83fb726d48Sopenharmony_ci "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" 84fb726d48Sopenharmony_ci outputs = [ outputfiles ] 85fb726d48Sopenharmony_ci description = "step: compile {{source}}" 86fb726d48Sopenharmony_ci } 87fb726d48Sopenharmony_ci 88fb726d48Sopenharmony_ci tool("cxx") { 89fb726d48Sopenharmony_ci depfiles = "{{output}}.d" # must be defined 90fb726d48Sopenharmony_ci command = "$cc_wrapper $cxx -MMD -MF $depfiles {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} ${external_cflags} ${external_cxxflags} -c {{source}} -o {{output}}" 91fb726d48Sopenharmony_ci 92fb726d48Sopenharmony_ci outputfiles = 93fb726d48Sopenharmony_ci "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" 94fb726d48Sopenharmony_ci outputs = [ outputfiles ] 95fb726d48Sopenharmony_ci description = "step: compile {{source}}" 96fb726d48Sopenharmony_ci } 97fb726d48Sopenharmony_ci tool("alink") { 98fb726d48Sopenharmony_ci rspfile = "{{output}}.rsp" # must be defined 99fb726d48Sopenharmony_ci rspfile_content = "{{inputs}}" 100fb726d48Sopenharmony_ci if (is_mac) { 101fb726d48Sopenharmony_ci command = "rm -f {{output}} && libtool -static {{arflags}} -o {{output}} -filelist $rspfile" 102fb726d48Sopenharmony_ci } else { 103fb726d48Sopenharmony_ci command = "rm -rf {{output}} && $ar rcsD {{output}} @$rspfile" 104fb726d48Sopenharmony_ci } 105fb726d48Sopenharmony_ci outputfiles = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" 106fb726d48Sopenharmony_ci outputs = [ outputfiles ] 107fb726d48Sopenharmony_ci output_prefix = "lib" 108fb726d48Sopenharmony_ci default_output_extension = ".a" 109fb726d48Sopenharmony_ci description = "step: link {{output}}" 110fb726d48Sopenharmony_ci } 111fb726d48Sopenharmony_ci tool("solink") { 112fb726d48Sopenharmony_ci sonames = "{{target_output_name}}{{output_extension}}" 113fb726d48Sopenharmony_ci outputfiles = "{{root_out_dir}}/$sonames" 114fb726d48Sopenharmony_ci unstripped_so = outputfiles 115fb726d48Sopenharmony_ci rpath = "" 116fb726d48Sopenharmony_ci outputs = [ outputfiles ] 117fb726d48Sopenharmony_ci command = "$cc_wrapper $cxx $ld_arg -shared {{ldflags}} ${external_ldflags} {{inputs}} {{solibs}} {{libs}} $rpath -o {{output}}" 118fb726d48Sopenharmony_ci output_prefix = "lib" 119fb726d48Sopenharmony_ci description = "step: link $unstripped_so" 120fb726d48Sopenharmony_ci default_output_extension = ".so" 121fb726d48Sopenharmony_ci } 122fb726d48Sopenharmony_ci 123fb726d48Sopenharmony_ci tool("link") { 124fb726d48Sopenharmony_ci outputfiles = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" 125fb726d48Sopenharmony_ci outputs = [ outputfiles ] 126fb726d48Sopenharmony_ci command = "$cc_wrapper $cxx $ld_arg {{ldflags}} ${external_ldflags} {{inputs}} {{solibs}} {{libs}} -o {{output}}" 127fb726d48Sopenharmony_ci description = "step:link {{output}}" 128fb726d48Sopenharmony_ci } 129fb726d48Sopenharmony_ci 130fb726d48Sopenharmony_ci tool("stamp") { 131fb726d48Sopenharmony_ci description = "step: stamp {{output}}" 132fb726d48Sopenharmony_ci command = "touch {{output}}" 133fb726d48Sopenharmony_ci } 134fb726d48Sopenharmony_ci 135fb726d48Sopenharmony_ci tool("copy") { 136fb726d48Sopenharmony_ci description = "step: COPY files from {{source}} to {{output}}" 137fb726d48Sopenharmony_ci command = "cp -arf {{source}} {{output}}" 138fb726d48Sopenharmony_ci } 139fb726d48Sopenharmony_ci} 140fb726d48Sopenharmony_citoolchain("gcc_like") { 141fb726d48Sopenharmony_ci lib_switch = "-l" 142fb726d48Sopenharmony_ci lib_dir_switch = "-L" 143fb726d48Sopenharmony_ci 144fb726d48Sopenharmony_ci tool("cxx") { 145fb726d48Sopenharmony_ci depfile = "{{output}}.d" # must be defined 146fb726d48Sopenharmony_ci command = "$cxx -o {{output}} -MMD -MF $depfile {{defines}} $pic {{include_dirs}} {{cflags}} {{cflags_cc}} -c {{source}}" 147fb726d48Sopenharmony_ci outputfiles = 148fb726d48Sopenharmony_ci "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" 149fb726d48Sopenharmony_ci outputs = [ outputfiles ] 150fb726d48Sopenharmony_ci description = "step: compile {{source}}" 151fb726d48Sopenharmony_ci } 152fb726d48Sopenharmony_ci 153fb726d48Sopenharmony_ci tool("cc") { 154fb726d48Sopenharmony_ci depfile = "{{output}}.d" 155fb726d48Sopenharmony_ci command = "$cc -o {{output}} -MMD -MF $depfile {{defines}} $pic {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}}" 156fb726d48Sopenharmony_ci outputfiles = 157fb726d48Sopenharmony_ci "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" 158fb726d48Sopenharmony_ci outputs = [ outputfiles ] 159fb726d48Sopenharmony_ci description = "step: compile {{source}}" 160fb726d48Sopenharmony_ci } 161fb726d48Sopenharmony_ci tool("asm") { 162fb726d48Sopenharmony_ci depfile = "{{output}}.d" 163fb726d48Sopenharmony_ci command = "$asm -o {{output}} -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{asmflags}}${extra_asmflags} -c {{source}}" 164fb726d48Sopenharmony_ci depsformat = "gcc" 165fb726d48Sopenharmony_ci outputfiles = 166fb726d48Sopenharmony_ci "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" 167fb726d48Sopenharmony_ci outputs = [ outputfiles ] 168fb726d48Sopenharmony_ci } 169fb726d48Sopenharmony_ci tool("alink") { 170fb726d48Sopenharmony_ci rspfile = "{{output}}.rsp" # this must be defined 171fb726d48Sopenharmony_ci if (is_mac) { 172fb726d48Sopenharmony_ci rspfile_content = "{{inputs_newline}}" 173fb726d48Sopenharmony_ci command = "rm -f {{output}} && libtool -static {{arflags}} -filelist $rspfile -o {{output}}" 174fb726d48Sopenharmony_ci } else { 175fb726d48Sopenharmony_ci rspfile_content = "{{inputs}}" # this must be defined 176fb726d48Sopenharmony_ci command = "rm -f {{output}} && $ar rcsD {{output}} @$rspfile" 177fb726d48Sopenharmony_ci if (is_mingw) { 178fb726d48Sopenharmony_ci command = "$ar rcsD {{output}} @$rspfile" 179fb726d48Sopenharmony_ci } 180fb726d48Sopenharmony_ci } 181fb726d48Sopenharmony_ci outputsfiles = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" 182fb726d48Sopenharmony_ci outputs = [ outputsfiles ] 183fb726d48Sopenharmony_ci default_output_extension = ".a" 184fb726d48Sopenharmony_ci output_prefix = "lib" 185fb726d48Sopenharmony_ci description = "step: link {{output}}" 186fb726d48Sopenharmony_ci } 187fb726d48Sopenharmony_ci 188fb726d48Sopenharmony_ci tool("link") { 189fb726d48Sopenharmony_ci command = "$cxx -o {{output}} {{ldflags}} {{inputs}} {{solibs}} {{libs}}" 190fb726d48Sopenharmony_ci outputsfiles = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" 191fb726d48Sopenharmony_ci outputs = [ outputsfiles ] 192fb726d48Sopenharmony_ci description = "step: link {{output}}" 193fb726d48Sopenharmony_ci } 194fb726d48Sopenharmony_ci tool("solink") { 195fb726d48Sopenharmony_ci default_output_extension = ".so" 196fb726d48Sopenharmony_ci command = 197fb726d48Sopenharmony_ci "$cxx -o {{output}} {{ldflags}} {{inputs}} {{solibs}} {{libs}} -shared" 198fb726d48Sopenharmony_ci outputsfiles = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" 199fb726d48Sopenharmony_ci outputs = [ outputsfiles ] 200fb726d48Sopenharmony_ci description = "step: solink {{output}}" 201fb726d48Sopenharmony_ci } 202fb726d48Sopenharmony_ci 203fb726d48Sopenharmony_ci tool("stamp") { 204fb726d48Sopenharmony_ci print("need do nothing") 205fb726d48Sopenharmony_ci description = "step: touch {{output}}" 206fb726d48Sopenharmony_ci command = "touch {{output}}" 207fb726d48Sopenharmony_ci } 208fb726d48Sopenharmony_ci 209fb726d48Sopenharmony_ci tool("copy") { 210fb726d48Sopenharmony_ci description = "COPY files from {{source}} to {{output}}" 211fb726d48Sopenharmony_ci command = "cp -arf {{source}} {{output}}" 212fb726d48Sopenharmony_ci } 213fb726d48Sopenharmony_ci} 214