[Tizen] Add wrt-loader 61/162661/10
authorYoungsoo Choi <kenshin.choi@samsung.com>
Wed, 29 Nov 2017 01:41:09 +0000 (01:41 +0000)
committerSangYong Park <sy302.park@samsung.com>
Fri, 12 Jan 2018 01:02:43 +0000 (01:02 +0000)
The wrt-loader is implemented.

Change-Id: I9d8abd9cd44cfe69857fe8fc363b4a95bd5d928f
Signed-off-by: Youngsoo Choi <kenshin.choi@samsung.com>
atom/app/atom_main.cc
electron.gyp
packaging/electron-efl.manifest
packaging/electron-efl.spec
packaging/wrt.loader [new file with mode: 0644]
tizen/loader/loader.gyp [new file with mode: 0755]
tizen/loader/wrt_loader.cc [new file with mode: 0644]
vendor/breakpad/breakpad.gyp
vendor/brightray/brightray.gyp

index 013652f..28959e5 100644 (file)
@@ -127,6 +127,9 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
 
 #elif defined(OS_LINUX)  // defined(OS_WIN)
 
+#if defined(OS_TIZEN)
+__attribute__((visibility("default")))
+#endif
 int main(int argc, const char* argv[]) {
   if (IsEnvSet(kRunAsNode)) {
     base::i18n::InitializeICU();
index 011644e..3cbba15 100644 (file)
             },
           ],
         }],  # OS=="linux"
-        [ 'is_tizen==1', {
+        ['is_tizen==1', {
           'dependencies': [
             'tizen/common/common.gyp:*',
+            'tizen/loader/loader.gyp:*',
           ],
+          'ldflags': [
+            '-pie',
+            '-export-dynamic',
+          ],
+          'cflags': [ '-fPIC' ],
+          'cflags_cc': [ '-fPIC' ],
         }],  # is_tizen==1
       ],
     },  # target <(project_name)
             'vendor/breakpad/breakpad.gyp:breakpad_client',
           ],
         }],  # OS=="linux"
