+++ /dev/null
-Manifest-Version: 1.0\r
-Ant-Version: Apache Ant 1.8.2\r
-Created-By: 1.6.0_24-b07 (Sun Microsystems Inc.)\r
-Main-Class: org/tizen/ncli/ide/autocomplete/TizenAutoComplete\r
-\r
org.tizen.common.verrari,
org.tizen.common.verrari.realm
Import-Package:
+ org.tizen.nativecommon.build,
+ org.tizen.nativecommon.build.exception,
org.tizen.web.builder,
org.tizen.web.builder.exception,
org.tizen.web.common
public static String[][] options = {
{"cli-config", "--list --global"},
- {"build-native", "--predefine-option --platform --toolchain --arch"},
+ {"build-native", "--predefine-option --platform --toolchain --build-target --build-configuration"},
{"build-web", "--output -opt --optimize -euf --exclude-uifw -efum --exclude-uifw-min"},
{"sign", "--profile"},
{"package", "-t --type --sign -ref --ref-project"},
\r
/**\r
* Implemented common function of CLI options\r
+ * \r
* @author Harry Hyeongseok Heo{@literal <hyeongseok.heo@samsung.com>} (S-core)\r
*/\r
public abstract class AbstractCLI {\r
- protected Logger log = LoggerFactory.getLogger(getClass());\r
- \r
- @Option(name="--" , metaVar="target path" , usage="Specify where is the root path for the command")\r
+ protected Logger log = LoggerFactory.getLogger(getClass());\r
+\r
+ @Option(name = "--", metaVar = "target path", usage = "Specify where is the root path for the command")\r
public File targetPath;\r
- \r
+\r
+ @Option(name = "--current-workspace-path", metaVar = "current workspace path", usage = "Specify where is the root path for the command as a default")\r
+ public String currentWorkspacePath;\r
+\r
protected PrintWriter output = new PrintWriter(System.out);;\r
- \r
+\r
public final void execute(String[] args) {\r
parseArgument(args);\r
execute();\r
}\r
- \r
+\r
/**\r
* @param args\r
*/\r
private void parseArgument(String[] args) {\r
log.trace("Could not use parsing argument again!");\r
-// log.trace("parseArgument...");\r
-// CmdLineParser parser = new CmdLineParser(this);\r
-// \r
-// try {\r
-// parser.parseArgument(args);\r
-// } catch (CmdLineException e) {\r
-// e.printStackTrace();\r
-// System.err.println("Error occurred during parsing the arguments.");\r
-// System.exit(1);\r
-// }\r
+ // log.trace("parseArgument...");\r
+ // CmdLineParser parser = new CmdLineParser(this);\r
+ //\r
+ // try {\r
+ // parser.parseArgument(args);\r
+ // } catch (CmdLineException e) {\r
+ // e.printStackTrace();\r
+ // System.err.println("Error occurred during parsing the arguments.");\r
+ // System.exit(1);\r
+ // }\r
}\r
\r
public abstract void execute();\r
* Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.\r
*\r
* Contact:\r
+ * Hyunsik Noh <hyunsik.noh@samsung.com>\r
* Hyeongseok Heo <hyeongseok.heo@samsung.com>\r
- * Kangho Kim <kh5325.kim@samsung.com>\r
* \r
* Licensed under the Apache License, Version 2.0 (the "License");\r
* you may not use this file except in compliance with the License.\r
*/\r
package org.tizen.ncli.ide.shell;\r
\r
+import org.kohsuke.args4j.Option;\r
import org.slf4j.Logger;\r
import org.slf4j.LoggerFactory;\r
+import org.tizen.ncli.ide.subcommands.BuildNative;\r
+import org.tizen.ncli.ide.subcommands.BuildNativeCLICommand;\r
\r
/**\r
- * @author Harry Hyeongseok Heo{@leteral <hyeongseok.heo@samsung.com>} (S-core)\r
+ * @author Hyunsik Noh{@leteral <hyunsik.noh@samsung.com>} (S-core)\r
*/\r
-public class BuildNativeCLI extends AbstractCLI{\r
+public class BuildNativeCLI extends AbstractCLI {\r
private Logger log = LoggerFactory.getLogger(getClass());\r
\r
- /* (non-Javadoc)\r
+ @Option(name = "--platform", usage = "Platform id when create new build target")\r
+ private String platform;\r
+\r
+ @Option(name = "--toolchain", usage = "Toolchain id when create new build target")\r
+ private String toolchain;\r
+\r
+ @Option(name = "--build-target", required = true, usage = "")\r
+ private String buildTarget;\r
+\r
+ @Option(name = "--build-configuration", required = true, usage = "")\r
+ private String buildConfiguration;\r
+\r
+ @Option(name = "--predefine-option", usage = "")\r
+ private String predefineOption;\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
* @see org.tizen.ncli.ide.shell.AbstractCLI#execute()\r
*/\r
@Override\r
public void execute() {\r
- // TODO Auto-generated method stub\r
- \r
+ log.trace("Execute BuildWebCLI...");\r
+\r
+ BuildNativeCLICommand command = new BuildNativeCLICommand();\r
+\r
+ command.setTargetPath(targetPath);\r
+ command.setCurrentWorkspacePath(currentWorkspacePath);\r
+ command.setPlatform(platform);\r
+ command.setToolchain(toolchain);\r
+ command.setBuildTarget(buildTarget);\r
+ command.setBuildConfiguration(buildConfiguration);\r
+ command.setPredefineOption(predefineOption);\r
+\r
+ BuildNative runCommand = command.runCommand();\r
}\r
\r
-}\r
+}
\ No newline at end of file
import org.tizen.ncli.ide.core.config.TizenCLIConfigProvider;\r
import org.tizen.ncli.ide.exec.NewCommandLineExecutor;\r
\r
-\r
/**\r
* This class provides common environment to other SubCommand.\r
* \r
* @author Harry Hyeongseok Heo{@literal <hyeongseok.heo@samsung.com>} (S-core)\r
*/\r
abstract public class AbstractSubCommand<T> {\r
- protected final Logger log = LoggerFactory.getLogger( getClass() );\r
+ protected final Logger log = LoggerFactory.getLogger(getClass());\r
protected File targetPath;\r
- \r
+ protected String currentWorkspacePath;\r
+\r
/**\r
- * @param targetPath the targetPath to set\r
- */\r
- public void setTargetPath(File targetPath) {\r
- this.targetPath = targetPath;\r
- }\r
+ * @param targetPath\r
+ * the targetPath to set\r
+ */\r
+ public void setTargetPath(File targetPath) {\r
+ this.targetPath = targetPath;\r
+ }\r
+\r
+ public void setCurrentWorkspacePath(String currentWorkspacePath) {\r
+ this.currentWorkspacePath = currentWorkspacePath;\r
+ }\r
\r
- /**\r
- * This method is called by CLI entry class.<p>\r
- * And then call <code>call()</code> method. \r
+ /**\r
+ * This method is called by CLI entry class.\r
+ * <p>\r
+ * And then call <code>call()</code> method.\r
* \r
* @return T\r
* @throws Exception\r
*/\r
public T runCommand() {\r
initializeConfig();\r
- \r
+\r
T ret = call();\r
- \r
+\r
return ret;\r
}\r
\r
* \r
*/\r
private void initializeConfig() {\r
- Preference.register( "OS", new EnvironmentProvider() );\r
- Preference.register( "JVM", new SystemPropertiesProvider() );\r
+ Preference.register("OS", new EnvironmentProvider());\r
+ Preference.register("JVM", new SystemPropertiesProvider());\r
Preference.register(CLIConstant.TIZEN_CLI_GLOBAL_KEY, new TizenCLIConfigProvider(NCLIConfigLoader.loadGlobalConf()));\r
Preference.register(CLIConstant.TIZEN_CLI_LOCAL_KEY, new TizenCLIConfigProvider(NCLIConfigLoader.loadLocalConf()));\r
}\r
- \r
+\r
/**\r
- * Execute command logic \r
- * <p>This method should be called only by {@link #runCommand()}<br>\r
+ * Execute command logic\r
+ * <p>\r
+ * This method should be called only by {@link #runCommand()}<br>\r
* <b>Do not call this directly</b>\r
* \r
*/\r
--- /dev/null
+package org.tizen.ncli.ide.subcommands;
+
+public class BuildNative {
+
+}
--- /dev/null
+package org.tizen.ncli.ide.subcommands;
+
+import java.io.File;
+
+import org.tizen.common.core.application.InstallPathConfig;
+import org.tizen.common.util.HostUtil;
+import org.tizen.common.util.StringUtil;
+import org.tizen.nativecommon.build.CommonConfigurationManager;
+import org.tizen.nativecommon.build.SmartBuildInterface;
+import org.tizen.nativecommon.build.exception.SBIException;
+
+public class BuildNativeCLICommand extends AbstractSubCommand<BuildNative> {
+ private String platformId;
+ private String toolchainId;
+ private String buildConfiguration;
+ private String predefineOption;
+
+ private SmartBuildInterface sbi = null;
+
+ private String idePath = null;
+ private String importPath = null;
+ private String buildPath = null;
+ private String buildTarget = null;
+ private String dataPath = null;
+ private String HEADLESS_CMD = "%s/eclipse -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild "
+ + "-import %s "
+ + "-build %s "
+ + "-data %s "
+ + "-Ea CLI=true "
+ + "-T org.tizen.nativecpp.tool.sbi.gnu.cpp.compiler sbi.gnu.cpp.compiler.option=%s";
+
+ private void makeBuildCommand() {
+ sbi = SmartBuildInterface.getInstance();
+
+ if (targetPath == null) {
+ importPath = currentWorkspacePath;
+ } else {
+ importPath = targetPath.getAbsolutePath();
+ }
+
+ idePath = InstallPathConfig.getSDKPath() + File.separatorChar + "ide";
+
+ buildPath = StringUtil.getLastStringAfter(importPath, "/") + "/" + buildConfiguration;
+ File file = new File(buildPath);
+ if (!file.exists()) {
+ file.mkdir();
+ }
+ dataPath = importPath + "/../" + "headless";
+
+ log.debug("Import Path: " + importPath);
+ log.debug("Ide Path: " + idePath);
+ log.debug("Build Path: " + buildPath);
+ log.debug("Data Path: " + dataPath);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.tizen.ncli.ide.subcommands.AbstractSubCommand#call()
+ */
+ @Override
+ protected BuildNative call() {
+ makeBuildCommand();
+ try {
+ if (isValidPair(platformId, toolchainId)) {
+ createTarget(buildTarget, platformId, toolchainId);
+ }
+ } catch (SBIException e) {
+ System.out.println("[Fail] Create the build target: " + e.getMessage());
+ return null;
+ }
+
+ String command = String.format(HEADLESS_CMD, idePath, importPath, buildPath, dataPath, buildTarget);
+ System.out.println(command);
+ System.out.println(HostUtil.returnExecute(command));
+
+ return null;
+ }
+
+ private boolean isValidPair(String rootstrapId, String toolchainId) throws SBIException {
+ if (rootstrapId == null || toolchainId == null) {
+ return false;
+ }
+ return ((isSameArch(rootstrapId, toolchainId)) && (supportToolchainType(rootstrapId, toolchainId)));
+ }
+
+ private void createTarget(String targetId, String rootstrapId, String toolchainId) throws SBIException {
+ sbi.create(targetId, rootstrapId, toolchainId);
+ }
+
+ private boolean isSameArch(String rootstrapId, String toolchainId) throws SBIException {
+ String platformArch = getPlatformArch(rootstrapId);
+ String toolchainArch = getToolchainArch(toolchainId);
+ return CommonConfigurationManager.isSameArchType(platformArch, toolchainArch);
+ }
+
+ private boolean supportToolchainType(String rootstrapId, String toolchainId) throws SBIException {
+ String toolchainType = sbi.getToolchainTypeFromToolchainID(toolchainId);
+ return sbi.doesRootstrapSupportToolchainType(rootstrapId, toolchainType);
+ }
+
+ private String getPlatformArch(String rootstrapId) throws SBIException {
+ return sbi.getArchitectureFromRootstrapID(rootstrapId);
+ }
+
+ private String getToolchainArch(String toolchainId) throws SBIException {
+ return sbi.getArchitectureFromToolchainID(toolchainId);
+ }
+
+ public void setPlatform(String platform) {
+ this.platformId = platform;
+ }
+
+ public void setToolchain(String toolchain) {
+ this.toolchainId = toolchain;
+ }
+
+ public void setBuildTarget(String buildTarget) {
+ this.buildTarget = buildTarget;
+ }
+
+ public void setBuildConfiguration(String buildConfiguration) {
+ this.buildConfiguration = buildConfiguration;
+ }
+
+ public void setPredefineOption(String predefineOption) {
+ this.predefineOption = predefineOption;
+ }
+}
ARGS="$ARGS $(escapeSpace $ARG)"
done
+ARGS="$ARGS --current-workspace-path $CURRENT_WORKSPACE_PATH"
+
MAIN=org.tizen.ncli.ide.shell.Main
EXEC="java -cp $CLASSPATH $MAIN $ARGS"