In order to prepare the exercise for students in RTEMS on Raspberry Pi, I dig into Makefile (which is auto generated by automake) this week.
(The way to build up the example in RTEMS on Raspberry Pi : here)
The perspective of exercise is to let the students adopt our library to design a simpler real-time application.
However, I want to hide the source code of library, but let the framework of makefile still work well.
That is, we have to exclude the data dependency from the auto generated makefile.
Assume we already compile the essential object as the library and place it at Source code directory, i.e., "...../rtems-gpio/testsuites/samples/SEMAPHORE_TEST".
If we open Build directory, i.e., "build-rtems-rpi-gpio/arm-rtems4.11/c/raspberrypi/testsuites/samples/SEMAPHORE_TEST", we can find a Makefile that is generated by using automake with Makefile.am in Source code directory.
As the typical rule in Makefile framework, all the dependencies of object will be denoted like this:
Pibrella.o:\
../../../../../../../rtems-gpio/c/src/../../testsuites/samples/SEMAPHORE_TEST/Pibrella.c \
../config.h \
... so on.
However, we cannot directly find this kind of information from Makefile in Build directory.
Lets trace the file by bottom-up (This example is called SEMAPHORE_TEST):
...
You can find the same rule here and the dependent files are defined with the object.
Here OBJEXT is ".o".
DEPDIR here is an invisible directory called .desp in Source code directory.
By marking this line, we can exclude the checking of dependent file and keep the assumed object file with the source codes of example.
Therefore, we reach our perspective.
------------BTW, one of my friends ask me that how to enable math library in RTEMS compilation:
For example, it is a question like this:
https://lists.rtems.org/pipermail/users/2006-March/014215.html
Ad-hoc way is to open Makefile.am in the same folder:
(The way to build up the example in RTEMS on Raspberry Pi : here)
The perspective of exercise is to let the students adopt our library to design a simpler real-time application.
However, I want to hide the source code of library, but let the framework of makefile still work well.
That is, we have to exclude the data dependency from the auto generated makefile.
Assume we already compile the essential object as the library and place it at Source code directory, i.e., "...../rtems-gpio/testsuites/samples/SEMAPHORE_TEST".
If we open Build directory, i.e., "build-rtems-rpi-gpio/arm-rtems4.11/c/raspberrypi/testsuites/samples/SEMAPHORE_TEST", we can find a Makefile that is generated by using automake with Makefile.am in Source code directory.
As the typical rule in Makefile framework, all the dependencies of object will be denoted like this:
Pibrella.o:\
../../../../../../../rtems-gpio/c/src/../../testsuites/samples/SEMAPHORE_TEST/Pibrella.c \
../config.h \
... so on.
However, we cannot directly find this kind of information from Makefile in Build directory.
Lets trace the file by bottom-up (This example is called SEMAPHORE_TEST):
...
SEMAPHORE_TEST$(EXEEXT): $(SEMAPHORE_TEST_OBJECTS) $(SEMAPHORE_TEST_DEPENDENCIES) @rm -f GPIO_Pibrella$(EXEEXT) $(make-exe) ...
You can find the same rule here and the dependent files are defined with the object.
... am_SEMAPHORE_TEST_OBJECTS = init.$(OBJEXT) Pibrella.$(OBJEXT) \ tasks.$(OBJEXT) SEMAPHORE_TEST_OBJECTS = $(am_SEMAPHORE_TEST_OBJECTS)
Here OBJEXT is ".o".
... include ./$(DEPDIR)/Pibrella.Po include ./$(DEPDIR)/init.Po include ./$(DEPDIR)/tasks.Po ...Behind the implicit keyword, .SUFFIXES:, we can find the include line as include ./$(DEPDIR)/Pibrella.Po, which is used to reveal the dependency of Pibrella.o generated by automake.
DEPDIR here is an invisible directory called .desp in Source code directory.
By marking this line, we can exclude the checking of dependent file and keep the assumed object file with the source codes of example.
Therefore, we reach our perspective.
------------BTW, one of my friends ask me that how to enable math library in RTEMS compilation:
For example, it is a question like this:
https://lists.rtems.org/pipermail/users/2006-March/014215.html
Ad-hoc way is to open Makefile.am in the same folder:
LINK_LIBS = $(NXT_LDLIBS)add -lm at the end of line.
LINK_LIBS = $(NXT_LDLIBS) -lm
Comments
Post a Comment