Title: Add build-native for new cli 60/11560/2
authorhyunsik.noh <hyunsik.noh@samsung.com>
Wed, 30 Oct 2013 05:31:25 +0000 (14:31 +0900)
committerHyunsik Noh <hyunsik.noh@samsung.com>
Wed, 30 Oct 2013 06:53:23 +0000 (23:53 -0700)
Change-Id: If17c10e6ca7ce66da501323384b5e7c4c68bc3f9
Signed-off-by: hyunsik.noh <hyunsik.noh@samsung.com>
MANIFEST.MF [deleted file]
org.tizen.ncli.ide/META-INF/MANIFEST.MF
org.tizen.ncli.ide/src/org/tizen/ncli/ide/autocomplete/TizenAutoComplete.java
org.tizen.ncli.ide/src/org/tizen/ncli/ide/shell/AbstractCLI.java
org.tizen.ncli.ide/src/org/tizen/ncli/ide/shell/BuildNativeCLI.java
org.tizen.ncli.ide/src/org/tizen/ncli/ide/subcommands/AbstractSubCommand.java
org.tizen.ncli.ide/src/org/tizen/ncli/ide/subcommands/BuildNative.java [new file with mode: 0644]
org.tizen.ncli.ide/src/org/tizen/ncli/ide/subcommands/BuildNativeCLICommand.java [new file with mode: 0644]
org.tizen.ncli.ide/tizen.sh

diff --git a/MANIFEST.MF b/MANIFEST.MF
deleted file mode 100644 (file)
index 2780568..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-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
index 3c05fda..d67f6f1 100644 (file)
@@ -9,6 +9,8 @@ Require-Bundle: org.tizen.common;bundle-version="2.0.0",
  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
index 5f0865c..dbad0e2 100644 (file)
@@ -39,7 +39,7 @@ public class TizenAutoComplete {
     
     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"},
index 7cea7e3..4937905 100644 (file)
@@ -35,36 +35,40 @@ import org.slf4j.LoggerFactory;
 \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
index 61f6367..88a4dca 100644 (file)
@@ -4,8 +4,8 @@
  * 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
index 71a1afc..9dbb5b5 100644 (file)
@@ -36,35 +36,41 @@ import org.tizen.ncli.ide.core.config.NCLIConfigLoader;
 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
@@ -72,15 +78,16 @@ abstract public class AbstractSubCommand<T> {
      * \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
diff --git a/org.tizen.ncli.ide/src/org/tizen/ncli/ide/subcommands/BuildNative.java b/org.tizen.ncli.ide/src/org/tizen/ncli/ide/subcommands/BuildNative.java
new file mode 100644 (file)
index 0000000..7db18ff
--- /dev/null
@@ -0,0 +1,5 @@
+package org.tizen.ncli.ide.subcommands;
+
+public class BuildNative {
+
+}
diff --git a/org.tizen.ncli.ide/src/org/tizen/ncli/ide/subcommands/BuildNativeCLICommand.java b/org.tizen.ncli.ide/src/org/tizen/ncli/ide/subcommands/BuildNativeCLICommand.java
new file mode 100644 (file)
index 0000000..2b1d9db
--- /dev/null
@@ -0,0 +1,129 @@
+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;
+    }
+}
index dfac996..a7bd843 100755 (executable)
@@ -17,6 +17,8 @@ for ARG in "$@" ; do
        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"