Thread: [CEDET-devel] How to set up custom compiler?
Brought to you by:
zappo
From: Christoph P. <anm...@du...> - 2013-03-11 11:30:13
|
Hi everyone, I am starting to use ede and cedet in general for my projects. At the moment, I am stuck setting up a custom compiler. As far as I understand, I have to modify the ede-*-compiler and ede-*-linker objects in proj-obj.el and add the new objects to the availablecompilers availablelinkers list. Since I have to do that on more than one machine and for different people, how can I achive that in a fil |
From: Christoph P. <anm...@du...> - 2013-03-11 11:33:03
|
Hi everyone, I am starting to use ede and cedet in general for my projects. At the moment, I am stuck setting up a custom compiler. As far as I understand, I have to modify the ede-something-compiler and ede-something-linker objects in proj-obj.el and add the new objects to the availablecompilers availablelinkers list. Since I have to do that on more than one machine and for different people, how can I achive that in a file that can be added to my project directly without hacking around in the original ede-source? As I am a total elisp-newbie, perhaps there is a standard way and I just don't know, so, I am thankful for every hint! Best regards, Chris |
From: David E. <de...@ra...> - 2013-03-11 19:59:11
|
Christoph Piefke writes: > I am starting to use ede and cedet in general for my projects. At the > moment, I am stuck setting up a custom compiler. As far as I understand, > I have to modify the ede-something-compiler and ede-something-linker > objects in proj-obj.el and add the new objects to the availablecompilers > availablelinkers list. > > Since I have to do that on more than one machine and for different > people, how can I achive that in a file that can be added to my project > directly without hacking around in the original ede-source? > > As I am a total elisp-newbie, perhaps there is a standard way and I just > don't know, so, I am thankful for every hint! Unfortunately, adding things like compilers, linkers and targets to EDE is not as straightforward as it should be. First, you can use the following helper functions: (defun ede-proj-target-add-compiler (obj compiler) (let ((st (oref obj availablecompilers))) (oset-default obj availablecompilers (cons compiler st)))) (defun ede-proj-target-add-sourcetype (obj sourcet) (let ((st (oref obj sourcetype))) (oset-default obj sourcetype (cons sourcet st)))) (defun ede-proj-target-add-linker (obj linker) (let ((st (oref obj availablelinkers))) (oset-default obj availablelinkers (cons linker st)))) (Eric, what do you think of adding the above to EDE?) Here's an example for defining a compiler (in this case it is for compiling Matlab MEX files, but that doesn't matter much): (defvar ede-mex-compiler (ede-object-compiler "ede-compiler-mex" :name "mex" :variables '(("MEX" . "mex") ("MEXEXT" . "$(shell mexext)") ("MEX_COMPILE" . "$(MEX) $(MEXFLAGS)")) :commands '("$(MEX_COMPILE) $<") :sourcetype '(ede-source-f90 ede-source-f77 ede-source-c ede-source-c++) :makedepends nil :uselinker nil) "Compiler for MATLAB mex files.") and you then add it like this: (ede-proj-target-add-compiler ede-proj-target-makefile-objectcode 'ede-mex-compiler) So... that's how you can do this. Not really straightforward, I'm afraid, but I hope this will get you started. -David |
From: Eric M. L. <er...@si...> - 2013-03-12 00:52:48
|
On 03/11/2013 03:58 PM, David Engster wrote: > Christoph Piefke writes: >> I am starting to use ede and cedet in general for my projects. At the >> moment, I am stuck setting up a custom compiler. As far as I understand, >> I have to modify the ede-something-compiler and ede-something-linker >> objects in proj-obj.el and add the new objects to the availablecompilers >> availablelinkers list. >> >> Since I have to do that on more than one machine and for different >> people, how can I achive that in a file that can be added to my project >> directly without hacking around in the original ede-source? >> >> As I am a total elisp-newbie, perhaps there is a standard way and I just >> don't know, so, I am thankful for every hint! > > Unfortunately, adding things like compilers, linkers and targets to EDE > is not as straightforward as it should be. First, you can use the > following helper functions: > > (defun ede-proj-target-add-compiler (obj compiler) > (let ((st (oref obj availablecompilers))) > (oset-default obj > availablecompilers > (cons compiler st)))) > > (defun ede-proj-target-add-sourcetype (obj sourcet) > (let ((st (oref obj sourcetype))) > (oset-default obj > sourcetype > (cons sourcet st)))) > > (defun ede-proj-target-add-linker (obj linker) > (let ((st (oref obj availablelinkers))) > (oset-default obj > availablelinkers > (cons linker st)))) > > (Eric, what do you think of adding the above to EDE?) That's a good idea, and worth doing. Thanks David! Eric |
From: Eric M. L. <er...@si...> - 2013-03-12 01:08:20
Attachments:
proj.el.patch
|
On 03/11/2013 03:58 PM, David Engster wrote: > Christoph Piefke writes: >> I am starting to use ede and cedet in general for my projects. At the >> moment, I am stuck setting up a custom compiler. As far as I understand, >> I have to modify the ede-something-compiler and ede-something-linker >> objects in proj-obj.el and add the new objects to the availablecompilers >> availablelinkers list. >> >> Since I have to do that on more than one machine and for different >> people, how can I achive that in a file that can be added to my project >> directly without hacking around in the original ede-source? >> >> As I am a total elisp-newbie, perhaps there is a standard way and I just >> don't know, so, I am thankful for every hint! > > Unfortunately, adding things like compilers, linkers and targets to EDE > is not as straightforward as it should be. First, you can use the > following helper functions: > > (defun ede-proj-target-add-compiler (obj compiler) > (let ((st (oref obj availablecompilers))) > (oset-default obj > availablecompilers > (cons compiler st)))) > > (defun ede-proj-target-add-sourcetype (obj sourcet) > (let ((st (oref obj sourcetype))) > (oset-default obj > sourcetype > (cons sourcet st)))) > > (defun ede-proj-target-add-linker (obj linker) > (let ((st (oref obj availablelinkers))) > (oset-default obj > availablelinkers > (cons linker st)))) > > (Eric, what do you think of adding the above to EDE?) To reply again quickly after; I still think the above is a good idea, but attached is another solution for someone who just needs to add something in to their project without a lot of extra work. I didn't do a full-up test, but from the customization point of view it seems to be working ok. What do others think? Eric |
From: Christoph P. <anm...@du...> - 2013-03-12 19:14:44
|
Am 12.03.2013 02:08, schrieb Eric M. Ludlam: > On 03/11/2013 03:58 PM, David Engster wrote: >> Christoph Piefke writes: >>> I am starting to use ede and cedet in general for my projects. At the >>> moment, I am stuck setting up a custom compiler. As far as I >>> understand, >>> I have to modify the ede-something-compiler and ede-something-linker >>> objects in proj-obj.el and add the new objects to the >>> availablecompilers >>> availablelinkers list. >>> >>> Since I have to do that on more than one machine and for different >>> people, how can I achive that in a file that can be added to my project >>> directly without hacking around in the original ede-source? >>> >>> As I am a total elisp-newbie, perhaps there is a standard way and I >>> just >>> don't know, so, I am thankful for every hint! >> >> Unfortunately, adding things like compilers, linkers and targets to EDE >> is not as straightforward as it should be. First, you can use the >> following helper functions: >> >> (defun ede-proj-target-add-compiler (obj compiler) >> (let ((st (oref obj availablecompilers))) >> (oset-default obj >> availablecompilers >> (cons compiler st)))) >> >> (defun ede-proj-target-add-sourcetype (obj sourcet) >> (let ((st (oref obj sourcetype))) >> (oset-default obj >> sourcetype >> (cons sourcet st)))) >> >> (defun ede-proj-target-add-linker (obj linker) >> (let ((st (oref obj availablelinkers))) >> (oset-default obj >> availablelinkers >> (cons linker st)))) >> >> (Eric, what do you think of adding the above to EDE?) > > To reply again quickly after; > > I still think the above is a good idea, but attached is another > solution for someone who just needs to add something in to their > project without a lot of extra work. > > I didn't do a full-up test, but from the customization point of view > it seems to be working ok. What do others think? > > Eric Hello David, Eric, thank you very much for your help! I managed adding ifort to the drop-down-lists in the customize-project dialogue using your proposal, David. However, running compilation brings up an error: src/Makefile.am: Fortran source seen but `FC' is undefined src/Makefile.am: The usual way to define `FC' is to add `AC_PROG_FC' src/Makefile.am: to `configure.ac' and run `autoconf' again. autoreconf: automake failed with exit status: 1 Adding AC_PROG_FC=ifort manually to configure.ac resolves this issue, but I don't think that this is the desired behaviour, is it? Unfortunately, just doing a quick search through the ede-code did not bring up the place where these variables are set. Any suggestions where I should look at? Before you ask, the standard ede-gfortran-compiler option does not work either. If you want to try it yourself, I put everything I did so far in a git repository, see git://github.com/cpiefke/f00test.git <<EDIT>> Suddenly it stopped working and I do not know what I did wrong, eval-buffer on my ede-f00test.el produces an error: Symbol's function definition is void: ede-object-compiler <</EDIT>> Regarding the implementation of new compilers: I'd prefer David's solution, providing a set of setter and getter routines for packing together new combinations of source/compiler/linker in one single file, which can be published like some sort of plugin to ede. So, other people could make more use of them, perhaps? This brings me to another question: I also have code documented with doxygen and a accompanying Latex-documentation. Is there a ressource where doxygen is used with autoconf and perhaps even with ede? And the same goes with latex. Would you even recommend managing a latex compilation with ede or would you do this by hand? Thanks a lot and happy coding, regards, Chris |
From: Eric M. L. <er...@si...> - 2013-03-12 22:38:17
|
On 03/12/2013 03:14 PM, Christoph Piefke wrote: > Am 12.03.2013 02:08, schrieb Eric M. Ludlam: >> On 03/11/2013 03:58 PM, David Engster wrote: >>> Christoph Piefke writes: > Hello David, Eric, > > thank you very much for your help! > > I managed adding ifort to the drop-down-lists in the customize-project > dialogue using your proposal, David. However, running compilation brings > up an error: > > src/Makefile.am: Fortran source seen but `FC' is undefined > src/Makefile.am: The usual way to define `FC' is to add `AC_PROG_FC' > src/Makefile.am: to `configure.ac' and run `autoconf' again. > autoreconf: automake failed with exit status: 1 > > Adding AC_PROG_FC=ifort manually to configure.ac resolves this issue, > but I don't think that this is the desired behaviour, is it? > Unfortunately, just doing a quick search through the ede-code did not > bring up the place where these variables are set. Any suggestions where > I should look at? You can have your compiler automatically add something to autoconf using the :autoconf initializer. Here's an example for gcc: (ede-object-compiler "ede-c-compiler-gcc" :name "gcc" :dependencyvar '("C_DEPENDENCIES" . "-Wp,-MD,.deps/$(*F).P") [ .. snip .. ] :autoconf '("AC_PROG_CC" "AC_PROG_GCC_TRADITIONAL") :sourcetype '(ede-source-c) :objectextention ".o" :makedepends t :uselinker t) "Compiler for C sourcecode.") that will just stick those macros into the autoconf file, and also make sure they aren't stuck in multiple times. I'm not sure about the "=ifort" part. I don't think ede/proj-comp.el accounts for that, but it might just work if you stick it in. > Before you ask, the standard ede-gfortran-compiler option does not work > either. I'd guess that when it was added, the author hand-wrote the autoconf part without realizing it. If you find the solution, we can fix up the F90 version too. > If you want to try it yourself, I put everything I did so far in a git > repository, see git://github.com/cpiefke/f00test.git This was helpful in identifying that you hadn't specified :autoconf rules. Thanks. > <<EDIT>> Suddenly it stopped working and I do not know what I did wrong, > eval-buffer on my ede-f00test.el produces an error: Symbol's function > definition is void: ede-object-compiler > <</EDIT>> You probably need to add a require for ede/proj-comp. > Regarding the implementation of new compilers: I'd prefer David's > solution, providing a set of setter and getter routines for packing > together new combinations of source/compiler/linker in one single file, > which can be published like some sort of plugin to ede. So, other people > could make more use of them, perhaps? > > This brings me to another question: I also have code documented with > doxygen and a accompanying Latex-documentation. Is there a ressource > where doxygen is used with autoconf and perhaps even with ede? And the > same goes with latex. Would you even recommend managing a latex > compilation with ede or would you do this by hand? I've never tried to tie doxygen into an EDE project. I would imagine it would just be another kind of EDE target that would re-use any source files as inputs. If you want to dig into that, I can lend a hand. Particularly in trying to get some tests set up for it. Eric |
From: Christoph P. <anm...@du...> - 2013-03-13 10:34:41
|
Am 12.03.2013 23:38, schrieb Eric M. Ludlam: > On 03/12/2013 03:14 PM, Christoph Piefke wrote: >> Am 12.03.2013 02:08, schrieb Eric M. Ludlam: >>> On 03/11/2013 03:58 PM, David Engster wrote: >>>> Christoph Piefke writes: > >> Hello David, Eric, >> >> thank you very much for your help! >> >> I managed adding ifort to the drop-down-lists in the customize-project >> dialogue using your proposal, David. However, running compilation brings >> up an error: >> >> src/Makefile.am: Fortran source seen but `FC' is undefined >> src/Makefile.am: The usual way to define `FC' is to add `AC_PROG_FC' >> src/Makefile.am: to `configure.ac' and run `autoconf' again. >> autoreconf: automake failed with exit status: 1 >> >> Adding AC_PROG_FC=ifort manually to configure.ac resolves this issue, >> but I don't think that this is the desired behaviour, is it? >> Unfortunately, just doing a quick search through the ede-code did not >> bring up the place where these variables are set. Any suggestions where >> I should look at? > > You can have your compiler automatically add something to autoconf > using the :autoconf initializer. Here's an example for gcc: > > (ede-object-compiler > "ede-c-compiler-gcc" > :name "gcc" > :dependencyvar '("C_DEPENDENCIES" . "-Wp,-MD,.deps/$(*F).P") > > [ .. snip .. ] > > :autoconf '("AC_PROG_CC" "AC_PROG_GCC_TRADITIONAL") > :sourcetype '(ede-source-c) > :objectextention ".o" > :makedepends t > :uselinker t) > "Compiler for C sourcecode.") > > that will just stick those macros into the autoconf file, and also > make sure they aren't stuck in multiple times. > > I'm not sure about the "=ifort" part. I don't think ede/proj-comp.el > accounts for that, but it might just work if you stick it in. > >> Before you ask, the standard ede-gfortran-compiler option does not work >> either. > > I'd guess that when it was added, the author hand-wrote the autoconf > part without realizing it. If you find the solution, we can fix up > the F90 version too. > >> If you want to try it yourself, I put everything I did so far in a git >> repository, see git://github.com/cpiefke/f00test.git > > This was helpful in identifying that you hadn't specified :autoconf > rules. Thanks. > >> <<EDIT>> Suddenly it stopped working and I do not know what I did wrong, >> eval-buffer on my ede-f00test.el produces an error: Symbol's function >> definition is void: ede-object-compiler >> <</EDIT>> > > You probably need to add a require for ede/proj-comp. > >> Regarding the implementation of new compilers: I'd prefer David's >> solution, providing a set of setter and getter routines for packing >> together new combinations of source/compiler/linker in one single file, >> which can be published like some sort of plugin to ede. So, other people >> could make more use of them, perhaps? >> >> This brings me to another question: I also have code documented with >> doxygen and a accompanying Latex-documentation. Is there a ressource >> where doxygen is used with autoconf and perhaps even with ede? And the >> same goes with latex. Would you even recommend managing a latex >> compilation with ede or would you do this by hand? > > I've never tried to tie doxygen into an EDE project. I would imagine > it would just be another kind of EDE target that would re-use any > source files as inputs. > > If you want to dig into that, I can lend a hand. Particularly in > trying to get some tests set up for it. > > Eric Small addition, when I launch emacs in a non-ede-directory, I do not get the error message, instead: Loading /home/cpiefke/.emacs.d/cedet/cedet-remove-builtin.el (source)...done Loading autoloads from CEDET development. Loading /home/cpiefke/.emacs.d/cedet/cedet-devel-load.el (source)...done Regards, Chris |
From: David E. <de...@ra...> - 2013-03-12 22:54:31
|
Eric M. Ludlam writes: > On 03/12/2013 03:14 PM, Christoph Piefke wrote: >> Before you ask, the standard ede-gfortran-compiler option does not work >> either. > > I'd guess that when it was added, the author hand-wrote the autoconf > part without realizing it. I did? I never wrote anything autoconf-related in my life (besides "./configure"). :-) -David |
From: Christoph P. <anm...@du...> - 2013-03-13 10:29:39
|
> >> <<EDIT>> Suddenly it stopped working and I do not know what I did wrong, >> eval-buffer on my ede-f00test.el produces an error: Symbol's function >> definition is void: ede-object-compiler >> <</EDIT>> > > You probably need to add a require for ede/proj-comp. > I added to my .emacs file: (global-ede-mode t) and when I go to a plain directory and set up an ede-project like described in the quickstart-guide, everything works fine and my ede-f00test.el script is running. When I close emacs and revisit the project, I get the following errormessage on startup: Loading /home/cpiefke/.emacs.d/cedet/cedet-devel-load.el (source)...done For information about GNU Emacs and the GNU system, type C-h C-a. eieio-persistent-validate/fix-slot-value: Wrong type argument: arrayp, nil and as a result, a lot of things in emacs are suddenly broken, ede is not working at all, a lot of nil objects. I am afraid this may not be fixed by a require for ede/proj-comp. I am using the devel-version of cedet from the bzr repo. |
From: Eric M. L. <er...@si...> - 2013-03-16 00:41:00
|
On 03/13/2013 06:29 AM, Christoph Piefke wrote: > >> >>> <<EDIT>> Suddenly it stopped working and I do not know what I did wrong, >>> eval-buffer on my ede-f00test.el produces an error: Symbol's function >>> definition is void: ede-object-compiler >>> <</EDIT>> >> >> You probably need to add a require for ede/proj-comp. >> > > I added to my .emacs file: > (global-ede-mode t) > > and when I go to a plain directory and set up an ede-project like > described in the quickstart-guide, everything works fine and my > ede-f00test.el script is running. > When I close emacs and revisit the project, I get the following > errormessage on startup: > > Loading /home/cpiefke/.emacs.d/cedet/cedet-devel-load.el (source)...done > For information about GNU Emacs and the GNU system, type C-h C-a. > eieio-persistent-validate/fix-slot-value: Wrong type argument: arrayp, nil > > and as a result, a lot of things in emacs are suddenly broken, ede is > not working at all, a lot of nil objects. I am afraid this may not be > fixed by a require for ede/proj-comp. I am using the devel-version of > cedet from the bzr repo. Hi Christoph, Your next step is to enable the debugger so we can get a stack. M-x toggle-debug-on-error RET The stack will point at the specific thing going wrong. Thanks Eric |
From: Eric M. L. <er...@si...> - 2013-03-12 23:00:12
|
On 03/12/2013 06:54 PM, David Engster wrote: > Eric M. Ludlam writes: >> On 03/12/2013 03:14 PM, Christoph Piefke wrote: >>> Before you ask, the standard ede-gfortran-compiler option does not work >>> either. >> >> I'd guess that when it was added, the author hand-wrote the autoconf >> part without realizing it. > > I did? > > I never wrote anything autoconf-related in my life (besides > "./configure"). :-) How did Automake know to give you a fortran compiler then? I know nothing about automake + fortran. I just assume something needed to be declared for automake to do the right thing. Or did you not use the EDE Automake project, using the Makefile version instead? Eric |
From: David E. <de...@ra...> - 2013-03-13 06:54:34
|
Eric M. Ludlam writes: > Or did you not use the EDE Automake project, using the Makefile version > instead? That one. :-) -David |