mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
dist: Add tool for generating Eclipse setting XML files
Usage: make eclipsesym (in application directory)
This commit is contained in:
parent
d804969f35
commit
b54c9d21ee
2
.gitignore
vendored
2
.gitignore
vendored
@ -25,4 +25,6 @@ cachegrind.out*
|
||||
# Codelite (among others) project files
|
||||
*.project
|
||||
|
||||
# Eclipse symbol file (output from make eclipsesym)
|
||||
eclipsesym.xml
|
||||
/toolchain
|
||||
|
@ -285,6 +285,16 @@ objdump:
|
||||
exit 1; }
|
||||
$(PREFIX)objdump -S -D -h $(ELFFILE) | less
|
||||
|
||||
# Generate an XML file containing all macro definitions and include paths for
|
||||
# use in Eclipse CDT
|
||||
.PHONY: eclipsesym eclipsesym.xml $(CURDIR)/eclipsesym.xml
|
||||
eclipsesym: $(CURDIR)/eclipsesym.xml
|
||||
eclipsesym.xml: $(CURDIR)/eclipsesym.xml
|
||||
|
||||
$(CURDIR)/eclipsesym.xml:
|
||||
$(AD)printf "%s\n" $(CC) $(CFLAGS) $(INCLUDES) | \
|
||||
$(RIOTBASE)/dist/tools/eclipsesym/cmdline2xml.sh > $@
|
||||
|
||||
# Extra make goals for testing and comparing changes.
|
||||
include $(RIOTBASE)/Makefile.buildtests
|
||||
|
||||
|
33
dist/tools/eclipsesym/README.md
vendored
Normal file
33
dist/tools/eclipsesym/README.md
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
cmdline2xml.sh
|
||||
==============
|
||||
|
||||
Export all command line include paths and macro definitions to an XML file
|
||||
suitable for import in Eclipse CDT.
|
||||
|
||||
Instrucions
|
||||
-----------
|
||||
|
||||
The Eclipse project must be located at "/RIOT" inside your Eclipse workspace,
|
||||
otherwise change cmdline2xml.sh accordingly (ECLIPSE_PROJECT_NAME=RIOT).
|
||||
|
||||
In the shell:
|
||||
|
||||
cd to application directory (e.g. examples/hello-world)
|
||||
make eclipsesym
|
||||
|
||||
In Eclipse:
|
||||
|
||||
1. Open the project properties, menu Project->Properties
|
||||
2. Select C/C++ General->Paths and Symbols
|
||||
3. (optional) Click Restore Defaults to delete any existing macros and include paths
|
||||
4. Click Import Settings...
|
||||
5. Select `eclipsesym.xml` in your application directory and press Finish
|
||||
6. Rebuild C/C++ index, menu Project->C/C++ Index->Rebuild
|
||||
|
||||
All conditional compilation and all include paths should now resolve properly
|
||||
for your application.
|
||||
|
||||
The file `eclipsesym.xml` is specific to the application being built and may
|
||||
differ depending on what modules are enabled and which platform is being built.
|
||||
Make sure that everything is set up properly in your shell and that regular
|
||||
`make all` works before running `make eclipsesym`
|
90
dist/tools/eclipsesym/cmdline2xml.sh
vendored
Executable file
90
dist/tools/eclipsesym/cmdline2xml.sh
vendored
Executable file
@ -0,0 +1,90 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright (C) 2015 Eistec AB
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU Lesser General
|
||||
# Public License v2.1. See the file LICENSE in the top level directory for more
|
||||
# details.
|
||||
|
||||
# Author: Joakim Gebart <joakim.gebart@eistec.se>
|
||||
|
||||
# Convert a GCC command line to Eclipse settings for import in
|
||||
# Project->Properties->C/C++ General->Paths and Symbols
|
||||
#
|
||||
# Tested on:
|
||||
# Eclipse IDE for C/C++ Developers
|
||||
#
|
||||
# Version: Luna Service Release 2 (4.4.2)
|
||||
# Build id: 20150219-0600
|
||||
|
||||
ECHO="printf %s\n"
|
||||
|
||||
if [ $# -ne 0 ]; then
|
||||
${ECHO} "Usage: $0"
|
||||
${ECHO} "Read GCC command line arguments from stdin, output Eclipse XML to stdout"
|
||||
${ECHO} "Note: does not handle spaces inside macros and include paths at all."
|
||||
exit 2
|
||||
fi
|
||||
|
||||
XML_INSTRUCTIONS='
|
||||
<!--
|
||||
Instrucions:
|
||||
|
||||
In Eclipse:
|
||||
1. Open the project properties, menu Project->Properties
|
||||
2. Select C/C++ General->Paths and Symbols
|
||||
2a. (optional) Click Restore Defaults to delete any existing macros and include paths
|
||||
3. Click Import Settings...
|
||||
4. Select this file and press Finish
|
||||
5. Rebuild C/C++ index, menu Project->C/C++ Index->Rebuild
|
||||
|
||||
-->
|
||||
'
|
||||
XML_HEADER='<?xml version="1.0" encoding="UTF-8"?><cdtprojectproperties>'$'\n''<!-- Automatically generated from make eclipsesym -->'
|
||||
XML_FOOTER='</cdtprojectproperties>'
|
||||
XML_MACRO_SECTION_BEGIN='<section name="org.eclipse.cdt.internal.ui.wizards.settingswizards.Macros">'
|
||||
XML_INCLUDE_SECTION_BEGIN='<section name="org.eclipse.cdt.internal.ui.wizards.settingswizards.IncludePaths">'
|
||||
XML_SECTION_END='</section>'
|
||||
XML_MACRO_TEMPLATE='"<macro><name>"$1"</name><value>"$2"</value></macro>"'
|
||||
XML_INCLUDE_TEMPLATE='"<includepath workspace_path=\"true\">"$0"</includepath>"'
|
||||
LANGUAGES=( 'GNU C' 'GNU C++' 'Assembly' 'C Source File' 'C++ Source File' 'Assembly Source File' )
|
||||
ECLIPSE_PROJECT_NAME='RIOT'
|
||||
|
||||
GCCCOMMANDLINE=$(cat)
|
||||
|
||||
# Find all includes
|
||||
INCLUDES=$(${ECHO} "${GCCCOMMANDLINE}" | sed -e 's/ /\n/g' | egrep '^-I' | cut -c3-)
|
||||
|
||||
# Parse and rewrite to project relative paths
|
||||
INCLUDES_REL=""
|
||||
for p in ${INCLUDES}; do
|
||||
#ABSPATH=$(readlink -m "$p")
|
||||
RELPATH=$(readlink -m "$p" | sed -e "s,^${RIOTBASE},/${ECLIPSE_PROJECT_NAME}/,")
|
||||
INCLUDES_REL=${INCLUDES_REL}$'\n'${RELPATH}
|
||||
done
|
||||
|
||||
# Grab macro definitions
|
||||
MACROS=$(${ECHO} "${GCCCOMMANDLINE}" | sed -e 's/ /\n/g' | egrep '^-D' | cut -c3-)
|
||||
|
||||
# Output
|
||||
${ECHO} "${XML_HEADER}"
|
||||
${ECHO} "${XML_INSTRUCTIONS}"
|
||||
${ECHO} "${XML_INCLUDE_SECTION_BEGIN}"
|
||||
for l in "${LANGUAGES[@]}"; do
|
||||
${ECHO} "<language name=\"${l}\">"
|
||||
${ECHO} "${INCLUDES_REL}" | awk \
|
||||
"{ if (\$0 != \"\") { print ${XML_INCLUDE_TEMPLATE}; } }" | \
|
||||
sed -e 's,/[/]*,/,g'
|
||||
${ECHO} '</language>'
|
||||
done
|
||||
${ECHO} "${XML_SECTION_END}"
|
||||
${ECHO} "${XML_MACRO_SECTION_BEGIN}"
|
||||
for l in "${LANGUAGES[@]}"; do
|
||||
${ECHO} "<language name=\"${l}\">"
|
||||
${ECHO} "${MACROS}" | awk -F= \
|
||||
"{ if (\$2 == \"\") { \$2 = \"1\" } print ${XML_MACRO_TEMPLATE}; }" | \
|
||||
sed -e 's/\\"/"/g'
|
||||
${ECHO} '</language>'
|
||||
done
|
||||
${ECHO} "${XML_SECTION_END}"
|
||||
${ECHO} "${XML_FOOTER}"
|
Loading…
Reference in New Issue
Block a user