Preparing, configuring and building the necessary tools
1 2 3 4 5 6 7 8 9 10 11
cd ~ mkdir buidbot cd ~/buildbot git clone https://git.openwrt.org/openwrt/openwrt.git source cd /home/buildbot/source git checkout v17.01.2 make distclean ./scripts/feeds update -a ./scripts/feeds install -a make menuconfig make toolchain/install
# Name, version and release number # The name and version of your package are used to define the variable to point to the build directory of your package: $(PKG_BUILD_DIR) PKG_NAME:=helloworld PKG_VERSION:=1.0 PKG_RELEASE:=1
# Source settings (i.e. where to find the source codes) # This is a custom variable, used below SOURCE_DIR:=/home/buildbot/helloworld
include$(INCLUDE_DIR)/package.mk
# Package definition; instructs on how and where our package will appear in the overall configuration menu ('make menuconfig') define Package/helloworld SECTION:=examples CATEGORY:=Examples TITLE:=Hello, World! endef
# Package description; a more verbose description on what our package does define Package/helloworld/description A simple "Hello, world!" -application. endef
# Package preparation instructions; create the build directory and copy the source code. # The last command is necessary to ensure our preparation instructions remain compatible with the patching system. define Build/Prepare mkdir -p $(PKG_BUILD_DIR) cp $(SOURCE_DIR)/* $(PKG_BUILD_DIR) $(Build/Patch) endef
# 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 $(TARGET_CC)$(TARGET_CFLAGS) -o $(PKG_BUILD_DIR)/helloworld.o -c $(PKG_BUILD_DIR)/helloworld.c $(TARGET_CC)$(TARGET_LDFLAGS) -o $(PKG_BUILD_DIR)/$1 $(PKG_BUILD_DIR)/helloworld.o endef
# Package install instructions; create a directory inside the package to hold our executable, and then copy the executable we built previously into the folder define Package/helloworld/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN)$(PKG_BUILD_DIR)/helloworld $(1)/usr/bin endef
# This command is always the last, it uses the definitions and variables we give above in order to get the job done $(eval $(call BuildPackage,helloworld))
Including the new package feed into the OpenWrt build system
1 2
cd /home/buildbot/source touch feeds.conf
1
src-link mypackages /home/buildbot/mypackages
Updating and installing feeds
1 2 3
cd /home/buildbot/source ./scripts/feeds update mypackages ./scripts/feeds install -a -p mypackages
Building the package
1
make package/helloworld/compile
If everything went successfully, we are presented with a brand new package named helloworld_1.0-1_.ipk in bin/packages//mypackages folder.