1e509ee18Sopenharmony_ci# Copyright (c) 2022 Huawei Device Co., Ltd.
2e509ee18Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
3e509ee18Sopenharmony_ci# you may not use this file except in compliance with the License.
4e509ee18Sopenharmony_ci# You may obtain a copy of the License at
5e509ee18Sopenharmony_ci#
6e509ee18Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0
7e509ee18Sopenharmony_ci#
8e509ee18Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
9e509ee18Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
10e509ee18Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11e509ee18Sopenharmony_ci# See the License for the specific language governing permissions and
12e509ee18Sopenharmony_ci# limitations under the License.
13e509ee18Sopenharmony_ci
14e509ee18Sopenharmony_ciconfig("executable_config") {
15e509ee18Sopenharmony_ci  configs = []
16e509ee18Sopenharmony_ci
17e509ee18Sopenharmony_ci  if (!is_mac) {
18e509ee18Sopenharmony_ci    if (!is_mingw) {
19e509ee18Sopenharmony_ci      cflags = [ "-fPIE" ]
20e509ee18Sopenharmony_ci      asmflags = [ "-fPIE" ]
21e509ee18Sopenharmony_ci      ldflags = [
22e509ee18Sopenharmony_ci        "-Wl,-rpath=\$ORIGIN/",
23e509ee18Sopenharmony_ci        "-Wl,-rpath-link=",
24e509ee18Sopenharmony_ci      ]
25e509ee18Sopenharmony_ci      if (current_os == "linux") {
26e509ee18Sopenharmony_ci        ldflags += [ "-lpthread" ]
27e509ee18Sopenharmony_ci      }
28e509ee18Sopenharmony_ci    }
29e509ee18Sopenharmony_ci    if (is_ohos) {
30e509ee18Sopenharmony_ci      ldflags += [ "-lpthread" ]
31e509ee18Sopenharmony_ci      configs += [ "$build_root/config/ohos:executable_config" ]
32e509ee18Sopenharmony_ci    } else if (is_android) {
33e509ee18Sopenharmony_ci      configs += [ "$build_root/config/aosp:executable_config" ]
34e509ee18Sopenharmony_ci    }
35e509ee18Sopenharmony_ci  } else if (is_mac) {
36e509ee18Sopenharmony_ci    configs += [ "$build_root/config/mac:mac_dynamic_flags" ]
37e509ee18Sopenharmony_ci  }
38e509ee18Sopenharmony_ci}
39e509ee18Sopenharmony_ci
40e509ee18Sopenharmony_ci# This config defines the configs applied to all shared libraries.
41e509ee18Sopenharmony_ciconfig("shared_library_config") {
42e509ee18Sopenharmony_ci  configs = []
43e509ee18Sopenharmony_ci
44e509ee18Sopenharmony_ci  if (is_mac) {
45e509ee18Sopenharmony_ci    configs += [ "$build_root/config/mac:mac_dynamic_flags" ]
46e509ee18Sopenharmony_ci  }
47e509ee18Sopenharmony_ci}
48e509ee18Sopenharmony_ci
49e509ee18Sopenharmony_ciconfig("default_libs") {
50e509ee18Sopenharmony_ci  if (is_win) {
51e509ee18Sopenharmony_ci    libs = [
52e509ee18Sopenharmony_ci      "advapi32.lib",
53e509ee18Sopenharmony_ci      "comdlg32.lib",
54e509ee18Sopenharmony_ci      "dbghelp.lib",
55e509ee18Sopenharmony_ci      "dnsapi.lib",
56e509ee18Sopenharmony_ci      "gdi32.lib",
57e509ee18Sopenharmony_ci      "msimg32.lib",
58e509ee18Sopenharmony_ci      "odbc32.lib",
59e509ee18Sopenharmony_ci      "odbccp32.lib",
60e509ee18Sopenharmony_ci      "oleaut32.lib",
61e509ee18Sopenharmony_ci      "psapi.lib",
62e509ee18Sopenharmony_ci      "shell32.lib",
63e509ee18Sopenharmony_ci      "shlwapi.lib",
64e509ee18Sopenharmony_ci      "user32.lib",
65e509ee18Sopenharmony_ci      "usp10.lib",
66e509ee18Sopenharmony_ci      "uuid.lib",
67e509ee18Sopenharmony_ci      "version.lib",
68e509ee18Sopenharmony_ci      "wininet.lib",
69e509ee18Sopenharmony_ci      "winmm.lib",
70e509ee18Sopenharmony_ci      "winspool.lib",
71e509ee18Sopenharmony_ci      "ws2_32.lib",
72e509ee18Sopenharmony_ci
73e509ee18Sopenharmony_ci      # Please don't add more stuff here. We should actually be making this
74e509ee18Sopenharmony_ci      # list smaller, since all common things should be covered. If you need
75e509ee18Sopenharmony_ci      # some extra libraries, please just add a libs = [ "foo.lib" ] to your
76e509ee18Sopenharmony_ci      # target that needs it.
77e509ee18Sopenharmony_ci    ]
78e509ee18Sopenharmony_ci    if (current_os == "winuwp") {
79e509ee18Sopenharmony_ci      # These libraries are needed for Windows UWP (i.e. store apps).
80e509ee18Sopenharmony_ci      libs += [
81e509ee18Sopenharmony_ci        "dloadhelper.lib",
82e509ee18Sopenharmony_ci        "WindowsApp.lib",
83e509ee18Sopenharmony_ci      ]
84e509ee18Sopenharmony_ci    } else {
85e509ee18Sopenharmony_ci      # These libraries are not compatible with Windows UWP (i.e. store apps.)
86e509ee18Sopenharmony_ci      libs += [
87e509ee18Sopenharmony_ci        "delayimp.lib",
88e509ee18Sopenharmony_ci        "kernel32.lib",
89e509ee18Sopenharmony_ci        "ole32.lib",
90e509ee18Sopenharmony_ci      ]
91e509ee18Sopenharmony_ci    }
92e509ee18Sopenharmony_ci  } else if (is_ohos || is_android) {
93e509ee18Sopenharmony_ci    libs = [
94e509ee18Sopenharmony_ci      "dl",
95e509ee18Sopenharmony_ci      "m",
96e509ee18Sopenharmony_ci    ]
97e509ee18Sopenharmony_ci  } else if (is_mac) {
98e509ee18Sopenharmony_ci    # Targets should choose to explicitly link frameworks they require. Since
99e509ee18Sopenharmony_ci    # linking can have run-time side effects, nothing should be listed here.
100e509ee18Sopenharmony_ci    libs = []
101e509ee18Sopenharmony_ci  } else if (is_linux) {
102e509ee18Sopenharmony_ci    libs = [
103e509ee18Sopenharmony_ci      "dl",
104e509ee18Sopenharmony_ci      "pthread",
105e509ee18Sopenharmony_ci      "rt",
106e509ee18Sopenharmony_ci    ]
107e509ee18Sopenharmony_ci  }
108e509ee18Sopenharmony_ci}
109e509ee18Sopenharmony_ci
110e509ee18Sopenharmony_cigroup("common_deps") {
111e509ee18Sopenharmony_ci  public_deps = []
112e509ee18Sopenharmony_ci  if (use_musl && is_ohos) {
113e509ee18Sopenharmony_ci    public_deps += [ "$build_root/third_party_gn/musl:soft_shared_libs" ]
114e509ee18Sopenharmony_ci  }
115e509ee18Sopenharmony_ci}
116e509ee18Sopenharmony_ci
117e509ee18Sopenharmony_cigroup("executable_deps") {
118e509ee18Sopenharmony_ci  public_deps = [ ":common_deps" ]
119e509ee18Sopenharmony_ci}
120e509ee18Sopenharmony_ci
121e509ee18Sopenharmony_cigroup("shared_library_deps") {
122e509ee18Sopenharmony_ci  public_deps = [ ":common_deps" ]
123e509ee18Sopenharmony_ci}
124e509ee18Sopenharmony_ci
125e509ee18Sopenharmony_cigroup("static_library_deps") {
126e509ee18Sopenharmony_ci  public_deps = [ ":common_deps" ]
127e509ee18Sopenharmony_ci}
128e509ee18Sopenharmony_ci
129e509ee18Sopenharmony_cigroup("source_set_deps") {
130e509ee18Sopenharmony_ci  public_deps = [ ":common_deps" ]
131e509ee18Sopenharmony_ci}
132