From: Atanas Gegov <atanas.ge...@bmw-carit.de>

This enables creating projects with the introduced
CMake nature. What is still upcoming are the
template projects and a corresponfig CMake
ManagedBuilder (CMake build toolchain for
Eclipse).
---
 .../ide/natures/YoctoSDKCMakeProjectNature.java    |   72 ++++++++++++++++++++
 .../sdk/ide/wizard/NewYoctoCProjectTemplate.java   |   12 ++--
 2 files changed, 80 insertions(+), 4 deletions(-)

diff --git 
a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/natures/YoctoSDKCMakeProjectNature.java
 
b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/natures/YoctoSDKCMakeProjectNature.java
index 86a9d45..b3d0f2c 100644
--- 
a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/natures/YoctoSDKCMakeProjectNature.java
+++ 
b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/natures/YoctoSDKCMakeProjectNature.java
@@ -10,11 +10,83 @@
  
*******************************************************************************/
 package org.yocto.sdk.ide.natures;
 
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.envvar.IContributedEnvironment;
+import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
+import org.eclipse.cdt.core.envvar.IEnvironmentVariableManager;
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
+import org.eclipse.cdt.core.settings.model.ICProjectDescription;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.yocto.sdk.ide.YoctoSDKPlugin;
+import org.yocto.sdk.ide.utils.YoctoSDKUtils;
 
 public class YoctoSDKCMakeProjectNature extends YoctoSDKProjectNature {
        public static final  String YoctoSDK_CMAKE_NATURE_ID = 
YoctoSDKPlugin.getUniqueIdentifier() + ".YoctoSDKCMakeNature";
 
+       // Considered poky's cmake.bbclass for this method
+       public static void extendProjectEnvironmentForCMake(IProject project) {
+               ICProjectDescription cpdesc = 
CoreModel.getDefault().getProjectDescription(project, true);
+               ICConfigurationDescription ccdesc = 
cpdesc.getActiveConfiguration();
+               IEnvironmentVariableManager manager = 
CCorePlugin.getDefault().getBuildEnvironmentManager();
+               IContributedEnvironment env = 
manager.getContributedEnvironment();
+               String delimiter = manager.getDefaultDelimiter();
+
+               env.addVariable("CCACHE", "", 
IEnvironmentVariable.ENVVAR_REPLACE, delimiter, ccdesc);
+
+               env.addVariable("OECMAKE_SOURCEPATH", "..",
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+
+               String oecmakeBuildPathString = "";
+               env.addVariable("OECMAKE_BUILDPATH", oecmakeBuildPathString,
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+               env.addVariable("EXTRA_OEMAKE", "-C " + oecmakeBuildPathString,
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+
+               String ccString = YoctoSDKUtils.getEnvValue(project, "CC");
+
+               if (!ccString.equals("") && !ccString.equals(" ")) {
+                       ccString.trim();
+                       ccString = ccString.split(" ")[0];
+               }
+
+               env.addVariable("OECMAKE_C_COMPILER", ccString,
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+               String cxxString = YoctoSDKUtils.getEnvValue(project, "CXX");
+
+               if (!cxxString.equals("") && !cxxString.equals(" ")) {
+                       cxxString.trim();
+                       cxxString = cxxString.split(" ")[0];
+               }
+
+               env.addVariable("OECMAKE_CXX_COMPILER", cxxString,
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+
+               String hostCCArchString = YoctoSDKUtils.getEnvValue(project, 
"HOST_CC_ARCH");
+               String toolchainOptionsString = 
YoctoSDKUtils.getEnvValue(project, "TOOLCHAIN_OPTIONS");
+               String cppFlagsString = YoctoSDKUtils.getEnvValue(project, 
"CPPFLAGS");
+               String cxxFlagsString = YoctoSDKUtils.getEnvValue(project, 
"CXXFLAGS");
+               String selectedOptimizationString = 
YoctoSDKUtils.getEnvValue(project, "SELECTED_OPTIMIZATION");
+               env.addVariable("OECMAKE_C_FLAGS", hostCCArchString + " " + 
toolchainOptionsString + " " + cppFlagsString,
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+               env.addVariable("OECMAKE_CXX_FLAGS", hostCCArchString + " " + 
toolchainOptionsString + " " + cxxFlagsString
+                               + " -fpermissive",
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+               env.addVariable("OECMAKE_C_FLAGS_RELEASE", 
selectedOptimizationString + " " + cppFlagsString + " -DNDEBUG",
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+               env.addVariable("OECMAKE_CXX_FLAGS_RELEASE", 
selectedOptimizationString + " " + cxxFlagsString + " -DNDEBUG",
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+
+               env.addVariable("OECMAKE_RPATH", "",
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+               env.addVariable("OECMAKE_PERLNATIVE_DIR", "",
+                               IEnvironmentVariable.ENVVAR_REPLACE, delimiter, 
ccdesc);
+
+               try {
+                       CoreModel.getDefault().setProjectDescription(project, 
cpdesc);
+               } catch (CoreException e) {
+                       e.printStackTrace();
+               }
+       }
 }
diff --git 
a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
 
b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
index 705dc99..dc9bca5 100644
--- 
a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
+++ 
b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
@@ -56,6 +56,7 @@ import org.yocto.sdk.ide.YoctoSDKMessages;
 import org.yocto.sdk.ide.YoctoSDKPlugin;
 import org.yocto.sdk.ide.YoctoUIElement;
 import org.yocto.sdk.ide.natures.YoctoSDKAutotoolsProjectNature;
+import org.yocto.sdk.ide.natures.YoctoSDKCMakeProjectNature;
 import org.yocto.sdk.ide.natures.YoctoSDKEmptyProjectNature;
 import org.yocto.sdk.ide.natures.YoctoSDKNatureUtils;
 import org.yocto.sdk.ide.natures.YoctoSDKProjectNature;
@@ -129,7 +130,7 @@ public class NewYoctoCProjectTemplate extends ProcessRunner 
{
                                pca.setArtifactExtension(artifactExtension);
                                info = pca.createProject(monitor, 
CCorePlugin.DEFAULT_INDEXER, isCProject);
 
-                               addNatures(project, false, isEmptyProject, 
isAutotoolsProject, monitor);
+                               addNatures(project, false, isEmptyProject, 
isAutotoolsProject, isCMakeProject, monitor);
 
                                info.setValid(true);
                                ManagedBuildManager.saveBuildInfo(project, 
true);
@@ -142,7 +143,7 @@ public class NewYoctoCProjectTemplate extends ProcessRunner 
{
 
                                
YoctoSDKChecker.checkIfGloballySelectedYoctoProfileIsValid();
 
-                               addNatures(project, true, isEmptyProject, 
isAutotoolsProject, monitor);
+                               addNatures(project, true, isEmptyProject, 
isAutotoolsProject, isCMakeProject, monitor);
 
                                //restoreAutoBuild(workspace);
                                IDiscoveredPathManager manager = 
MakeCorePlugin.getDefault().getDiscoveryManager();
@@ -181,7 +182,7 @@ public class NewYoctoCProjectTemplate extends ProcessRunner 
{
 }
 
        private void addNatures(IProject project, boolean projectExists, 
boolean isEmptyProject,
-                       boolean isAutotoolsProject, IProgressMonitor monitor)
+                       boolean isAutotoolsProject, boolean isCMakeProject, 
IProgressMonitor monitor)
                                        throws CoreException, 
YoctoGeneralException {
                YoctoSDKNatureUtils.addNature(project, 
YoctoSDKProjectNature.YoctoSDK_NATURE_ID, monitor);
 
@@ -201,7 +202,7 @@ public class NewYoctoCProjectTemplate extends ProcessRunner 
{
                if (isAutotoolsProject) {
                        AutotoolsNewProjectNature.addAutotoolsNature(project, 
monitor);
 
-                       if(!projectExists) {
+                       if (!projectExists) {
                                // For each IConfiguration, create a 
corresponding Autotools Configuration
                                for (IConfiguration cfg : pca.getConfigs()) {
                                        
AutotoolsConfigurationManager.getInstance().getConfiguration(project, 
cfg.getName(), true);
@@ -211,6 +212,9 @@ public class NewYoctoCProjectTemplate extends ProcessRunner 
{
 
                        YoctoSDKNatureUtils.addNature(project, 
YoctoSDKAutotoolsProjectNature.YoctoSDK_AUTOTOOLS_NATURE_ID, monitor);
                        
YoctoSDKAutotoolsProjectNature.configureAutotoolsOptions(project);
+               } else if (isCMakeProject) {
+                       YoctoSDKNatureUtils.addNature(project, 
YoctoSDKCMakeProjectNature.YoctoSDK_CMAKE_NATURE_ID, monitor);
+                       
YoctoSDKCMakeProjectNature.extendProjectEnvironmentForCMake(project);
                }
        }
 
-- 
1.7.9.5

_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to