From ace2b07f1edf32412c0cffdc127330cf2537d274 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 29 Nov 2017 01:41:09 +0000 Subject: [PATCH] [Tizen] Add wrt-loader The wrt-loader is implemented. Change-Id: I9d8abd9cd44cfe69857fe8fc363b4a95bd5d928f Signed-off-by: Youngsoo Choi --- atom/app/atom_main.cc | 3 +++ atom/app/loader/loader.gyp | 27 ++++++++++++++++++++++++ atom/app/loader/wrt_loader_tizen.cc | 41 +++++++++++++++++++++++++++++++++++++ electron.gyp | 15 ++++++++++++++ packaging/electron-efl.manifest | 3 +++ packaging/electron-efl.spec | 35 ++++++++++++++++++++++--------- packaging/wrt.loader | 6 ++++++ vendor/breakpad/breakpad.gyp | 4 ++++ vendor/brightray/brightray.gyp | 4 ++++ 9 files changed, 128 insertions(+), 10 deletions(-) create mode 100755 atom/app/loader/loader.gyp create mode 100644 atom/app/loader/wrt_loader_tizen.cc create mode 100644 packaging/wrt.loader diff --git a/atom/app/atom_main.cc b/atom/app/atom_main.cc index 013652f..28959e5 100644 --- a/atom/app/atom_main.cc +++ b/atom/app/atom_main.cc @@ -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(); diff --git a/atom/app/loader/loader.gyp b/atom/app/loader/loader.gyp new file mode 100755 index 0000000..2fe1408 --- /dev/null +++ b/atom/app/loader/loader.gyp @@ -0,0 +1,27 @@ +{ + 'targets': [ + { + 'target_name': 'wrt-loader', + 'type': 'executable', + 'sources': [ + 'wrt_loader_tizen.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/atom/app/loader/wrt_loader_tizen.cc b/atom/app/loader/wrt_loader_tizen.cc new file mode 100644 index 0000000..fa60f4a --- /dev/null +++ b/atom/app/loader/wrt_loader_tizen.cc @@ -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 +#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(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; +} diff --git a/electron.gyp b/electron.gyp index e53c89a..1823064 100644 --- a/electron.gyp +++ b/electron.gyp @@ -220,6 +220,17 @@ }, ], }], # OS=="linux" + ['is_tizen==1', { + 'dependencies': [ + 'atom/app/loader/loader.gyp:*', + ], + 'ldflags': [ + '-pie', + '-export-dynamic', + ], + 'cflags': [ '-fPIC' ], + 'cflags_cc': [ '-fPIC' ], + }], # is_tizen==1 ], }, # target <(project_name) { @@ -362,6 +373,10 @@ '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', { diff --git a/packaging/electron-efl.manifest b/packaging/electron-efl.manifest index 75b0fa5..e5dc2fa 100644 --- a/packaging/electron-efl.manifest +++ b/packaging/electron-efl.manifest @@ -2,4 +2,7 @@ + + + diff --git a/packaging/electron-efl.spec b/packaging/electron-efl.spec index 8f2ff28..6d4389a 100755 --- a/packaging/electron-efl.spec +++ b/packaging/electron-efl.spec @@ -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. @@ -79,26 +80,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 @@ -121,3 +131,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 index 0000000..632aa1f --- /dev/null +++ b/packaging/wrt.loader @@ -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/vendor/breakpad/breakpad.gyp b/vendor/breakpad/breakpad.gyp index ceebef8..e74d3f6 100644 --- a/vendor/breakpad/breakpad.gyp +++ b/vendor/breakpad/breakpad.gyp @@ -576,6 +576,10 @@ ], '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. diff --git a/vendor/brightray/brightray.gyp b/vendor/brightray/brightray.gyp index 21878a0..f12da7a 100644 --- a/vendor/brightray/brightray.gyp +++ b/vendor/brightray/brightray.gyp @@ -56,6 +56,10 @@ }, 'sources': [ '<@(brightray_sources)' ], 'conditions': [ + ['is_tizen==1', { + 'cflags': [ '-fPIC' ], + 'cflags_cc': [ '-fPIC' ], + }], ['use_efl==1', { 'direct_dependent_settings': { 'ldflags': [ -- 2.7.4