-#include "common.h"
+/*
+ * Copyright (c) 2016 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 "ni_common.h"
#include <cstdio>
#include <cstring>
#include <algorithm>
+#include <vector>
-std::vector<const char*> get_cmd_args(char** begin, char** end)
+std::vector<std::string> getCmdArgs(char** begin, char** end)
{
- for (char** itr = end-1; itr != begin-1; --itr)
- {
- if (itr != end && strncmp(*itr, "--", 2) == 0)
- {
- itr++;
- int len = end - itr;
- return std::vector<const char*>(len, *itr);
- }
- }
- return std::vector<const char*>(end-begin-1, *(begin+1));
+ std::vector<std::string> list;
+ for (char** itr = begin+1; itr != end; itr++) {
+ if (strncmp(*itr, "--", 2) != 0)
+ list.push_back(*itr);
+ }
+ return list;
}
-bool cmd_option_exists(char** begin, char** end, const std::string& option)
+bool cmdOptionExists(char** begin, char** end, const std::string& option)
{
- return std::find(begin, end, option) != end;
+ return std::find(begin, end, option) != end;
}
static void help(const char *argv0)
{
- const char* helpdesc =
- "Usage: %s [args] <root paths or pkg name>\n"
- " --help - Display this screen\n"
- " --system - Create NI under System DLLs\n"
- " --pkg - Create NI for package\n"
- "\n"
- "Example:\n"
- "Create native image for dlls and exes under platform directories\n"
- "%s --system\n"
- "Create native image under the package's bin and lib directory\n"
- "%s --pkg org.tizen.FormsGallery\n\n";
- printf(helpdesc, argv0, argv0, argv0);
+ const char* helpDesc =
+ "Usage: %s [args] <root paths or pkg name>\n"
+ " --help - Display this screen\n"
+ " --system - Create NI under System DLLs\n"
+ " --dll - Create NI for DLL\n"
+ " --pkg - Create NI for package\n"
+ " --dir - Create NI for directory\n"
+ " --r2r - Use ready-to-run option (default: FNV)\n"
+ " --reset-system - Remove System NI files\n"
+ " --reset-pkg - Remove App NI files\n"
+ " --regen-all-app - Re-generate All App NI files\n"
+ "\n"
+ "Example:\n"
+ "Create native image for dlls and exes under platform directories\n"
+ "%s --system\n"
+ "Create native image for dll\n"
+ "%s --dll /usr/bin/Tizen.Runtime.dll\n"
+ "Create native image under the package's bin and lib directory\n"
+ "%s --pkg org.tizen.FormsGallery\n\n";
+ printf(helpDesc, argv0, argv0, argv0, argv0);
}
int main(int argc, char* argv[])
{
- bool pkg_mode = false;
+ bool pkgMode = false;
+ bool dllMode = false;
+ bool dirMode = false;
+ bool rmPkgMode = false;
+ bool enableR2R = false;
+ bool pkgDllMode = false;
- if (cmd_option_exists(argv, argv+argc, "--help"))
- {
- help(argv[0]);
- return 0;
- }
+ NiCommonOption option = {std::string(), std::string(), std::string()};
+ if (initNICommon(&option) < 0) {
+ fprintf(stderr, "Fail to initialize NI Common\n");
+ return -1;
+ }
- if (cmd_option_exists(argv, argv+argc, "--system"))
- {
- create_ni_platform();
- return 0;
- }
+ if (cmdOptionExists(argv, argv+argc, "--r2r")) {
+ enableR2R = true;
+ }
- if (cmd_option_exists(argv, argv+argc, "--pkg"))
- {
- pkg_mode = true;
- }
+ if (cmdOptionExists(argv, argv+argc, "--help")) {
+ help(argv[0]);
+ return 0;
+ } else if (cmdOptionExists(argv, argv+argc, "--system")) {
+ createNiPlatform(enableR2R);
+ return 0;
+ } else if (cmdOptionExists(argv, argv+argc, "--dll")) {
+ dllMode = true;
+ } else if (cmdOptionExists(argv, argv+argc, "--pkg")) {
+ pkgMode = true;
+ } else if (cmdOptionExists(argv, argv+argc, "--dir")) {
+ dirMode = true;
+ } else if (cmdOptionExists(argv, argv+argc, "--reset-system")) {
+ removeNiPlatform();
+ return 0;
+ } else if (cmdOptionExists(argv, argv+argc, "--reset-pkg")) {
+ rmPkgMode = true;
+ } else if (cmdOptionExists(argv, argv+argc, "--regen-all-app")) {
+ regenerateAppNI();
+ return 0;
+ } else if (cmdOptionExists(argv, argv+argc, "--pkg-dll")) {
+ pkgDllMode = true;
+ } else {
+ help(argv[0]);
+ return 0;
+ }
- std::vector<const char*> args = get_cmd_args(argv, argv+argc);
+ std::vector<std::string> args = getCmdArgs(argv, argv+argc);
- if (args.size() < 1)
- {
- if (pkg_mode)
- fprintf(stderr, "Package name is missed\n");
- else
- fprintf(stderr, "DLL path is missed\n");
- help(argv[0]);
- return 1;
- }
+ if (args.size() < 1) {
+ if (pkgMode)
+ fprintf(stderr, "Package name is missed\n");
+ else if (dllMode)
+ fprintf(stderr, "DLL path is missed\n");
+ help(argv[0]);
+ return 1;
+ }
- if (pkg_mode)
- {
- for (const char* pkg : args)
- {
- if (create_ni_under_pkg_root(pkg) != 0)
- {
- fprintf(stderr, "Failed to get root path from [%s]\n", pkg);
- return 1;
- }
- }
- }
- else
- {
- create_ni_under_dirs(args.data(), args.size());
- }
+ if (pkgMode) {
+ for (const std::string pkg : args) {
+ if (createNiUnderPkgRoot(pkg, enableR2R) != 0) {
+ fprintf(stderr, "Failed to get root path from [%s]\n", pkg.c_str());
+ return -1;
+ }
+ }
+ } else if (pkgDllMode) {
+ if (createNiDllUnderPkgRoot(args[0], args[1], enableR2R) != 0) {
+ fprintf(stderr, "Failed to get root path from [%s]\n", args[0].c_str());
+ return -1;
+ }
+ } else if (rmPkgMode) {
+ for (const std::string pkg : args) {
+ if (removeNiUnderPkgRoot(pkg) != 0) {
+ fprintf(stderr, "Failed to get root path from [%s]\n", pkg.c_str());
+ return -1;
+ }
+ }
+ } else if (dllMode) {
+ for (const std::string dll : args)
+ createNiDll(dll, enableR2R);
+ } else if (dirMode) {
+ createNiUnderDirs(args.data(), args.size(), enableR2R);
+ }
- return 0;
+ return 0;
}