Skip to contentSkip to conversation

real "make install" rule

PATCH In review Thomas Monjalon 1 participant 5 messages Jul 26, 2013 1 message not in the archive

lore
Share & tools
lore
#0 lore raw

cover real "make install" rule

The current "make install" rule don't install anything. It builds one or more targets with different configurations.

These patches allow to install only files needed to build and run a DPDK appplication. The old behaviour is kept for compatibility and the new behaviour is
a second stage triggered by setting the DESTDIR variable.

So, the command "make install T=x86_64-default-linuxapp-gcc O=aaa DESTDIR=bbb" will build in aaa/x86_64-default-linuxapp-gcc/ and install in bbb/.

The install directory can then be used as RTE_SDK path to build an application.

Signature · 16 lines
Thomas

---

Olivier Matz (3):
  mk: allow to specify O= in install rule
  mk: in install rule, don't overwrite .config if it already exists
  mk: allow to specify DESTDIR in build rule

 doc/build-sdk-quick.txt |   13 +++++++------
 mk/rte.sdkbuild.mk      |   16 ++++++++++++++++
 mk/rte.sdkinstall.mk    |   17 +++++++++--------
 3 files changed, 32 insertions(+), 14 deletions(-)

-- 
1.7.10.4
#2 lore raw

PATCH 1/3 mk: allow to specify O= in install rule

In reply to a message not in the archive

From: Olivier Matz <[email protected]>

This variable $(O) can be used to specify a build directory when doing an "install" procedure. The default is ".", which means that targets will be built in the source dpdk.

This option is useful to compile outside of the source tree that may be read-only.

---
 doc/build-sdk-quick.txt |    4 ++--
 mk/rte.sdkinstall.mk    |   15 +++++++--------
 2 files changed, 9 insertions(+), 10 deletions(-)
doc/build-sdk-quick.txt +2 -2
index c839676..d66f0d5 100644
@@ -5,7 +5,7 @@ Build commands
 	all         same as build (default rule)
 	build       build in a configured directory
 	clean       remove files but keep configuration
-	install     build many targets (wildcard allowed) in fixed directories
+	install     build many targets (wildcard allowed)
 	uninstall   remove all installed targets
 Build variables
 	CROSS            toolchain prefix
@@ -14,7 +14,7 @@ Build variables
 	EXTRA_LDFLAGS    linker options
 	V   verbose
 	D   debug dependencies
-	O   output directory (default: build/)   - cannot be used with install
+	O   output directory (default: build/ - install default: ./)
 	T   target template (install default: *) - used with config or install
 			format: <arch-machine-execenv-toolchain>
 			templates in config/defconfig_*
mk/rte.sdkinstall.mk +7 -8
index 022cd70..a280234 100644
@@ -30,10 +30,11 @@
 #   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 # 
 
+# Build directory is given with O=
 ifdef O
-ifeq ("$(origin O)", "command line")
-$(error "Cannot use O= with install target")
-endif
+BUILD_DIR=$(O)
+else
+BUILD_DIR=.
 endif
 
 # Targets to install can be specified in command line. It can be a
@@ -56,8 +57,8 @@ install: $(INSTALL_TARGETS)
 
 %_install:
 	@echo ================== Installing $*
-	$(Q)$(MAKE) config T=$* O=$*
-	$(Q)$(MAKE) all O=$*
+	$(Q)$(MAKE) config T=$* O=$(BUILD_DIR)/$*
+	$(Q)$(MAKE) all O=$(BUILD_DIR)/$*
 
 #
 # uninstall: remove all built sdk
@@ -70,6 +71,4 @@ uninstall: $(UNINSTALL_TARGETS)
 
 %_uninstall:
 	@echo ================== Uninstalling $*
-	$(Q)rm -rf $*
-
-
+	$(Q)rm -rf $(BUILD_DIR)/$*
Signature · 1 line
1.7.10.4
#3 lore raw

PATCH 2/3 mk: in install rule, don't overwrite .config if it already exists

In reply to a message not in the archive

From: Olivier Matz <[email protected]>

This allows the user to prepare a configuration with make config before using make install.

---
 mk/rte.sdkinstall.mk |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
mk/rte.sdkinstall.mk +3 -1
index a280234..ee98981 100644
@@ -57,7 +57,9 @@ install: $(INSTALL_TARGETS)
 
 %_install:
 	@echo ================== Installing $*
