</category>
<command
- name="Build"
+ name="Configure and Build Project"
categoryId="rtosBuild.commands.category"
id="rtosBuild.commands.buildCommand">
</command>
class="org.tizen.rt.product.RtProjectNature">
</run>
</runtime>
+ <builder
+ id="org.tizen.rt.ide.builder.RtBuilder">
+ </builder>
<requires-nature
id="org.eclipse.cdt.core.cnature">
</requires-nature>
<!-- Make Target -->
<activityPatternBinding activityId="org.tizen.rt.activity.native.project" isEqualityPattern="true" pattern="org.eclipse.cdt.make.ui/org.eclipse.cdt.make.ui.CViewCreateTargetAction"/>
<activityPatternBinding activityId="org.tizen.rt.activity.native.project" isEqualityPattern="true" pattern="org.eclipse.cdt.make.ui/org.eclipse.cdt.make.ui.NavigatorBuildLastTargetAction"/>
- <activityPatternBinding activityId="org.tizen.rt.activity.native.project" isEqualityPattern="true" pattern="org.eclipse.cdt.make.ui/org.eclipse.cdt.make.ui.NavigatorBuildTargetAction"/>
- <!-- Convert To -->
- <activityPatternBinding activityId="org.tizen.rt.activity.native.project" isEqualityPattern="true" pattern="org.eclipse.cdt.managedbuilder.ui/org.eclipse.cdt.managedbuilder.ui.ConvertTargetAction"/>
+ <activityPatternBinding
+ activityId="org.tizen.rt.activity.native.project"
+ isEqualityPattern="true"
+ pattern="org.eclipse.cdt.make.ui/org.eclipse.cdt.make.ui.NavigatorBuildTargetAction">
+ </activityPatternBinding>agedbuilder.ui.ConvertTargetAction"/>
<!-- Configure popup -->
<activityPatternBinding activityId="org.tizen.rt.activity.common.project" isEqualityPattern="true" pattern="org.eclipse.wst.jsdt.ui/org.eclipse.wst.jsdt.internal.web.ui.convertProjects"/>
<activityPatternBinding activityId="org.tizen.rt.activity.common.project" isEqualityPattern="true" pattern="org.eclipse.pde.ui/org.eclipse.pde.ui.ConvertedProjectWizard"/>
<activityPatternBinding activityId="org.tizen.rt.activity.common" isEqualityPattern="true" pattern="org.eclipse.ui.externaltools/org.eclipse.ui.externaltools.ExternalToolMenuDelegateToolbar"/>
<!-- Project menu -->
<activityPatternBinding activityId="org.tizen.rt.activity.common" isEqualityPattern="true" pattern="org.eclipse.ui.project.buildAll"/>
- <activityPatternBinding activityId="org.tizen.rt.activity.common" isEqualityPattern="true" pattern="org.eclipse.ui.project.buildProject"/>
<activityPatternBinding activityId="org.tizen.rt.activity.common" isEqualityPattern="false" pattern="Build &Working Set"/><!-- not working because menu id is null -->
<activityPatternBinding activityId="org.tizen.rt.activity.common" isEqualityPattern="true" pattern="org.eclipse.ui.project.cleanAction"/>
<activityPatternBinding activityId="org.tizen.rt.activity.common" isEqualityPattern="true" pattern="org.eclipse.ui.project.buildAutomatically"/>
</extension>
+ <extension
+ id="org.tizen.rt.ide.builder.RtBuilder"
+ name="RtBuilder"
+ point="org.eclipse.core.resources.builders">
+ <builder
+ hasNature="true">
+ <run
+ class="org.tizen.rt.ide.builder.RtBuilder">
+ </run>
+ </builder>
+ </extension>
<!-- temporary disabled debug in 1.2 release
<extension
point="org.eclipse.debug.ui.launchShortcuts">
# eclipse Workbench related preferences
#org.eclipse.ui.ide/SAVE_ALL_BEFORE_BUILD=true
#org.eclipse.core.resources/refresh.enabled=true
-#org.eclipse.core.resources/description.autobuilding=true
+org.eclipse.core.resources/description.autobuilding=false
org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = true
org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false
org.eclipse.ui/DOCK_PERSPECTIVE_BAR=topRight
package org.tizen.rt.ide.build;
-import java.lang.reflect.InvocationTargetException;
-
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.IPageChangedListener;
import org.eclipse.jface.dialogs.PageChangedEvent;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.wizard.IWizardContainer;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Shell;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.tizen.rt.ide.Messages;
-import org.tizen.rt.ide.commands.CommandManager;
-import org.tizen.rt.ide.console.ConsoleManager;
+import org.tizen.rt.ide.builder.RtBuilder;
/**
* RtosWizard
*/
public class BuildWizard extends Wizard implements IPageChangedListener {
- private ConsoleManager consoleManager;
private Shell shell;
private IProject project;
private final String GUIDE_DIALOG_NAME = "Build Option Selection"; //$NON-NLS-1$
private BuildWizardPage wizardPage = null;
- private final Logger logger = LoggerFactory.getLogger(BuildWizard.class);
public BuildWizard(Shell shell, IProject project) {
super();
this.setNeedsProgressMonitor(true);
this.shell = shell;
this.project = project;
- this.consoleManager = new ConsoleManager(true);
}
@Override
public boolean performFinish() {
- IWizardContainer container = getContainer();
- try {
- container.run(true, false, new IRunnableWithProgress() {
- @Override
- public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
- // String selectedDeviceName =
- monitor.beginTask("Build", 4); //$NON-NLS-1$
- BuildOption buildOption = BuildWizardDialog.getSelectionOption();
- consoleManager.println("Build Option : " + buildOption.getBuildOption()); //$NON-NLS-1$
- monitor.worked(1);
-
- String toolchainPath = BuildWizardDialog.getSelectionToolchain();
- monitor.worked(1);
-
- CommandManager.runBuild(project, buildOption, toolchainPath, consoleManager, monitor);
- try {
- project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
- } catch (CoreException e) {
- logger.error(e.getMessage(), e);
- }
+ RtBuilder.scheduleRebuild(project);
- monitor.done();
- }
- });
- } catch (InvocationTargetException e) {
- logger.error(e.getMessage(), e);
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
return true;
}
--- /dev/null
+/*
+* Common
+*
+* Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* jm.jemin.kim <jm.jemin.kim@samsung.com>
+* Gyeongmin Ju <gyeongmin.ju@samsung.com>
+* Daeryong Park <bdragon.park@samsung.com>
+* Hyeongseok Heo <harry.heo@samsung.com>
+*
+* 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.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.rt.ide.builder;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.core.resources.ICommand;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.rt.ide.build.BuildOption;
+import org.tizen.rt.ide.build.BuildWizardDialog;
+import org.tizen.rt.ide.commands.CommandManager;
+import org.tizen.rt.ide.console.ConsoleManager;
+
+/**
+ * RtBuilder
+ * @author gyeongmin.ju{@literal <gyeongmin.ju>} (S-Core)
+ */
+public class RtBuilder extends IncrementalProjectBuilder {
+
+ public static String BUILDER_ID = "org.tizen.rt.ide.builder.RtBuilder";
+
+ private final Logger logger = LoggerFactory.getLogger(RtBuilder.class);
+
+ public RtBuilder() {
+ }
+
+ @Override
+ protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException {
+ IProject project = getProject();
+
+ String toolchainPath = BuildWizardDialog.getSelectionToolchain();
+ BuildOption buildOption = BuildWizardDialog.getSelectionOption();
+
+ ConsoleManager consoleManager = new ConsoleManager(true);
+
+ boolean result = CommandManager.runBuild(project, buildOption, toolchainPath, consoleManager, monitor);
+ try {
+ project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
+ } catch (CoreException e) {
+ logger.error(e.getMessage(), e);
+ }
+
+ forgetLastBuiltState();
+
+ if (result) {
+ return new IProject[] { project };
+ } else {
+ return null;
+ }
+ }
+
+ public static void addBuilderToProject(IProject fProject) throws CoreException {
+ IProjectDescription desc = fProject.getDescription();
+ ICommand[] commands = desc.getBuildSpec();
+ for (int i = 0; i < commands.length; i++) {
+ if (commands[i].getBuilderName().equals(BUILDER_ID)) {
+ return;
+ }
+ }
+
+ ICommand command = desc.newCommand();
+ command.setBuilderName(BUILDER_ID);
+
+ ICommand[] newCommands = new ICommand[commands.length + 1];
+ System.arraycopy(commands, 0, newCommands, 1, commands.length);
+ newCommands[0] = command;
+ desc.setBuildSpec(newCommands);
+
+ fProject.setDescription(desc, null);
+ }
+
+ public static void removeBuilderFromProject(IProject fProject) throws CoreException {
+ IProjectDescription description = fProject.getDescription();
+ List<ICommand> builders = new ArrayList<ICommand>(
+ Arrays.asList(description.getBuildSpec()));
+
+ Iterator<ICommand> iter = builders.iterator();
+ while (iter.hasNext()) {
+ ICommand curBuilder = iter.next();
+ if (curBuilder.getBuilderName().equals(BUILDER_ID)) {
+ iter.remove();
+ }
+ }
+
+ description.setBuildSpec(builders.toArray(new ICommand[builders
+ .size()]));
+ fProject.setDescription(description, null);
+ }
+
+ public static void scheduleRebuild(final IProject project) {
+ WorkspaceJob buildJob = new WorkspaceJob("Building " + project.getName()) {
+ @Override
+ public boolean belongsTo(Object family) {
+ return ResourcesPlugin.FAMILY_MANUAL_BUILD.equals(family);
+ }
+
+ @Override
+ public IStatus runInWorkspace(IProgressMonitor monitor)
+ throws CoreException {
+ project.build(IncrementalProjectBuilder.FULL_BUILD, monitor);
+ return Status.OK_STATUS;
+ }
+ };
+
+ buildJob.setRule(ResourcesPlugin.getWorkspace().getRuleFactory().buildRule());
+ buildJob.setUser(true);
+ buildJob.schedule();
+ }
+}
protected int execute(IProject project, BuildOption buildOption, String toolchainPath, ConsoleManager consoleManager,
IProgressMonitor monitor) {
+ if (buildOption == null) {
+ consoleManager.println("Build option not selected."); //$NON-NLS-1$
+ consoleManager.println("Execute configure before the build operation."); //$NON-NLS-1$
+ return 1;
+ }
+
+ consoleManager.println("Build Option : " + buildOption.getBuildOption()); //$NON-NLS-1$
+
String activeProjectPath = project.getLocation().toString();
String sdkPath = SDKUtil.getSdkPath();
File buildScriptFile = new File(boardPath, getScriptFileName());
if (!buildScriptFile.exists()) {
- buildScriptFile = new File(sdkPath, "rt-ide" + File.separator + "resources" + File.separator + "scripts" + File.separator + getScriptFileName());
+ buildScriptFile = new File(sdkPath, "rt-ide" + File.separator + "resources" + File.separator +
+ "scripts" + File.separator + getScriptFileName());
if (!buildScriptFile.exists()) {
consoleManager.println("Can not found xml file of build spec."); //$NON-NLS-1$
return 1;
}
return result;
-
}
/*
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tizen.rt.ide.Activator;
+import org.tizen.rt.ide.builder.RtBuilder;
public class RtProjectNature implements IProjectNature {
*/
@Override
public void configure() throws CoreException {
+ RtBuilder.addBuilderToProject(fProject);
}
/*
*/
@Override
public void deconfigure() throws CoreException {
+ RtBuilder.removeBuilderFromProject(fProject);
}
/*