Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
docs:guide-developer:helloworld:chapter6 [2018/12/05 04:45] – [Testing the makefile using native tools] Explained 'nothing to be done' response. gthdocs:guide-developer:helloworld:chapter6 [2024/12/16 21:27] (current) – syntax highligting stokito
Line 7: Line 7:
   * Commissioned your development environment   * Commissioned your development environment
   * Prepared, configured and built the tools and the cross-compilation toolchain   * Prepared, configured and built the tools and the cross-compilation toolchain
-  * Configured the PATH environment variable+  * Configured the ''PATH'' environment variable
   * Created a simple “Hello, world!” application using native compilation tools   * Created a simple “Hello, world!” application using native compilation tools
   * Created a local package feed for your application   * Created a local package feed for your application
Line 20: Line 20:
  
 Our test application is still quite simple, containing only a single source file. As a result, it is quite straightforward to compile and link it, although the syntax to do so is somewhat obscure in the package manifest: Our test application is still quite simple, containing only a single source file. As a result, it is quite straightforward to compile and link it, although the syntax to do so is somewhat obscure in the package manifest:
-<code>+<code make Makefile>
 # Package build instructions; invoke the target-specific compiler to first compile the source file, and then to link the file into the final executable # Package build instructions; invoke the target-specific compiler to first compile the source file, and then to link the file into the final executable
 define Build/Compile define Build/Compile
Line 33: Line 33:
 Using GNU make is one approach to solving some of these problems. Using GNU make is one approach to solving some of these problems.
  
-===== Creating a makefile =====+===== Creating a Makefile =====
  
-In order to use GNU make, it is necessary to create a makefile for our test application. When writing the makefile, you will only need to pay attention to the source files of your application; the integration into the OpenWrt build system is done at a later stage.+In order to use GNU make, it is necessary to create a Makefile for our test application. When writing the Makefile, you will only need to pay attention to the source files of your application; the integration into the OpenWrt build system is done at a later stage.
  
-Let's change to the source directory of the application and create the makefile+Let's change to the source directory of the application and create the Makefile
-<code>+<code make Makefile>
 cd /home/buildbot/helloworld cd /home/buildbot/helloworld
 touch Makefile touch Makefile
 </code> </code>
  
-Using a text editor, paste the following content into the file. Note that similar to the package manifest, the makefile contains long whitespace indentations. They should be replaced with a hard tab character when editing the file: +Using a text editor, paste the following content into the file. Note that similar to the package manifest, the Makefile contains long whitespace indentations. They should be replaced with a hard tab character when editing the file: 
-<code make makefile>+<code make Makefile>
 # Global target; when 'make' is run without arguments, this is what it should do # Global target; when 'make' is run without arguments, this is what it should do
 all: helloworld all: helloworld
Line 81: Line 81:
 </code> </code>
  
-===== Testing the makefile using native tools =====+===== Testing the Makefile using native tools =====
  
 Before modifying our package manifest, it is important that we test the makefile-based build process. To build the 'helloworld' executable, you can simply issue the following command: Before modifying our package manifest, it is important that we test the makefile-based build process. To build the 'helloworld' executable, you can simply issue the following command:
Line 90: Line 90:
 If you get the message ''make: Nothing to be done for `all`'' this means the executable is already up to date.  To mimic a change in the code, let's update the source file, then try the make command again: If you get the message ''make: Nothing to be done for `all`'' this means the executable is already up to date.  To mimic a change in the code, let's update the source file, then try the make command again:
  
-<code>+<code bash>
 touch helloworld.c touch helloworld.c
 make make
Line 97: Line 97:
 This will build the application using the native compilation tools. This will build the application using the native compilation tools.
  
-You'll see that GNU ''make'' will output the steps it took to build the application and that these steps are quite similar to the manual steps you took in chapter 2. If you encounter errors during the process, then one of the most common errors is that the whitespaces at the start of the rows in the makefile are not tab characters.+You'll see that GNU ''make'' will output the steps it took to build the application and that these steps are quite similar to the manual steps you took in chapter 2. If you encounter errors during the process, then one of the most common errors is that the whitespaces at the start of the rows in the Makefile are not tab characters.
  
 ===== Modifying the package manifest, and testing the build ===== ===== Modifying the package manifest, and testing the build =====
  
-Now that our makefile is created and tested, we can integrated into the package manifest. To do so, we modify the build instructions in the package manifest to contain the necessary instructions. This file is located in ''/home/buildbot/mypackages/examples/helloworld/'' directory.+Now that our package's Makefile is created and tested, we can integrate it into the package manifest. To do so, we modify the build instructions in the package manifest to contain the necessary instructions. This file is located in ''/home/buildbot/mypackages/examples/helloworld/'' directory.  Open this particular ''Makefile'' in your preferred editor.
  
 When migrating to use the GNU make tool, you might not need to use hard tabs anymore. However, I find it good practise to use a hard tab at the start of each command row. When using the multi-line separator '\', the adjacent lines do not need hard tabs. When migrating to use the GNU make tool, you might not need to use hard tabs anymore. However, I find it good practise to use a hard tab at the start of each command row. When using the multi-line separator '\', the adjacent lines do not need hard tabs.
-<code>+<code make Makefile>
 # Package build instructions; invoke the GNU make tool to build our package # Package build instructions; invoke the GNU make tool to build our package
 define Build/Compile define Build/Compile
Line 115: Line 115:
  
 After modifying your package manifest, test the package build process again from the OpenWrt build system's folder: After modifying your package manifest, test the package build process again from the OpenWrt build system's folder:
-<code>+<code bash>
 cd /home/buildbot/source cd /home/buildbot/source
 make package/helloworld/{clean,compile} make package/helloworld/{clean,compile}
Line 122: Line 122:
  
 If you encounter errors when building it using GNU make, it is sometimes necessary to manually update and install the feeds. Perform the same steps that we did in chapter 4: If you encounter errors when building it using GNU make, it is sometimes necessary to manually update and install the feeds. Perform the same steps that we did in chapter 4:
-<code>+<code bash>
 cd /home/buildbot/source cd /home/buildbot/source
 ./scripts/feeds update mypackages ./scripts/feeds update mypackages
Line 128: Line 128:
 </code> </code>
  
-If still having issues, ensure your source directory (/home/buildbot/helloworld) is cleaned of any *.o files or final executables built for your host rather than OpenWRT (only .c and Makefile).+If still having issues, ensure your source directory (/home/buildbot/helloworld) is cleaned of any *.o files or final executables built for your host rather than OpenWRT (only ''.c'' and ''Makefile'').
  
 ===== Conclusion ===== ===== Conclusion =====
  
 In this lengthy chapter, we modified our original application to use GNU make instead of direct compilation commands. We wrote a simple makefile to evaluate all source code files in the directory, compile them, and link the generated object files into an executable. We then tested the makefile using native compilation tools to ensure it runs properly, and finally modified our package manifest to use the GNU make build process instead of the hard-coded compilation commands. In this lengthy chapter, we modified our original application to use GNU make instead of direct compilation commands. We wrote a simple makefile to evaluate all source code files in the directory, compile them, and link the generated object files into an executable. We then tested the makefile using native compilation tools to ensure it runs properly, and finally modified our package manifest to use the GNU make build process instead of the hard-coded compilation commands.
  • Last modified: 2024/12/16 21:27
  • by stokito