-	$(Q)$(MAKE) config T=$* O=$(BUILD_DIR)/$*
+	$(Q)if [ ! -f $(BUILD_DIR)/$*/.config ]; then \
+		$(MAKE) config T=$* O=$(BUILD_DIR)/$*; \
+	fi
 	$(Q)$(MAKE) all O=$(BUILD_DIR)/$*
 
 #
Signature · 1 line
1.7.10.4
#4 lore raw

PATCH 3/3 mk: allow to specify DESTDIR in build rule

In reply to a message not in the archive

From: Olivier Matz <[email protected]>

This will install the binary sdk (bin + modules + libs + headers + mk) in the specified directory.
This directory can be used as RTE_SDK by external applications.

---
 doc/build-sdk-quick.txt |   13 +++++++------
 mk/rte.sdkbuild.mk      |   16 ++++++++++++++++
 2 files changed, 23 insertions(+), 6 deletions(-)
doc/build-sdk-quick.txt +7 -6
index d66f0d5..18b0ee6 100644
@@ -5,16 +5,17 @@ Build commands
 	all         same as build (default rule)
 	build       build in a configured directory
 	clean       remove files but keep configuration
-	install     build many targets (wildcard allowed)
+	install     build many targets (wildcard allowed) and install in DESTDIR
 	uninstall   remove all installed targets
 Build variables
-	CROSS            toolchain prefix
 	EXTRA_CPPFLAGS   preprocessor options
 	EXTRA_CFLAGS     compiler options
 	EXTRA_LDFLAGS    linker options
-	V   verbose
-	D   debug dependencies
-	O   output directory (default: build/ - install default: ./)
-	T   target template (install default: *) - used with config or install
+	CROSS     toolchain prefix
+	V         verbose
+	D         debug dependencies
+	O         build directory (default: build/ - install default: ./)
+	DESTDIR   second-stage install directory
+	T         target template (install default: *) - used with config or install
 			format: <arch-machine-execenv-toolchain>
 			templates in config/defconfig_*
mk/rte.sdkbuild.mk +16 -0
index 5ea4202..087d3ab 100644
@@ -30,6 +30,8 @@
 #   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 # 
 
+# If DESTDIR variable is given, install binary dpdk
+
 #
 # include rte.vars.mk if config file exists
 #
@@ -60,6 +62,20 @@ CLEANDIRS = $(addsuffix _clean,$(ROOTDIRS-y) $(ROOTDIRS-n) $(ROOTDIRS-))
 .PHONY: build
 build: $(ROOTDIRS-y)
 	@echo Build complete
+ifneq ($(DESTDIR),)
+	$(Q)mkdir -p $(DESTDIR)
+	$(Q)tar -C $(RTE_SDK) -cf - mk | tar -C $(DESTDIR) -x \
+	  --keep-newer-files --warning=no-ignore-newer -f -
+	$(Q)mkdir -p $(DESTDIR)/`basename $(RTE_OUTPUT)`
+	$(Q)tar -C $(RTE_OUTPUT) -chf - \
+	  --exclude app --exclude hostapp --exclude build \
+	  --exclude Makefile --exclude .depdirs . | \
+	  tar -C $(DESTDIR)/`basename $(RTE_OUTPUT)` -x --keep-newer-files \
+	  --warning=no-ignore-newer -f -
+	$(Q)install -D $(RTE_OUTPUT)/app/testpmd \
+	  $(DESTDIR)/`basename $(RTE_OUTPUT)`/app/testpmd
+	@echo Installation in $(DESTDIR) complete
+endif
 
 .PHONY: clean
 clean: $(CLEANDIRS)
Signature · 1 line
1.7.10.4
#5 lore raw
In reply to a message not in the archive

26/07/2013 15:13, Thomas Monjalon :

Quoted 7 lines

The current "make install" rule don't install anything. It builds one or more targets with different configurations.

These patches allow to install only files needed to build and run a DPDK appplication. The old behaviour is kept for compatibility and the new behaviour is a second stage triggered by setting the DESTDIR variable.

Quoted 6 lines

So, the command "make install T=x86_64-default-linuxapp-gcc O=aaa DESTDIR=bbb" will build in aaa/x86_64-default-linuxapp-gcc/ and install in bbb/.

The install directory can then be used as RTE_SDK path to build an application.

all pushed

Signature · 1 line
Thomas