Changeset 493763b in rtems-eclipse-plug-in


Ignore:
Timestamp:
Dec 1, 2008, 9:59:31 AM (10 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
762740b
Parents:
9e420b1
Message:

Added tool options parser.
Removed obsolete properties and preferences.

Location:
org.rtems.cdt.toolchain2/org/rtems/cdt
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • org.rtems.cdt.toolchain2/org/rtems/cdt/Activator.java

    r9e420b1 r493763b  
    5252                                        + "include $(RTEMS_CUSTOM)\n"
    5353                                        + "include $(PROJECT_ROOT)/make/leaf.cfg\n"
    54                                         + "\n"
    5554                                        + "all:\n"
    5655                                        + "\t@echo " + Constants.TOOL_ARCHIVER_KEY + "\n"
  • org.rtems.cdt.toolchain2/org/rtems/cdt/Constants.java

    r9e420b1 r493763b  
    1414
    1515public class Constants {
    16         public static final String [][] TARGETS = {
    17                 {"ARM", "arm"},
    18                 {"AVR", "avr"},
    19                 {"Blackfin", "bfin"},
    20                 {"Hitachi H8300", "h8300"},
    21                 {"Intel i386", "i386"},
    22                 {"Intel i686", "i686"},
    23                 {"MIPS", "mips"},
    24                 {"Motorola 68k or Freescale ColdFire", "m68k"},
    25                 {"PowerPC", "powerpc"},
    26                 {"SPARC", "sparc"},
    27                 {"SuperH", "sh"}
    28         };
    29 
    3016        public static final String PATH_SEPERATOR = System.getProperty( "path.separator");
    3117       
    3218        public static final String DEFAULT_BASE_PATH = "/opt/rtems-4.9";
    3319       
    34         public static final String DEFAULT_VERSION = "4.9";
    35        
    36         public static final int DEFAULT_TARGET_INDEX = 8;
    37        
    38         public static final String DEFAULT_TARGET_NAME = TARGETS [DEFAULT_TARGET_INDEX][0];
    39        
    40         public static final String DEFAULT_TARGET = TARGETS [DEFAULT_TARGET_INDEX][1];
    41        
    4220        public static final String DEFAULT_BSP_PATH = "/opt/rtems-4.9/powerpc-rtems4.9/psim";
    4321
    44         public static final String KEY_PREFIX = "org.rtems.cdt.key";
     22        public static final String KEY_PREFIX = "org.rtems.cdt";
    4523       
    4624        public static final String BASE_PATH_KEY = KEY_PREFIX + ".basePath";
    47        
    48         public static final String VERSION_KEY = KEY_PREFIX + ".version";
    49        
    50         public static final String TARGET_KEY = KEY_PREFIX + ".target";
    5125       
    5226        public static final String BSP_PATH_KEY = KEY_PREFIX + ".bspPath";
     
    5832        public static final String TOOL_ASSEMBLER_KEY = TOOL_KEY_PREFIX + ".assembler";
    5933       
    60         public static final String TOOL_COMPILER_C_KEY = TOOL_KEY_PREFIX + ".compiler.c";
     34        public static final String COMPILER_KEY_PREFIX = TOOL_KEY_PREFIX + ".compiler";
    6135       
    62         public static final String TOOL_COMPILER_CPP_KEY = TOOL_KEY_PREFIX + ".compiler.cpp";
     36        public static final String TOOL_COMPILER_C_KEY = COMPILER_KEY_PREFIX + ".c";
    6337       
    64         public static final String TOOL_LINKER_C_KEY = TOOL_KEY_PREFIX + ".linker.c";
     38        public static final String TOOL_COMPILER_CPP_KEY = COMPILER_KEY_PREFIX + ".cpp";
    6539       
    66         public static final String TOOL_LINKER_CPP_KEY = TOOL_KEY_PREFIX + ".linker.cpp";
     40        public static final String LINKER_KEY_PREFIX = TOOL_KEY_PREFIX + ".linker";
     41       
     42        public static final String TOOL_LINKER_C_KEY = LINKER_KEY_PREFIX + ".c";
     43       
     44        public static final String TOOL_LINKER_CPP_KEY = LINKER_KEY_PREFIX + ".cpp";
    6745       
    6846        public static final String TOOL_OPTIONS_KEY_POSTFIX = ".options";
  • org.rtems.cdt.toolchain2/org/rtems/cdt/Storage.java

    r9e420b1 r493763b  
    1717import java.io.InputStream;
    1818import java.io.InputStreamReader;
     19import java.util.LinkedList;
     20import java.util.List;
    1921import java.util.Map;
    2022
     
    2729
    2830public class Storage {
     31        private static final String OPTION_SEPARATOR = "\0";
     32       
     33        private static final String VALUE_START_TOKEN = "\t";
     34       
     35        private static final int EXPECT_OPTION = 0;
     36       
     37        private static final int EXPECT_COMMAND = 1;
     38       
     39        private static final int EXPECT_KEY = 2;
     40       
     41        private static final int TOOL_COMPLETE = 3;
     42                ;
    2943        public static String getPristineProperty( IProject project, String key) {
    3044                String value = null;
     
    4458                if (value == null) {
    4559                        if (key.startsWith( Constants.TOOL_KEY_PREFIX)) {
    46                                 reloadBSPInformation( project);
     60                                updateTools( project);
    4761                        } else {
    4862                                value = Activator.getDefault().getPreferenceStore().getString( key);
     
    6276        }
    6377       
    64         public static void reloadBSPInformation( IProject project) {
     78        public static void updateTools( IProject project) {
    6579                // Create make process builder
    6680                ProcessBuilder pb = new ProcessBuilder( "make");
     
    7892               
    7993                // Start make process and parse its output
     94                Process p = null;
    8095                try {
    81                         Process p = pb.start();
     96                        p = pb.start();
    8297                    InputStream is = p.getInputStream();
    8398                    BufferedReader br = new BufferedReader( new InputStreamReader( is));
    84                     String line;
    85                     while ((line = br.readLine()) != null) {
    86                             System.out.println(line);
     99                    String line = br.readLine();
     100                    String key = null;
     101                    String command = null;
     102                    List<String> options = new LinkedList<String>();
     103                    int state = EXPECT_KEY;
     104                    while (line != null) {
     105                        switch (state) {
     106                                case EXPECT_OPTION:
     107                                        if (line.startsWith( VALUE_START_TOKEN)) {
     108                                                options.add( line.substring( 1));
     109                                        } else {
     110                                                state = TOOL_COMPLETE;
     111                                                continue;
     112                                        }
     113                                        break;
     114                                case EXPECT_COMMAND:
     115                                        if (line.startsWith( VALUE_START_TOKEN)) {
     116                                                command = line.substring( 1);
     117                                                state = EXPECT_OPTION;
     118                                        } else {
     119                                                throw new IOException( "Unexpected line format");
     120                                        }
     121                                        break;
     122                                case EXPECT_KEY:
     123                                        if (line.length() > Constants.TOOL_KEY_PREFIX.length()) {
     124                                                key = line;
     125                                                state = EXPECT_COMMAND;
     126                                        } else {
     127                                                throw new IOException( "Unexpected line format");
     128                                        }
     129                                        break;
     130                                case TOOL_COMPLETE:
     131                                        updateTool( project, key, command, options);
     132                                        options.clear();
     133                                        state = EXPECT_KEY;
     134                                        continue;
     135                                default:
     136                                        throw new IOException( "Unexpected state");
     137                        }
     138                        line = br.readLine();
     139                    }
     140                    if (state == EXPECT_OPTION) {
     141                        updateTool( project, key, command, options);
    87142                    }
    88143                } catch (IOException e) {
    89144                        e.printStackTrace();
     145                } finally {
     146                        while (true) {
     147                                try {
     148                                        p.waitFor();
     149                                        break;
     150                                } catch (InterruptedException e) {
     151                                        continue;
     152                                }
     153                        }
    90154                }
     155        }
     156       
     157        private static void updateTool( IProject project, String toolKey, String command, List<String> options) {
     158                String optionsValue = new String();
     159                if (!options.isEmpty()) {
     160                        optionsValue = options.get( 0);
     161                        options.remove( 0);
     162                }
     163                for (String option : options) {
     164                        optionsValue += OPTION_SEPARATOR + option;
     165                }
     166                setProperty( project, toolKey, command);
     167                setProperty( project, toolKey + Constants.TOOL_OPTIONS_KEY_POSTFIX, optionsValue);
     168        }
     169       
     170        public static String [] getToolOptions( IProject project, String toolKey) {
     171                String optionsValue = getProperty( project, toolKey + Constants.TOOL_OPTIONS_KEY_POSTFIX);
     172               
     173                return optionsValue.split( OPTION_SEPARATOR);
    91174        }
    92175       
  • org.rtems.cdt.toolchain2/org/rtems/cdt/build/CommandLineGenerator.java

    r9e420b1 r493763b  
    2525                ITool tool,
    2626                String commandName,
    27                 String [] flags,
     27                String [] userOptions,
    2828                String outputFlag,
    2929                String outputPrefix,
     
    3535                IProject project = (IProject) tool.getParentResourceInfo().getParent().getOwner();
    3636               
    37                 // Determine main command name via the tool ID
     37                // Determine tool key via the tool ID
    3838            String id = tool.getId();
    39             String name = "-gcc";   
     39            String toolKey = "gcc";   
    4040            if (id.contains( "archiver")) {
    41                 name = "-ar";
     41                toolKey = Constants.TOOL_ARCHIVER_KEY;
    4242            } else if (id.contains( "assembler")) {
    43                 name = "-as";
     43                toolKey = Constants.TOOL_ASSEMBLER_KEY;
     44            } else if (id.contains( "c.compiler")) {
     45                toolKey = Constants.TOOL_COMPILER_C_KEY;
    4446            } else if (id.contains( "cpp.compiler")) {
    45                 name = "-g++";
     47                toolKey = Constants.TOOL_COMPILER_CPP_KEY;
     48            } else if (id.contains( "c.linker")) {
     49                toolKey = Constants.TOOL_LINKER_C_KEY;
    4650            } else if (id.contains( "cpp.linker")) {
    47                 name = "-g++";
     51                toolKey = Constants.TOOL_LINKER_CPP_KEY;
    4852            }
    4953               
    50             // Create and set command name
    51                 commandName = new String(
    52                         Storage.getProperty( project, Constants.TARGET_KEY)
    53                                 + "-rtems"
    54                                 + Storage.getProperty( project, Constants.VERSION_KEY)
    55                                 + name
    56                 );
     54            // Set command name
     55                commandName = Storage.getProperty( project, toolKey);
    5756                tool.setToolCommand( commandName);
     57               
     58                // Combine tool and user options
     59                String [] toolOptions = Storage.getToolOptions( project, toolKey);
     60                String options [] = new String [toolOptions.length + userOptions.length];
     61                System.arraycopy( toolOptions, 0, options, 0, toolOptions.length);
     62                System.arraycopy( userOptions, 0, options, toolOptions.length, userOptions.length);
    5863
    5964                return super.generateCommandLineInfo(
    6065                        tool,
    6166                        commandName,
    62                         flags,
     67                        options,
    6368                        outputFlag,
    6469                        outputPrefix,
  • org.rtems.cdt.toolchain2/org/rtems/cdt/build/RunScannerInfoProvider.java

    r9e420b1 r493763b  
    5252                fCompileCommand = fCompileCommand.append( "bin");
    5353                fCompileCommand = fCompileCommand.append(
    54                         Storage.getProperty( project, Constants.TARGET_KEY)
    55                                 + "-rtems"
    56                                 + Storage.getProperty( project, Constants.VERSION_KEY)
    57                                 + "-gcc"
     54                        Storage.getProperty( project, Constants.TOOL_COMPILER_C_KEY)
    5855                );
    5956               
  • org.rtems.cdt.toolchain2/org/rtems/cdt/preferences/PreferenceInitializer.java

    r9e420b1 r493763b  
    2222                IPreferenceStore store = Activator.getDefault().getPreferenceStore();
    2323                store.setDefault( Constants.BASE_PATH_KEY, Constants.DEFAULT_BASE_PATH);
    24                 store.setDefault( Constants.VERSION_KEY, Constants.DEFAULT_VERSION);
    25                 store.setDefault( Constants.TARGET_KEY, Constants.DEFAULT_TARGET);
    2624                store.setDefault( Constants.BSP_PATH_KEY, Constants.DEFAULT_BSP_PATH);
    2725        }
  • org.rtems.cdt.toolchain2/org/rtems/cdt/preferences/PreferencePage.java

    r9e420b1 r493763b  
    2525                super( GRID);
    2626                setPreferenceStore( Activator.getDefault().getPreferenceStore());
    27                 setDescription( "Select the RTEMS base installation path, the RTEMS version, the target architecture and the board support package (BSP) installation path.  This provides the default values for new projects.");
     27                setDescription( "Select the RTEMS base installation path and the board support package (BSP) installation path.  This provides the default values for all projects.");
    2828        }
    2929       
     
    3333                                Constants.BASE_PATH_KEY,
    3434                                "Base path:",
    35                                 getFieldEditorParent()
    36                         )
    37                 );             
    38                 addField(
    39                         new StringFieldEditor(
    40                                 Constants.VERSION_KEY,
    41                                 "Version:",
    42                                 getFieldEditorParent()
    43                         )
    44                 );     
    45                 addField(
    46                         new ComboFieldEditor(
    47                                 Constants.TARGET_KEY,
    48                                 "Target:",
    49                                 Constants.TARGETS,
    5035                                getFieldEditorParent()
    5136                        )
  • org.rtems.cdt.toolchain2/org/rtems/cdt/properties/PropertyPage.java

    r9e420b1 r493763b  
    1717import org.eclipse.core.runtime.IAdaptable;
    1818import org.eclipse.jface.preference.DirectoryFieldEditor;
    19 import org.eclipse.jface.preference.ComboFieldEditor;
    2019import org.eclipse.jface.preference.FieldEditorPreferencePage;
    2120import org.eclipse.jface.preference.IPreferenceStore;
    22 import org.eclipse.jface.preference.StringFieldEditor;
    2321import org.eclipse.ui.IWorkbenchPropertyPage;
    2422import org.eclipse.cdt.core.model.ICElement;
     
    4240                setPreferenceStore( mStore);
    4341               
    44                 setDescription( "You can change the RTEMS base installation path, the RTEMS version, the target architecture and the board support package (BSP) installation path.  This affects only the current project.");
     42                setDescription( "You can change the RTEMS base installation path and the board support package (BSP) installation path.  This affects only the current project.");
    4543        }
    4644       
     
    6260                // Setup store values
    6361                setupStoreValue( store, Constants.BASE_PATH_KEY);
    64                 setupStoreValue( store, Constants.VERSION_KEY);
    65                 setupStoreValue( store, Constants.TARGET_KEY);
    6662                setupStoreValue( store, Constants.BSP_PATH_KEY);
    6763
     
    7167                                Constants.BASE_PATH_KEY,
    7268                                "Base path:",
    73                                 getFieldEditorParent()
    74                         )
    75                 );             
    76                 addField(
    77                         new StringFieldEditor(
    78                                 Constants.VERSION_KEY,
    79                                 "Version:",
    80                                 getFieldEditorParent()
    81                         )
    82                 );     
    83                 addField(
    84                         new ComboFieldEditor(
    85                                 Constants.TARGET_KEY,
    86                                 "Target:",
    87                                 Constants.TARGETS,
    8869                                getFieldEditorParent()
    8970                        )
     
    10788                // Set the new properties
    10889                setProperty( Constants.BASE_PATH_KEY);
    109                 setProperty( Constants.VERSION_KEY);
    110                 setProperty( Constants.TARGET_KEY);
    11190                setProperty( Constants.BSP_PATH_KEY);
    11291               
    113                 // Reload BSP information
    114                 Storage.reloadBSPInformation( mProject);
     92                // Update tools
     93                Storage.updateTools( mProject);
    11594
    11695                return true;
Note: See TracChangeset for help on using the changeset viewer.