Difference between revisions of "Eclipse CDT projects with bitbake"
(→Setting up New Project) |
|||
(28 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | ==Introduction== | ||
+ | Elphel camera software is based on Yocto Poky distribution, all the individual projects such as Linux kernel drivers, C/C++ applications, web applications, Python projects are organized as '''Makefile''' projects, each tied to a separate Git repository. The makefiles are not standalone, they receive defined variables provided by '''bitbake''' recipes and classes. | ||
+ | The top project [https://git.elphel.com/Elphel/elphel393 elphel393] has the '''setup.py''' script that installs and synchronizes them. All projects have Eclipse IDE configuration data (in '''eclipse_project_setup''' subdirectories), and this data is copied to the project root by '''setup.py'''. As Eclipse project settings may have user-dependent settings, current configuration files (/.project, /.cproject, ...) are not version controlled, so to restore them after corruption or just to get updated versions you need either to manually copy '''eclipse_project_setup''' sub-tree, or delete /.project and re-run '''setup.py'''. | ||
− | + | Eclipse IDE setting reference not only files that are in the Git repository, but also those that are generated during build process, so Eclipse should be launched with these projects only after the command-line [[Poky_2.0_manual#Setup|build process]] has finished. If Eclipse is opened after some project is cleared (such as with '''bitbake -c clean''') it will delete the non-existing directories from '''.cproject''' configuration files. If that happens, you may close Eclipse and restore '''.cproject''' from the '''eclipse_project_setup/.cproject'''. | |
− | ├── bitbake-logs -> /home/eyesis/nc393/elphel393/poky/build/tmp/work/cortexa9-neon-poky-linux-gnueabi/apps- | + | |
− | ├── eclipse_project_setup | + | |
+ | After running '''setup.py''' for the first time you may create the brand [[#Initializing_Eclipse_Workspace_for_Existing_.28Cloned.29_Projects|new workspace]] for Eclipse. | ||
+ | Projects are relying on '''bitbake''' build process, so main Eclipse build command launches '''bitbake ''target-name'' -c compile -f''' instead of '''make all''' or similar. And as error processing (problem highlighting in the source code, jump to source file/line) is possible only for the main builder, it is the '''CDT Builder''' that has to be configured this way. | ||
+ | |||
+ | |||
+ | ==Project Files and Directories== | ||
+ | |||
+ | Below is the file/directory list of a typical application ('''elphel-apps-astreamer''' is a subdirectory of '''elphel393/rootfs-elphel''', '''apps-astreamer''' - bitbake target for this project): | ||
+ | |||
+ | ├── '''bitbake-logs''' -> /home/eyesis/nc393/elphel393/poky/build/tmp/work/cortexa9-neon-poky-linux-gnueabi/apps-astreamer/1_0-23/temp | ||
+ | ├── '''eclipse_project_setup''' | ||
│ ├── .externalToolBuilders | │ ├── .externalToolBuilders | ||
− | │ │ └── SCP apps- | + | │ │ └── SCP apps-astreamer to target.launch |
│ ├── .cproject | │ ├── .cproject | ||
│ └── .project | │ └── .project | ||
− | ├── .externalToolBuilders | + | ├── '''.externalToolBuilders''' |
− | │ └── SCP apps- | + | │ └── SCP apps-astreamer to target.launch |
− | ├── image -> /home/eyesis/nc393/elphel393/poky/build/tmp/work/cortexa9-neon-poky-linux-gnueabi/apps- | + | ├── '''.git''' |
− | ├── scripts -> ../../scripts/ | + | ... |
− | + | ├── '''image''' -> /home/eyesis/nc393/elphel393/poky/build/tmp/work/cortexa9-neon-poky-linux-gnueabi/apps-astreamer/1_0-23/image | |
− | + | ├── '''scripts''' -> ../../scripts/ | |
− | ├── | + | │ ├── '''run_bitbake.sh''' |
− | + | │ └── '''used_files.py''' | |
− | │ | + | ├── '''.settings''' |
− | + | │ └── language.settings.xml | |
− | + | ├── '''src''' | |
− | │ ├── | + | │ ├── audio.cpp |
− | │ ├── | + | │ ├── audio.h |
− | + | ... | |
− | + | │ ├── streamer.h | |
− | + | │ ├── video.cpp | |
− | + | │ └── video.h | |
− | + | ├── '''sysroots''' -> /home/eyesis/nc393/elphel393/poky/build/tmp/sysroots | |
− | + | ├── '''.cproject''' | |
− | + | ├── '''.gitignore''' | |
− | │ ├── | + | ├── '''LICENSE''' |
− | │ ├── | + | ├── '''Makefile''' |
− | │ └── | + | ├── '''.project''' |
− | ├── sysroots -> /home/eyesis/nc393/elphel393/poky/build/tmp/sysroots | + | ├── '''README.md''' |
− | ├── .cproject | + | └── '''VERSION''' |
− | ├── .gitignore | + | *'''bitbake-logs''' is a convenience link to the latest bitbake build logs |
− | ├── LICENSE | + | *'''eclipse_project_setup''' copy of Eclipse IDE settings under version control. Content of the subdirectory is copied (during setup or manually) to teh project root directory (one level up). |
− | ├── Makefile | + | *'''.externalToolBuilders''' is copied from '''eclipse_project_setup''' and then maintained by Eclipse. Currently is used to launch file copying to the target (actual camera). |
− | ├── .project | + | *'''.git''' - project Git data tree |
− | ├── README.md | + | *'''image''' is a link to directory that contains deployable files, built as a result of bitbake recipes execution. |
− | └── VERSION | + | *'''scripts''' - a link to a collection of scripts needed for all projects. It contains the following files: |
+ | **'''run_bitbake.sh''' - script to create an environment and execute bitbake recipe. Used every time Eclipse builds the project. | ||
+ | **'''used_files.py''' - script to create a list of header files/directories used by bitbake to build the project. It is not needed to run to configure existing projects - all of them are provided with preconfigured '''.cproject''' files. ''TODO: add link to description'' | ||
+ | *'''.settings''' - project settings maintained by Eclipse IDE | ||
+ | *'''src''' - a hard-coded (in '''used_files.py''') directory name for C/C++ source files. Source files should not be in the project root directory for convenience of filter generation for additional source (headers) directories | ||
+ | *'''sysroots''' - a link to header files directories, available in the target system. The content is generated after the linux kernel is being built. All the applications use header files from the subdirectories of this folder. This link is generated for every project by the bitbake class. | ||
+ | *'''.cproject''' - Eclipse CDT project configuration. Parts of this file are modified by the scripts, such as '''used_files.py'''. This file is copied from version-controlled '''eclipse_project_setup''' during setup or manually. | ||
+ | *'''.gitignore''' - Git ignore file list | ||
+ | *'''LICENSE''' - project GNU GPLv3 license | ||
+ | *'''Makefile''' - top make file of the project. It is invoked when executing bitbake recipes, it receives variables defined in bitbake recipes/classes | ||
+ | *'''.project''' - Eclipse general project configuration. This file is copied from version-controlled '''eclipse_project_setup''' during setup or manually. | ||
+ | *'''README.md''' - README file presented by the Git repository web interface | ||
+ | *'''VERSION''' - project version, used by bitbake build process to determine which dependent recipes have to be re-ran. | ||
+ | ==Initializing Eclipse Workspace for Existing (Cloned) Projects== | ||
+ | After running '''setup.py''' for the first time you may create the brand new workspace for Eclipse, that should have all necessary plugins (such as CDT and EGit at least) already installed. Workspace is created with '''setup_eclipse.py''' script, list of projects that it sets up is saved in '''setup_eclipse_paths.xml''' file. '''setup_eclipse.py''' provides usage information when launched without parameters, for normal run it requires full path to Eclipse installation - directory that contains '''eclipse''' executable and '''eclipse.ini''' configuration. Before running '''setup_eclipse.py''' Eclipse should have all the required plugins installed (at least CDT and EGit) using temporary workspace. | ||
+ | |||
+ | '''setup_eclipse.py''' performs 2 actions: | ||
+ | *It first batch-imports all the listed in '''setup_eclipse_paths.xml''' projects using headless build of the CDT (org.eclipse.cdt.managedbuilder.core.headlessbuild), without actually building and indexing files - indexing should be done manually before using particular project. | ||
+ | *Next it connects project Git repositories to Eclipse EGit, so the projects are immediately ready for Git operations ('team' operations). project navigator shows repository and branch for each of the projects. | ||
+ | |||
+ | After creating a new workspace with '''setup_eclipse.py''' it can be opened with Eclipse, the projects you plan to use have to be indexed (right-click on the project in the Navigator ⇒ Index ⇒ Rebuild. | ||
+ | |||
+ | ==Setting up New Project== | ||
+ | <gallery widths=400 heights=500 mode=nolines> <!-- caption="Setting up external tool"--> | ||
+ | File:Eclipse builders.png| Figure 1a. Project builders | ||
+ | File:Eclipse scp main.png| Figure 1b. Configuring SCP to target tool for apps-astreamer project | ||
+ | File:Eclipse scp options.png| Figure 1c. Configuring SCP to target tool for apps-astreamer project(options) | ||
+ | </gallery> | ||
+ | When using CDT the CDT Builder is the only builder to support error processing so we use it to launch bitbake compilation recipe for build command. Additional builder 'SCP apps-astreamer to target' is set up to transfer prepared binaries to the target camera. Figure 1a shows project ⇒ properties ⇒ Builders view with CDT Builder moved to the first position, and the SCP tool - to the second (and disabled. When disabled it will not be launched automatically - camera has to be connected for SCP to succeed, and Poky local.conf has to have camera IP address set up for transfers. No other builders are required - they may be disabled and later removed, by deleting corresponding firl from the '''.externalToolBuilders''' directory (while Eclipse is closed). | ||
+ | Figure 1b. shows SCP tool configuration dialog: Set | ||
+ | *'''Name''' field with '''SCP <bitbake-target> to target''' | ||
+ | *'''Location''' with '''${workspace_loc:/<project-directory>/scripts/run_bitbake.sh}''' and | ||
+ | *'''Arguments''' with '''<bitbake-target> -c target_scp -f''' | ||
+ | Figure 1c shows 'Build Options" tab. Default settings can be kept. | ||
− | + | <gallery widths=600 heights=375 mode=nolines> <!-- caption="Setting up external tool"--> | |
− | + | File:Eclipse ccpp build.png| Figure 2a. C/C++ Build ⇒ Builder Settings<br/>Uncheck 'Use default build command' and set '''Build Command''' to '''${workspace_loc:/<project-directory>/scripts/run_bitbake.sh} <bitbake-target>'''.<br/>Keep '''Build directory''' content. | |
− | + | File:Eclipse ccpp build behavior.png| Figure 2b. C/C++ Build ⇒ Behavior<br/>uncheck '''Clean''' and for '''Build (Incremental build)''' enter '''-c compile -f''' | |
− | + | File:Eclipse ccpp build refresh.png| Figure 2c. C/C++ Build ⇒ Refresh Policy<br/>Keep fields in default state | |
− | + | File:Eclipse source location.png| Figure 2d. C/C++ General ⇒ Paths and Symbols ⇒ Source Location<br/>Initially just the project root path will appear there. You will need to add path to '''src''' subdirectory, then remove initial one (project root).<br/>The second entry will appear after you close Eclipse, run '''scripts/used_files.py sysroots''' and then re-open Eclipse. Some projects require different parameters instead of '''"sysroots"''': linux kernel development needs '''"linux"''', PHP extension requires '''"php"'''. | |
− | + | </gallery> | |
− |
Revision as of 10:00, 22 November 2017
Contents
Introduction
Elphel camera software is based on Yocto Poky distribution, all the individual projects such as Linux kernel drivers, C/C++ applications, web applications, Python projects are organized as Makefile projects, each tied to a separate Git repository. The makefiles are not standalone, they receive defined variables provided by bitbake recipes and classes.
The top project elphel393 has the setup.py script that installs and synchronizes them. All projects have Eclipse IDE configuration data (in eclipse_project_setup subdirectories), and this data is copied to the project root by setup.py. As Eclipse project settings may have user-dependent settings, current configuration files (/.project, /.cproject, ...) are not version controlled, so to restore them after corruption or just to get updated versions you need either to manually copy eclipse_project_setup sub-tree, or delete /.project and re-run setup.py.
Eclipse IDE setting reference not only files that are in the Git repository, but also those that are generated during build process, so Eclipse should be launched with these projects only after the command-line build process has finished. If Eclipse is opened after some project is cleared (such as with bitbake -c clean) it will delete the non-existing directories from .cproject configuration files. If that happens, you may close Eclipse and restore .cproject from the eclipse_project_setup/.cproject.
After running setup.py for the first time you may create the brand new workspace for Eclipse.
Projects are relying on bitbake build process, so main Eclipse build command launches bitbake target-name -c compile -f instead of make all or similar. And as error processing (problem highlighting in the source code, jump to source file/line) is possible only for the main builder, it is the CDT Builder that has to be configured this way.
Project Files and Directories
Below is the file/directory list of a typical application (elphel-apps-astreamer is a subdirectory of elphel393/rootfs-elphel, apps-astreamer - bitbake target for this project):
├── bitbake-logs -> /home/eyesis/nc393/elphel393/poky/build/tmp/work/cortexa9-neon-poky-linux-gnueabi/apps-astreamer/1_0-23/temp ├── eclipse_project_setup │ ├── .externalToolBuilders │ │ └── SCP apps-astreamer to target.launch │ ├── .cproject │ └── .project ├── .externalToolBuilders │ └── SCP apps-astreamer to target.launch ├── .git ... ├── image -> /home/eyesis/nc393/elphel393/poky/build/tmp/work/cortexa9-neon-poky-linux-gnueabi/apps-astreamer/1_0-23/image ├── scripts -> ../../scripts/ │ ├── run_bitbake.sh │ └── used_files.py ├── .settings │ └── language.settings.xml ├── src │ ├── audio.cpp │ ├── audio.h ... │ ├── streamer.h │ ├── video.cpp │ └── video.h ├── sysroots -> /home/eyesis/nc393/elphel393/poky/build/tmp/sysroots ├── .cproject ├── .gitignore ├── LICENSE ├── Makefile ├── .project ├── README.md └── VERSION
- bitbake-logs is a convenience link to the latest bitbake build logs
- eclipse_project_setup copy of Eclipse IDE settings under version control. Content of the subdirectory is copied (during setup or manually) to teh project root directory (one level up).
- .externalToolBuilders is copied from eclipse_project_setup and then maintained by Eclipse. Currently is used to launch file copying to the target (actual camera).
- .git - project Git data tree
- image is a link to directory that contains deployable files, built as a result of bitbake recipes execution.
- scripts - a link to a collection of scripts needed for all projects. It contains the following files:
- run_bitbake.sh - script to create an environment and execute bitbake recipe. Used every time Eclipse builds the project.
- used_files.py - script to create a list of header files/directories used by bitbake to build the project. It is not needed to run to configure existing projects - all of them are provided with preconfigured .cproject files. TODO: add link to description
- .settings - project settings maintained by Eclipse IDE
- src - a hard-coded (in used_files.py) directory name for C/C++ source files. Source files should not be in the project root directory for convenience of filter generation for additional source (headers) directories
- sysroots - a link to header files directories, available in the target system. The content is generated after the linux kernel is being built. All the applications use header files from the subdirectories of this folder. This link is generated for every project by the bitbake class.
- .cproject - Eclipse CDT project configuration. Parts of this file are modified by the scripts, such as used_files.py. This file is copied from version-controlled eclipse_project_setup during setup or manually.
- .gitignore - Git ignore file list
- LICENSE - project GNU GPLv3 license
- Makefile - top make file of the project. It is invoked when executing bitbake recipes, it receives variables defined in bitbake recipes/classes
- .project - Eclipse general project configuration. This file is copied from version-controlled eclipse_project_setup during setup or manually.
- README.md - README file presented by the Git repository web interface
- VERSION - project version, used by bitbake build process to determine which dependent recipes have to be re-ran.
Initializing Eclipse Workspace for Existing (Cloned) Projects
After running setup.py for the first time you may create the brand new workspace for Eclipse, that should have all necessary plugins (such as CDT and EGit at least) already installed. Workspace is created with setup_eclipse.py script, list of projects that it sets up is saved in setup_eclipse_paths.xml file. setup_eclipse.py provides usage information when launched without parameters, for normal run it requires full path to Eclipse installation - directory that contains eclipse executable and eclipse.ini configuration. Before running setup_eclipse.py Eclipse should have all the required plugins installed (at least CDT and EGit) using temporary workspace.
setup_eclipse.py performs 2 actions:
- It first batch-imports all the listed in setup_eclipse_paths.xml projects using headless build of the CDT (org.eclipse.cdt.managedbuilder.core.headlessbuild), without actually building and indexing files - indexing should be done manually before using particular project.
- Next it connects project Git repositories to Eclipse EGit, so the projects are immediately ready for Git operations ('team' operations). project navigator shows repository and branch for each of the projects.
After creating a new workspace with setup_eclipse.py it can be opened with Eclipse, the projects you plan to use have to be indexed (right-click on the project in the Navigator ⇒ Index ⇒ Rebuild.
Setting up New Project
When using CDT the CDT Builder is the only builder to support error processing so we use it to launch bitbake compilation recipe for build command. Additional builder 'SCP apps-astreamer to target' is set up to transfer prepared binaries to the target camera. Figure 1a shows project ⇒ properties ⇒ Builders view with CDT Builder moved to the first position, and the SCP tool - to the second (and disabled. When disabled it will not be launched automatically - camera has to be connected for SCP to succeed, and Poky local.conf has to have camera IP address set up for transfers. No other builders are required - they may be disabled and later removed, by deleting corresponding firl from the .externalToolBuilders directory (while Eclipse is closed). Figure 1b. shows SCP tool configuration dialog: Set
- Name field with SCP <bitbake-target> to target
- Location with ${workspace_loc:/<project-directory>/scripts/run_bitbake.sh} and
- Arguments with <bitbake-target> -c target_scp -f
Figure 1c shows 'Build Options" tab. Default settings can be kept.
Figure 2d. C/C++ General ⇒ Paths and Symbols ⇒ Source Location
Initially just the project root path will appear there. You will need to add path to src subdirectory, then remove initial one (project root).
The second entry will appear after you close Eclipse, run scripts/used_files.py sysroots and then re-open Eclipse. Some projects require different parameters instead of "sysroots": linux kernel development needs "linux", PHP extension requires "php".