+        ['is_tizen==1', {
+          'cflags': [ '-fPIC' ],
+          'cflags_cc': [ '-fPIC' ],
+        }],  # is_tizen==1
         ['use_efl==1', {
           'conditions': [
             ['is_tizen==1', {
index 75b0fa5..e5dc2fa 100644 (file)
@@ -2,4 +2,7 @@
     <request>
         <domain name="_"/>
     </request>
+    <assign>
+        <filesystem path="/usr/bin/wrt-loader" exec_label="User"/>
+    </assign>
 </manifest>
index 06ec377..916804f 100755 (executable)
@@ -7,6 +7,7 @@ License:    MIT
 URL:        https://www.tizen.org
 Source0:    %{name}-%{version}.tar.gz
 Source1001: %{name}.manifest
+Source1002: wrt.loader
 
 BuildRequires: libcap-devel, libasound-devel, python, ninja, nodejs, nodejs-npm
 # It's added to accelerate generating ninja files.
@@ -97,26 +98,35 @@ sed -e 's#@VERSION@#%{tizen_version_major}.%{tizen_version_minor}#g' \
     > %{_out}/packaging/%{_pkgid}.xml
 install -m 0644 %{_out}/packaging/%{_pkgid}.xml %{buildroot}%{_xmldir}
 
+# Loader script file
+mkdir -p %{buildroot}%{_datadir}/aul/
+cp %{SOURCE1002} %{buildroot}%{_datadir}/aul/
+
 mkdir -p %{buildroot}/usr/apps/org.tizen.electron-efl/bin/
 install -d %{buildroot}/%{_icondir}
 install -d %{buildroot}/%{_libdir}
-install -m 0644 packaging/%{_pkgid}.png            %{buildroot}/%{_icondir}
-install -m 0755 %{_out}/libnode.so                 %{buildroot}/%{_libdir}
-install -m 0755 %{_out}/electron                   %{buildroot}/usr/apps/org.tizen.electron-efl/bin
-install -m 0755 wrt/build/script/run_was_tizen.sh  %{buildroot}/usr/apps/org.tizen.electron-efl/bin
+install -d %{buildroot}/%{_bindir}
+install -m 0644 packaging/%{_pkgid}.png             %{buildroot}/%{_icondir}
+install -m 0755 %{_out}/libnode.so                  %{buildroot}/%{_libdir}
+install -m 0755 %{_out}/wrt-loader                  %{buildroot}/%{_bindir}
+install -m 0755 %{_out}/electron                    %{buildroot}/usr/apps/org.tizen.electron-efl/bin
+install -m 0755 wrt/build/script/run_was_tizen.sh   %{buildroot}/usr/apps/org.tizen.electron-efl/bin
 
 # install resource.
 mkdir -p %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl/wrt_release
-install -m 0755 %{_out}/resources/default_app.asar %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl
-install -m 0755 %{_out}/resources/electron.asar    %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl
+install -m 0755 %{_out}/resources/default_app.asar  %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl
+install -m 0755 %{_out}/resources/electron.asar     %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl
 
-cp -rf wrt/wrt_support                             %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl
-cp -rf wrt/node_modules                            %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl
-cp -rf wrt/package.json wrt/src/ wrt/static        %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl/wrt_release
+ln -s /usr/apps/org.tizen.electron-efl/bin/electron %{buildroot}%{_bindir}/wrt
+ln -s /usr/apps/org.tizen.electron-efl/bin/electron %{buildroot}%{_bindir}/wrt-client
+ln -s /usr/apps/org.tizen.electron-efl/bin/electron %{buildroot}%{_bindir}/xwalk_runtime
+cp -rf wrt/wrt_support                              %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl
+cp -rf wrt/node_modules                             %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl
+cp -rf wrt/package.json wrt/src/ wrt/static         %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl/wrt_release
 
 ./wrt/build/node_modules/grunt-electron-installer/node_modules/asar/bin/asar p \
     %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl/wrt_release %{_out}/resources/app.asar
-install -m 0755 %{_out}/resources/app.asar         %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl
+install -m 0755 %{_out}/resources/app.asar          %{buildroot}/opt/usr/home/owner/data/org.tizen.electron-efl
 
 %post
 # Owner account can't write /opt/usr/home/owner/data/org.tizen.electron-efl
@@ -139,3 +149,8 @@ rm -fr %{buildroot}
 %{_icondir}/%{_pkgid}.png
 %{_libdir}/libnode.so
 %{_xmldir}/%{_pkgid}.xml
+%attr(755,root,root) %{_bindir}/wrt
+%attr(755,root,root) %{_bindir}/wrt-client
+%attr(755,root,root) %{_bindir}/wrt-loader
+%attr(755,root,root) %{_bindir}/xwalk_runtime
+%attr(644,root,root) %{_datadir}/aul/wrt.loader
diff --git a/packaging/wrt.loader b/packaging/wrt.loader
new file mode 100644 (file)
index 0000000..632aa1f
--- /dev/null
@@ -0,0 +1,6 @@
+[LOADER]
+NAME              wrt-loader
+EXE               /usr/bin/wrt-loader
+APP_TYPE          webapp
+DETECTION_METHOD  TIMEOUT|DEMAND
+TIMEOUT           5000
diff --git a/tizen/loader/loader.gyp b/tizen/loader/loader.gyp
new file mode 100755 (executable)
index 0000000..d8127f6
--- /dev/null
@@ -0,0 +1,27 @@
+{
+  'targets': [
+    {
+      'target_name': 'wrt-loader',
+      'type': 'executable',
+      'sources': [
+        'wrt_loader.cc',
+      ],
+      'libraries' : [
+        '-ldl',
+      ],
+      'include_dirs': [
+        '<(libchromiumcontent_src_dir)',
+      ],
+      'ldflags': [
+        '-Wl,--whole-archive',
+        '<@(libchromiumcontent_libraries)',
+        '-Wl,--no-whole-archive',
+      ],
+      'link_settings': {
+        'libraries': [
+          '<@(libchromiumcontent_libraries)',
+        ]
+      },
+    },  # end of target 'wrt-loader'
+  ],
+}
diff --git a/tizen/loader/wrt_loader.cc b/tizen/loader/wrt_loader.cc
new file mode 100644 (file)
index 0000000..fa60f4a
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+#include <dlfcn.h>
+#include "base/logging.h"
+
+// loader file must have "User" execute label, because launchpad daemon runs
+// with "System::Privileged" label.
+int main(int argc, char* argv[]) {
+  LOG(INFO) << "Begin wrt-loader";
+  void* handle = dlopen("/usr/apps/org.tizen.electron-efl/bin/electron", RTLD_NOW);
+  if (!handle) {
+    LOG(ERROR) << "Failed to load electorn";
+    return false;
+  }
+
+  typedef int (*MAIN_FUNC)(int argc, char* argv[]);
+
+  MAIN_FUNC real_main = reinterpret_cast<MAIN_FUNC>(dlsym(handle, "main"));
+  if (!real_main) {
+    LOG(ERROR) << "Failed to load real_main";
+    return false;
+  }
+
+  int ret = real_main(argc, argv);
+  dlclose(handle);
+
+  return ret;
+}
index ceebef8..e74d3f6 100644 (file)
           ],
 
           'conditions': [
+            ['is_tizen==1', {
+              'cflags': [ '-fPIC' ],
+              'cflags_cc': [ '-fPIC' ],
+            }],
             ['target_arch=="arm" and chromeos==1', {
               # Avoid running out of registers in
               # linux_syscall_support.h:sys_clone()'s inline assembly.
index 21878a0..f12da7a 100644 (file)
       },
       'sources': [ '<@(brightray_sources)' ],
       'conditions': [
+        ['is_tizen==1', {
+          'cflags': [ '-fPIC' ],
+          'cflags_cc': [ '-fPIC' ],
+        }],
         ['use_efl==1', {
           'direct_dependent_settings': {
             'ldflags': [