[WRTjs] build wrt executables using platform gcc 49/315549/2
authorSangYong Park <sy302.park@samsung.com>
Tue, 3 Dec 2024 04:58:15 +0000 (13:58 +0900)
committerSangYong Park <sy302.park@samsung.com>
Thu, 5 Dec 2024 01:26:23 +0000 (10:26 +0900)
For avoiding crash by exception handling in xwalk extentions.

Change-Id: Iec4d6e0561ec1c3adc3976f1bf0f3efe10f0833d
Signed-off-by: SangYong Park <sy302.park@samsung.com>
tizen_src/build/config/tizen_features.gni
tizen_src/chromium_impl/components/xwalk_extensions/BUILD.gn
wrt/BUILD.gn
wrt/build/build_gcc_common.py [new file with mode: 0644]
wrt/build/build_gcc_executable.py [new file with mode: 0644]
wrt/build/build_gcc_shared_library.py [new file with mode: 0644]
wrt/build/gcc_build.gni [new file with mode: 0644]
wrt/cxx_wrapper/BUILD.gn
wrt/cxx_wrapper/build-shared-library.py [deleted file]

index c8030e32ee98b2799e1a865e2e520bc17c60bfe8..e90a5c9fe3d8bff0bbee8c9ebe06e515132df634 100644 (file)
@@ -54,6 +54,10 @@ declare_args() {
   platform_api_wrapper = false
 
   enable_wrt_js = false
+
+  xwalk_extension_path = ""
+  xwalk_extension_service_path = ""
+
   tizen_pepper_extensions = false
 
   # Tizen multimedia related
index d4c7181652ae45762afae4782cacbc4271e670ec..11c9c42ad1f34802a26398c3684f7a772627faec 100644 (file)
@@ -1,9 +1,5 @@
 import("//mojo/public/tools/bindings/mojom.gni")
-
-declare_args() {
-  xwalk_extension_path = ""
-  xwalk_extension_service_path = ""
-}
+import("//tizen_src/build/config/tizen_features.gni")
 
 config("xwalk_extension_config") {
   defines = [
@@ -12,12 +8,6 @@ config("xwalk_extension_config") {
   ]
 }
 
-config("xwalk_extension_service_config") {
-  ldflags = [
-    "-Wl,-rpath=$xwalk_extension_path",
-  ]
-}
-
 mojom("mojo_bindings") {
   cpp_only = true
   sources = [
index 75bdbd47a5cbd33070bc8f6eafd18ba1a134d450..947f8de311609474878898cdb7b0ea3353b55720 100644 (file)
@@ -11,6 +11,7 @@ import("//ppapi/buildflags/buildflags.gni")
 import("//tizen_src/chromium_impl/components/components.gni")
 import("//tools/grit/grit_rule.gni")
 import("//tools/grit/repack.gni")
+import("build/gcc_build.gni")
 import("build/wrt.gni")
 import("filenames.gni")
 
@@ -608,19 +609,19 @@ static_library("wrt_lib") {
   sources += rebase_path(electron_sources, ".", "//electron")
 }
 
-executable("wrt") {
-  testonly = true
+gcc_executable_build("wrt") {
   deps = [
     "//tizen_src/ewk/efl_integration:libchromium-ewk",
   ]
   sources = [ "src/app/wrt_main.cc" ]
-  ldflags = [
-    "-pie",
-    "-Wl,--export-dynamic"
+  additional_args = [
+    "-Wl,--export-dynamic",
+    "-fPIC"
   ]
-  cflags = [ "-fPIC" ]
-  if (is_tizen) {
-    configs += [ "//tizen_src/build/config/tizen:executable_config" ]
+  if (enable_ewk_interface) {
+    additional_args += [ "-lchromium-ewk" ]
+  } else {
+    additional_args += [ "-lchromium-impl" ]
   }
 }
 
@@ -635,8 +636,7 @@ shared_library("wrt-service-override") {
   cflags = [ "-fPIC" ]
 }
 
-executable("wrt-service") {
-  testonly = true
+gcc_executable_build("wrt-service") {
   deps = [
     ":wrt-service-override",
     "//tizen_src/ewk/efl_integration:libchromium-ewk"
@@ -644,35 +644,38 @@ executable("wrt-service") {
   sources = [
     "src/app/service_main.cc",
     "src/browser/wrt_ipc.cc",
-    "src/browser/wrt_ipc.h",
   ]
-  if (is_tizen) {
-    configs += [
-      "//tizen_src/build:appcore-agent",
-      "//tizen_src/build:dbus-1",
-      "//tizen_src/build:dlog",
-      "//tizen_src/build/config/tizen:executable_config",
-      "//tizen_src/chromium_impl/components/xwalk_extensions:xwalk_extension_service_config",
-    ]
+  headers = [ "src/browser/wrt_ipc.h" ]
+  additional_args = [
+    "-lwrt-service-override",
+    "-Wl,-rpath=$xwalk_extension_path",
+    "#appcore-agent",
+    "#dbus-1",
+    "#dlog",
+  ]
+  if (enable_ewk_interface) {
+    additional_args += [ "-lchromium-ewk" ]
+  } else {
+    additional_args += [ "-lchromium-impl" ]
   }
 }
 
-executable("wrt-service-launcher") {
-  testonly = true
+gcc_executable_build("wrt-service-launcher") {
   sources = [
     "src/app/service_launcher_main.cc",
     "src/browser/wrt_ipc.cc",
-    "src/browser/wrt_ipc.h",
     "src/service/wrt_service_launcher.cc",
+  ]
+  headers = [
+    "src/browser/wrt_ipc.h",
     "src/service/wrt_service_launcher.h",
   ]
-  configs += [
-    "//tizen_src/build:bundle",
-    "//tizen_src/build:appcore-agent",
-    "//tizen_src/build:capi-appfw-app-control",
-    "//tizen_src/build:dbus-1",
-    "//tizen_src/build:dlog",
-    "//tizen_src/build:message-port",
-    "//tizen_src/build/config/tizen:executable_config",
+  additional_args = [
+    "#appcore-agent",
+    "#bundle",
+    "#capi-appfw-app-control",
+    "#dbus-1",
+    "#dlog",
+    "#message-port",
   ]
 }
diff --git a/wrt/build/build_gcc_common.py b/wrt/build/build_gcc_common.py
new file mode 100644 (file)
index 0000000..5aa2598
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/env python
+
+import subprocess
+import sys
+
+def GetPkgConfig(pkg):
+  cmd = [ 'pkg-config', '--cflags', '--libs', pkg ]
+  try:
+    flag_string = subprocess.check_output(cmd).decode('utf-8')
+  except:
+    print('Fail to run pkg-config\n')
+    return []
+  return flag_string.strip().split(' ')
+
+parsed_args = [ '-o', sys.argv[1], '-std=c++17', '-O2', '-fPIC' ]
+for arg in sys.argv[2:]:
+  if arg[0] == '#':
+    parsed_args += GetPkgConfig(arg[1:])
+  else:
+    parsed_args += [ arg ]
diff --git a/wrt/build/build_gcc_executable.py b/wrt/build/build_gcc_executable.py
new file mode 100644 (file)
index 0000000..96d2e23
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/env python
+
+import subprocess
+import sys
+
+from build_gcc_common import parsed_args
+
+try:
+  subprocess.check_output(
+    [ 'g++', '-fPIE', '-pie' ] + parsed_args,
+    stderr=subprocess.STDOUT)
+except subprocess.CalledProcessError as e:
+  print('Fail to build executable\n' + e.output.decode('utf8'))
+  sys.exit(e.returncode)
diff --git a/wrt/build/build_gcc_shared_library.py b/wrt/build/build_gcc_shared_library.py
new file mode 100644 (file)
index 0000000..9b7b703
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/env python
+
+import subprocess
+import sys
+
+from build_gcc_common import parsed_args
+
+try:
+  subprocess.check_output(
+    [ 'g++', '-shared', '-Wl,--export-dynamic' ] + parsed_args,
+    stderr=subprocess.STDOUT)
+except subprocess.CalledProcessError as e:
+  print('Fail to build shared library\n' + e.output.decode('utf8'))
+  sys.exit(e.returncode)
diff --git a/wrt/build/gcc_build.gni b/wrt/build/gcc_build.gni
new file mode 100644 (file)
index 0000000..0a80eec
--- /dev/null
@@ -0,0 +1,66 @@
+import("//tizen_src/build/config/tizen_features.gni")
+
+declare_args() {
+  default_args = [
+    "-DTIZEN_VERSION_MAJOR=${tizen_version_major}",
+    "-DTIZEN_VERSION_MINOR=${tizen_version_minor}",
+    "-DTIZEN_VERSION_PATCH=${tizen_version_patch}",
+    "-I" + rebase_path("//"),
+    "-L" + rebase_path(root_out_dir),
+  ]
+}
+
+if (tizen_product_tv) {
+  default_args += [
+    "-DOS_TIZEN_TV_PRODUCT",
+  ]
+}
+
+template("gcc_shared_library_build") {
+  assert(defined(invoker.sources), "Need source files for build")
+  assert(defined(invoker.out_file), "Need output file")
+
+  action(target_name) {
+    script = "//wrt/build/build_gcc_shared_library.py"
+
+    additional_args = default_args
+
+    if (defined(invoker.additional_args)) {
+      additional_args += invoker.additional_args
+    }
+
+    inputs = invoker.sources
+    if (defined(invoker.headers)) {
+      inputs += invoker.headers
+    }
+
+    args = [ rebase_path(invoker.out_file) ] + rebase_path(invoker.sources) + additional_args
+    outputs = [ invoker.out_file ]
+  }
+}
+
+template("gcc_executable_build") {
+  assert(defined(invoker.sources), "Need source files for build")
+
+  action(target_name) {
+    forward_variables_from(invoker, [ "deps" ])
+    testonly = true
+
+    script = "//wrt/build/build_gcc_executable.py"
+
+    additional_args = default_args
+
+    if (defined(invoker.additional_args)) {
+      additional_args += invoker.additional_args
+    }
+
+    inputs = invoker.sources
+    if (defined(invoker.headers)) {
+      inputs += invoker.headers
+    }
+
+    out_file = "$root_out_dir/$target_name"
+    args = [ rebase_path(out_file) ] + rebase_path(invoker.sources) + additional_args
+    outputs = [ out_file ]
+  }
+}
index 23ca4a144e642855b00042231e3d535bd03e1337..9294b9739c44539813f664acdc0daf0f630a591f 100644 (file)
@@ -1,38 +1,31 @@
 import("//tizen_src/build/config/tizen_features.gni")
+import("../build/gcc_build.gni")
 
 config("config") {
   libs = [ "wrt-c++wrapper" ]
   lib_dirs = [ root_out_dir ]
 }
 
-action("build_shared_library") {
+gcc_shared_library_build("cxx_wrapper_library") {
   sources = [ "wgt_manifest_handlers.cc" ]
   headers = [ "wgt_manifest_handlers.h" ]
-  outputs = [ "$root_out_dir/libwrt-c++wrapper.so" ]
-  script = "build-shared-library.py"
+  out_file = "$root_out_dir/libwrt-c++wrapper.so"
 
   additional_args = [
-    "-DTIZEN_VERSION_MAJOR=${tizen_version_major}",
-    "-DTIZEN_VERSION_MINOR=${tizen_version_minor}",
-    "-DTIZEN_VERSION_PATCH=${tizen_version_patch}",
     "#wgt-manifest-handlers",
   ]
 
   if (tizen_product_tv) {
     additional_args += [
-      "-DOS_TIZEN_TV_PRODUCT",
       "#dlog",
       "#settings-api",
     ]
     sources += [ "tv/settings_api.cc" ]
     headers += [ "tv/settings_api.h" ]
   }
-
-  inputs = sources + headers
-  args = rebase_path(outputs) + rebase_path(sources) + additional_args
 }
 
 group("cxx_wrapper") {
   public_configs = [ ":config" ]
-  deps = [ ":build_shared_library" ]
+  deps = [ ":cxx_wrapper_library" ]
 }
diff --git a/wrt/cxx_wrapper/build-shared-library.py b/wrt/cxx_wrapper/build-shared-library.py
deleted file mode 100644 (file)
index 2191d5a..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-
-import subprocess
-import sys
-
-output = sys.argv[1]
-args = [ 'gcc', '-shared', '-Wl,--export-dynamic', '-o', output, '-std=c++17', '-O2', '-fPIC' ]
-
-def GetPkgConfig(pkg):
-  cmd = [ 'pkg-config', '--cflags', '--libs', pkg ]
-  try:
-    flag_string = subprocess.check_output(cmd).decode('utf-8')
-  except:
-    print('Fail to run pkg-config\n')
-    return []
-  return flag_string.strip().split(' ')
-
-for arg in sys.argv[2:]:
-  if arg[0] == '#':
-    args += GetPkgConfig(arg[1:])
-  else:
-    args += [ arg ]
-
-try:
-  subprocess.check_output(args, stderr=subprocess.STDOUT)
-except subprocess.CalledProcessError as e:
-  print('Fail to build shared library\n' + e.output.decode('utf8'))
-  sys.exit(e.returncode)