]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | # SPDX-License-Identifier: BSD-3-Clause |
2 | # Copyright(c) 2010-2014 Intel Corporation. | |
3 | # Copyright 2015 6WIND S.A. | |
7c673cae FG |
4 | |
5 | # Configuration, compilation and installation can be done at once | |
6 | # with make install T=<config> | |
7 | ||
8 | ifdef T # config, build and install combined | |
9 | # The build directory is T and may be prepended with O | |
10 | O ?= . | |
11 | RTE_OUTPUT := $O/$T | |
12 | else # standard install | |
13 | # Build directory is given with O= | |
14 | O ?= build | |
15 | RTE_OUTPUT := $O | |
16 | endif | |
17 | ||
18 | ifneq ($(MAKECMDGOALS),pre_install) | |
19 | include $(RTE_SDK)/mk/rte.vars.mk | |
20 | endif | |
21 | ||
22 | ifdef T # defaults with T= will install an almost flat staging tree | |
23 | export prefix ?= | |
24 | kerneldir ?= $(prefix)/kmod | |
25 | else | |
26 | ifeq ($(RTE_EXEC_ENV),linuxapp) | |
9f95a23c TL |
27 | RTE_EXEC_ENV=linux |
28 | endif | |
29 | ifeq ($(RTE_EXEC_ENV),linux) | |
f67539c2 | 30 | kerneldir ?= $(RTE_KERNELDIR:/build=/extra/dpdk) |
7c673cae FG |
31 | else |
32 | kerneldir ?= /boot/modules | |
33 | endif | |
34 | prefix ?= /usr/local | |
35 | endif | |
36 | exec_prefix ?= $(prefix) | |
37 | bindir ?= $(exec_prefix)/bin | |
38 | sbindir ?= $(exec_prefix)/sbin | |
39 | libdir ?= $(exec_prefix)/lib | |
40 | includedir ?= $(prefix)/include/dpdk | |
41 | datarootdir ?= $(prefix)/share | |
42 | docdir ?= $(datarootdir)/doc/dpdk | |
43 | datadir ?= $(datarootdir)/dpdk | |
44 | mandir ?= $(datarootdir)/man | |
45 | sdkdir ?= $(datadir) | |
46 | targetdir ?= $(datadir)/$(RTE_TARGET) | |
47 | ||
48 | # The install directories may be staged in DESTDIR | |
49 | ||
50 | # Create the directory $1 if not exists | |
51 | rte_mkdir = test -d $1 || mkdir -p $1 | |
52 | ||
53 | # Create the relative symbolic link $2 -> $1 | |
54 | # May be replaced with --relative option of ln from coreutils-8.16 | |
11fdf7f2 | 55 | rte_symlink = ln -snf $$($(RTE_SDK)/buildtools/relpath.sh $1 $(dir $2)) $2 |
7c673cae FG |
56 | |
57 | .PHONY: pre_install | |
58 | pre_install: | |
59 | ifdef T | |
60 | $(Q)if [ ! -f $(RTE_OUTPUT)/.config ]; then \ | |
61 | $(MAKE) config O=$(RTE_OUTPUT); \ | |
62 | elif cmp -s $(RTE_OUTPUT)/.config.orig $(RTE_OUTPUT)/.config; then \ | |
63 | $(MAKE) config O=$(RTE_OUTPUT); \ | |
64 | else \ | |
65 | if [ -f $(RTE_OUTPUT)/.config.orig ] ; then \ | |
66 | tmp_build=$(RTE_OUTPUT)/.config.tmp; \ | |
67 | $(MAKE) config O=$$tmp_build; \ | |
68 | if ! cmp -s $(RTE_OUTPUT)/.config.orig $$tmp_build/.config ; then \ | |
69 | echo "Conflict: local config and template config have both changed"; \ | |
70 | exit 1; \ | |
71 | fi; \ | |
72 | fi; \ | |
73 | echo "Using local configuration"; \ | |
74 | fi | |
75 | $(Q)$(MAKE) all O=$(RTE_OUTPUT) | |
76 | endif | |
77 | ||
78 | .PHONY: install | |
79 | install: | |
80 | ifeq ($(DESTDIR)$(if $T,,+),) | |
81 | @echo Installation cannot run with T defined and DESTDIR undefined | |
82 | else | |
83 | @echo ================== Installing $(DESTDIR)$(prefix)/ | |
84 | $(Q)$(MAKE) O=$(RTE_OUTPUT) T= install-runtime | |
85 | $(Q)$(MAKE) O=$(RTE_OUTPUT) T= install-kmod | |
86 | $(Q)$(MAKE) O=$(RTE_OUTPUT) T= install-sdk | |
87 | $(Q)$(MAKE) O=$(RTE_OUTPUT) T= install-doc | |
88 | @echo Installation in $(DESTDIR)$(prefix)/ complete | |
89 | endif | |
90 | ||
11fdf7f2 TL |
91 | # when installing we want recursive copies preserving timestamps only, no |
92 | # preservation of user/group ids or permissions | |
93 | CP_FLAGS=-dR --preserve=timestamps | |
94 | TAR_X_FLAGS=--strip-components=1 --keep-newer-files --no-same-owner --no-same-permissions | |
95 | ||
7c673cae FG |
96 | install-runtime: |
97 | $(Q)$(call rte_mkdir, $(DESTDIR)$(libdir)) | |
11fdf7f2 | 98 | $(Q)cp $(CP_FLAGS) $O/lib/* $(DESTDIR)$(libdir) |
7c673cae FG |
99 | $(Q)$(call rte_mkdir, $(DESTDIR)$(bindir)) |
100 | $(Q)tar -cf - -C $O --exclude 'app/*.map' \ | |
101 | --exclude app/dpdk-pmdinfogen \ | |
102 | --exclude 'app/cmdline*' --exclude app/test \ | |
103 | --exclude app/testacl --exclude app/testpipeline app | \ | |
11fdf7f2 | 104 | tar -xf - -C $(DESTDIR)$(bindir) $(TAR_X_FLAGS) |
9f95a23c TL |
105 | $(Q)$(call rte_mkdir, $(DESTDIR)$(datadir)/usertools) |
106 | $(Q)tar -cf - -C $(RTE_SDK) --exclude meson.build usertools | \ | |
107 | tar -xf - -C $(DESTDIR)$(datadir)/usertools $(TAR_X_FLAGS) | |
7c673cae | 108 | $(Q)$(call rte_mkdir, $(DESTDIR)$(sbindir)) |
11fdf7f2 | 109 | $(Q)$(call rte_symlink, $(DESTDIR)$(datadir)/usertools/dpdk-devbind.py, \ |
7c673cae | 110 | $(DESTDIR)$(sbindir)/dpdk-devbind) |
11fdf7f2 | 111 | $(Q)$(call rte_symlink, $(DESTDIR)$(datadir)/usertools/dpdk-pmdinfo.py, \ |
7c673cae FG |
112 | $(DESTDIR)$(bindir)/dpdk-pmdinfo) |
113 | ifneq ($(wildcard $O/doc/man/*/*.1),) | |
114 | $(Q)$(call rte_mkdir, $(DESTDIR)$(mandir)/man1) | |
11fdf7f2 | 115 | $(Q)cp $(CP_FLAGS) $O/doc/man/*/*.1 $(DESTDIR)$(mandir)/man1 |
7c673cae FG |
116 | endif |
117 | ifneq ($(wildcard $O/doc/man/*/*.8),) | |
118 | $(Q)$(call rte_mkdir, $(DESTDIR)$(mandir)/man8) | |
11fdf7f2 | 119 | $(Q)cp $(CP_FLAGS) $O/doc/man/*/*.8 $(DESTDIR)$(mandir)/man8 |
7c673cae FG |
120 | endif |
121 | ||
122 | install-kmod: | |
123 | ifneq ($(wildcard $O/kmod/*),) | |
124 | $(Q)$(call rte_mkdir, $(DESTDIR)$(kerneldir)) | |
11fdf7f2 | 125 | $(Q)cp $(CP_FLAGS) $O/kmod/* $(DESTDIR)$(kerneldir) |
7c673cae FG |
126 | endif |
127 | ||
128 | install-sdk: | |
129 | $(Q)$(call rte_mkdir, $(DESTDIR)$(includedir)) | |
130 | $(Q)tar -chf - -C $O include | \ | |
11fdf7f2 | 131 | tar -xf - -C $(DESTDIR)$(includedir) $(TAR_X_FLAGS) |
7c673cae | 132 | $(Q)$(call rte_mkdir, $(DESTDIR)$(sdkdir)) |
11fdf7f2 TL |
133 | $(Q)cp $(CP_FLAGS) $(RTE_SDK)/mk $(DESTDIR)$(sdkdir) |
134 | $(Q)cp $(CP_FLAGS) $(RTE_SDK)/buildtools $(DESTDIR)$(sdkdir) | |
7c673cae | 135 | $(Q)$(call rte_mkdir, $(DESTDIR)$(targetdir)/app) |
11fdf7f2 TL |
136 | $(Q)cp $(CP_FLAGS) $O/.config $(DESTDIR)$(targetdir) |
137 | $(Q)cp $(CP_FLAGS) $O/app/dpdk-pmdinfogen $(DESTDIR)$(targetdir)/app | |
7c673cae FG |
138 | $(Q)$(call rte_symlink, $(DESTDIR)$(includedir), $(DESTDIR)$(targetdir)/include) |
139 | $(Q)$(call rte_symlink, $(DESTDIR)$(libdir), $(DESTDIR)$(targetdir)/lib) | |
140 | ||
141 | install-doc: | |
142 | ifneq ($(wildcard $O/doc/html),) | |
143 | $(Q)$(call rte_mkdir, $(DESTDIR)$(docdir)) | |
11fdf7f2 TL |
144 | $(Q)tar -cf - -C $O/doc --exclude 'html/guides/.*' html | \ |
145 | tar -xf - -C $(DESTDIR)$(docdir) $(TAR_X_FLAGS) | |
7c673cae FG |
146 | endif |
147 | ifneq ($(wildcard $O/doc/*/*/*pdf),) | |
148 | $(Q)$(call rte_mkdir, $(DESTDIR)$(docdir)/guides) | |
11fdf7f2 | 149 | $(Q)cp $(CP_FLAGS) $O/doc/*/*/*pdf $(DESTDIR)$(docdir)/guides |
7c673cae FG |
150 | endif |
151 | $(Q)$(call rte_mkdir, $(DESTDIR)$(datadir)) | |
11fdf7f2 | 152 | $(Q)cp $(CP_FLAGS) $(RTE_SDK)/examples $(DESTDIR)$(datadir) |