2
2
# Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
3
3
#
4
4
5
- .PHONY : all utils shared static deps install uninstall dist depsclean mostlyclean clean distclean
5
+ .PHONY : all tools shared static deps install uninstall dist depsclean mostlyclean clean distclean
6
6
.DEFAULT_GOAL := all
7
7
8
8
# #### Global variables #####
@@ -12,12 +12,21 @@ WITH_SECCOMP ?= 1
12
12
13
13
# #### Global definitions #####
14
14
15
- export CUDA_DIR ?= /usr/local/cuda-8.0
16
- export SRCS_DIR ?= $(CURDIR ) /src
17
- export DEPS_DIR ?= $(CURDIR ) /deps
18
- export DIST_DIR ?= $(CURDIR ) /dist
19
- export MAKE_DIR ?= $(CURDIR ) /mk
20
- export DEBUG_DIR ?= $(CURDIR ) /.debug
15
+ export prefix = /usr/local
16
+ export exec_prefix = $(prefix )
17
+ export bindir = $(exec_prefix ) /bin
18
+ export libdir = $(exec_prefix ) /lib
19
+ export libdbgdir = $(prefix ) /lib/debug$(libdir )
20
+ export includedir = $(prefix ) /include
21
+ export pkgconfdir = $(libdir ) /pkgconfig
22
+
23
+ export CUDA_DIR ?= /usr/local/cuda-8.0
24
+ export PKG_DIR ?= $(CURDIR ) /pkg
25
+ export SRCS_DIR ?= $(CURDIR ) /src
26
+ export DEPS_DIR ?= $(CURDIR ) /deps
27
+ export DIST_DIR ?= $(CURDIR ) /dist
28
+ export MAKE_DIR ?= $(CURDIR ) /mk
29
+ export DEBUG_DIR ?= $(CURDIR ) /.debug
21
30
22
31
include $(MAKE_DIR ) /common.mk
23
32
@@ -66,11 +75,15 @@ BIN_SRCS := $(SRCS_DIR)/nvc_cli.c \
66
75
$(SRCS_DIR ) /utils.c
67
76
68
77
LIB_SCRIPT = $(SRCS_DIR ) /$(LIB_NAME ) .lds
69
- BIN_SCRIPT = $(SRCS_DIR ) /$(BIN_UTILS ) .lds
78
+ BIN_SCRIPT = $(SRCS_DIR ) /$(BIN_NAME ) .lds
70
79
71
80
# #### Target definitions #####
72
81
73
- ARCH := x86_64
82
+ ifneq ($(wildcard /etc/debian_version) ,)
83
+ ARCH ?= amd64
84
+ else
85
+ ARCH ?= x86_64
86
+ endif
74
87
MAJOR := $(call getdef,NVC_MAJOR,$(LIB_INCS ) )
75
88
MINOR := $(call getdef,NVC_MINOR,$(LIB_INCS ) )
76
89
PATCH := $(call getdef,NVC_PATCH,$(LIB_INCS ) )
@@ -86,7 +99,7 @@ ifeq ($(PATCH),)
86
99
$(error Invalid patch version)
87
100
endif
88
101
89
- BIN_UTILS := nvidia-container-cli
102
+ BIN_NAME := nvidia-container-cli
90
103
LIB_NAME := libnvidia-container
91
104
LIB_STATIC := $(LIB_NAME ) .a
92
105
LIB_SHARED := $(LIB_NAME ) .so.$(VERSION )
@@ -97,49 +110,42 @@ LIB_PKGCFG := $(LIB_NAME).pc
97
110
# #### Flags definitions #####
98
111
99
112
# Common flags
100
- ARFLAGS := -rU
101
113
CPPFLAGS := -D_GNU_SOURCE -D_FORTIFY_SOURCE=2 $(CPPFLAGS )
102
114
CFLAGS := -std=gnu11 -O2 -g -fdata-sections -ffunction-sections -fstack-protector -fno-strict-aliasing -fvisibility=hidden \
103
115
-Wall -Wextra -Wcast-align -Wpointer-arith -Wmissing-prototypes -Wnonnull \
104
116
-Wwrite-strings -Wlogical-op -Wformat=2 -Wmissing-format-attribute -Winit-self -Wshadow \
105
117
-Wstrict-prototypes -Wunreachable-code -Wconversion -Wsign-conversion \
106
118
-Wno-unknown-warning-option -Wno-format-extra-args -Wno-gnu-alignof-expression $(CFLAGS )
107
119
LDFLAGS := -Wl,-zrelro -Wl,-znow -Wl,-zdefs -Wl,--gc-sections $(LDFLAGS )
108
-
109
- # Library flags
110
- _LIB_CPPFLAGS := -DNV_LINUX -isystem $(CUDA_DIR ) /include -isystem $(DEPS_DIR ) /usr/local/include -include $(BUILD_DEFS )
111
- _LIB_CFLAGS := -fPIC
112
- _LIB_LDFLAGS := -L$(DEPS_DIR ) /usr/local/lib -shared -Wl,-soname=$(LIB_SONAME )
113
- _LIB_LDLIBS_STATIC := -l:libelf.a -l:libnvidia-modprobe-utils.a
114
- _LIB_LDLIBS_SHARED := -ldl -lcap
120
+ LDLIBS := $(LDLIBS )
121
+
122
+ # Library flags (recursively expanded to handle target-specific flags)
123
+ LIB_CPPFLAGS = -DNV_LINUX -isystem $(CUDA_DIR ) /include -isystem $(DEPS_DIR )$(includedir ) -include $(BUILD_DEFS )
124
+ LIB_CFLAGS = -fPIC
125
+ LIB_LDFLAGS = -L$(DEPS_DIR )$(libdir ) -shared -Wl,-soname=$(LIB_SONAME )
126
+ LIB_LDLIBS_STATIC = -l:libelf.a -l:libnvidia-modprobe-utils.a
127
+ LIB_LDLIBS_SHARED = -ldl -lcap
115
128
ifeq ($(WITH_TIRPC ) , 1)
116
- _LIB_CPPFLAGS += -isystem $(DEPS_DIR ) /usr/local/include /tirpc -DWITH_TIRPC
117
- _LIB_LDLIBS_STATIC += -l:libtirpc.a
118
- _LIB_LDLIBS_SHARED += -lpthread
129
+ LIB_CPPFLAGS += -isystem $(DEPS_DIR )$( includedir ) /tirpc -DWITH_TIRPC
130
+ LIB_LDLIBS_STATIC += -l:libtirpc.a
131
+ LIB_LDLIBS_SHARED += -lpthread
119
132
endif
120
133
ifeq ($(WITH_SECCOMP ) , 1)
121
- _LIB_CPPFLAGS += -DWITH_SECCOMP
122
- _LIB_LDLIBS_SHARED += -lseccomp
134
+ LIB_CPPFLAGS += -DWITH_SECCOMP
135
+ LIB_LDLIBS_SHARED += -lseccomp
123
136
endif
124
- _LIB_LDLIBS := $(_LIB_LDLIBS_STATIC ) $(_LIB_LDLIBS_SHARED )
125
- # Library flags + common flags (recursively expanded to handle target-specific flags)
126
- LIB_CPPFLAGS = $(_LIB_CPPFLAGS ) $(CPPFLAGS )
127
- LIB_CFLAGS = $(_LIB_CFLAGS ) $(CFLAGS )
128
- LIB_LDFLAGS = $(_LIB_LDFLAGS ) $(LDFLAGS )
129
- LIB_LDLIBS_STATIC = $(_LIB_LDLIBS_STATIC )
130
- LIB_LDLIBS_SHARED = $(_LIB_LDLIBS_SHARED ) $(LDLIBS )
131
- LIB_LDLIBS = $(_LIB_LDLIBS ) $(LDLIBS )
132
-
133
- # Binary flags
134
- _BIN_CPPFLAGS := -include $(BUILD_DEFS )
135
- _BIN_CFLAGS := -fPIE -flto
136
- _BIN_LDFLAGS := -L. -pie
137
- _BIN_LDLIBS := -l:$(LIB_SHARED ) -lcap
138
- # Binary flags + common flags (recursively expanded to handle target-specific flags)
139
- BIN_CPPFLAGS = $(_BIN_CPPFLAGS ) $(CPPFLAGS )
140
- BIN_CFLAGS = $(_BIN_CFLAGS ) $(CFLAGS )
141
- BIN_LDFLAGS = $(_BIN_LDFLAGS ) $(LDFLAGS )
142
- BIN_LDLIBS = $(_BIN_LDLIBS ) $(LDLIBS )
137
+ LIB_CPPFLAGS += $(CPPFLAGS )
138
+ LIB_CFLAGS += $(CFLAGS )
139
+ LIB_LDFLAGS += $(LDFLAGS )
140
+ LIB_LDLIBS_STATIC +=
141
+ LIB_LDLIBS_SHARED += $(LDLIBS )
142
+ LIB_LDLIBS = $(LIB_LDLIBS_STATIC ) $(LIB_LDLIBS_SHARED )
143
+
144
+ # Binary flags (recursively expanded to handle target-specific flags)
145
+ BIN_CPPFLAGS = -include $(BUILD_DEFS ) $(CPPFLAGS )
146
+ BIN_CFLAGS = -fPIE -flto $(CFLAGS )
147
+ BIN_LDFLAGS = -L. -pie $(LDFLAGS )
148
+ BIN_LDLIBS = -l:$(LIB_SHARED ) -lcap $(LDLIBS )
143
149
144
150
$(word 1,$(LIB_RPC_SRCS ) ) : RPCGENFLAGS=-h
145
151
$(word 2,$(LIB_RPC_SRCS ) ) : RPCGENFLAGS=-c
@@ -181,33 +187,31 @@ $(LIB_SHARED): $(LIB_OBJS)
181
187
182
188
$(LIB_STATIC_OBJ ) : $(LIB_OBJS )
183
189
# FIXME Handle user-defined LDFLAGS and LDLIBS
184
- $(LD ) -d -r --exclude-libs ALL -L$(DEPS_DIR ) /usr/local/lib $(OUTPUT_OPTION ) $^ $(LIB_LDLIBS_STATIC )
190
+ $(LD ) -d -r --exclude-libs ALL -L$(DEPS_DIR )$( libdir ) $(OUTPUT_OPTION ) $^ $(LIB_LDLIBS_STATIC )
185
191
$(OBJCPY ) --localize-hidden $@
186
192
$(STRIP ) --strip-unneeded -R .comment $@
187
193
188
- $(BIN_UTILS ) : $(BIN_OBJS )
194
+ $(BIN_NAME ) : $(BIN_OBJS )
189
195
$(CC ) $(BIN_CFLAGS ) $(BIN_CPPFLAGS ) $(BIN_LDFLAGS ) $(OUTPUT_OPTION ) $^ $(BIN_SCRIPT ) $(BIN_LDLIBS )
190
196
$(STRIP ) --strip-unneeded -R .comment $@
191
197
192
198
# #### Public rules #####
193
199
194
- all : release
200
+ all : CPPFLAGS += -DNDEBUG
201
+ all : shared static tools
195
202
196
203
debug : CFLAGS += -pedantic -fsanitize=undefined -fno-omit-frame-pointer -fno-common
197
204
debug : LDLIBS += -lubsan
198
205
debug : STRIP := @echo skipping: strip
199
- debug : shared static utils
200
-
201
- release : CPPFLAGS += -DNDEBUG
202
- release : shared static utils
206
+ debug : shared static tools
203
207
204
- utils : $(BIN_UTILS )
208
+ tools : $(BIN_NAME )
205
209
206
210
shared : $(LIB_SHARED )
207
211
208
212
static : $(LIB_STATIC ) ($(LIB_STATIC_OBJ ) )
209
213
210
- deps : export DESTDIR=$(DEPS_DIR )
214
+ deps : export DESTDIR: =$(DEPS_DIR )
211
215
deps : $(LIB_RPC_SRCS ) $(BUILD_DEFS )
212
216
$(MKDIR ) -p $(DEPS_DIR )
213
217
$(MAKE ) -f $(MAKE_DIR ) /elftoolchain.mk install
@@ -228,9 +232,9 @@ install: all
228
232
# Install debugging symbols
229
233
$(INSTALL ) -m 644 $(DEBUG_DIR ) /$(LIB_SONAME ) $(DESTDIR )$(libdbgdir )
230
234
# Install configuration files
231
- $(M4 ) -D ' $$VERSION=$ (strip $(VERSION))' -D ' $$PRIVATE_LIBS=$ (strip $(LIB_LDLIBS_SHARED))' $( MAKE_DIR ) / $( LIB_PKGCFG ) .m4 > $(DESTDIR )$(pkgconfdir ) /$(LIB_PKGCFG )
235
+ $(MAKE_DIR ) / $( LIB_PKGCFG ) .in " $ ( strip $( VERSION) ) " " $ ( strip $( LIB_LDLIBS_SHARED) ) " > $(DESTDIR )$(pkgconfdir ) /$(LIB_PKGCFG )
232
236
# Install binary files
233
- $(INSTALL ) -m 755 $(BIN_UTILS ) $(DESTDIR )$(bindir )
237
+ $(INSTALL ) -m 755 $(BIN_NAME ) $(DESTDIR )$(bindir )
234
238
235
239
uninstall :
236
240
# Uninstall header files
@@ -242,9 +246,9 @@ uninstall:
242
246
# Uninstall configuration files
243
247
$(RM ) $(DESTDIR )$(pkgconfdir ) /$(LIB_PKGCFG )
244
248
# Uninstall binary files
245
- $(RM ) $(DESTDIR )$(bindir ) /$(BIN_UTILS )
249
+ $(RM ) $(DESTDIR )$(bindir ) /$(BIN_NAME )
246
250
247
- dist : DESTDIR=$(DIST_DIR ) /$(LIB_NAME ) _$(VERSION )
251
+ dist : DESTDIR: =$(DIST_DIR ) /$(LIB_NAME ) _$(VERSION )$( addprefix -, $( TAG ) )
248
252
dist : install
249
253
$(TAR ) -C $(dir $(DESTDIR ) ) -caf $(DESTDIR ) _$(ARCH ) .tar.xz $(notdir $(DESTDIR ) )
250
254
$(RM ) -r $(DESTDIR )
@@ -264,4 +268,20 @@ clean: mostlyclean depsclean
264
268
265
269
distclean : clean
266
270
$(RM ) -r $(DEPS_DIR ) $(DIST_DIR ) $(DEBUG_DIR )
267
- $(RM ) $(LIB_RPC_SRCS ) $(LIB_STATIC ) $(LIB_SHARED ) $(BIN_UTILS )
271
+ $(RM ) $(LIB_RPC_SRCS ) $(LIB_STATIC ) $(LIB_SHARED ) $(BIN_NAME )
272
+
273
+ deb : DESTDIR:=$(DIST_DIR ) /$(LIB_NAME ) _$(VERSION ) _$(ARCH )
274
+ deb : prefix:=/usr
275
+ deb : libdir:=/usr/lib/@DEB_HOST_MULTIARCH@
276
+ deb : install
277
+ $(CP ) -T $(PKG_DIR ) /deb $(DESTDIR ) /debian
278
+ cd $(DESTDIR ) && debuild -eDISTRIB -eSECTION --dpkg-buildpackage-hook=' debian/prepare %v' -a $(ARCH ) -us -uc -B
279
+ cd $(DESTDIR ) && debuild clean
280
+
281
+ rpm : DESTDIR:=$(DIST_DIR ) /$(LIB_NAME ) _$(VERSION ) _$(ARCH )
282
+ rpm : all
283
+ $(CP ) -T $(PKG_DIR ) /rpm $(DESTDIR )
284
+ $(LN ) -nsf $(CURDIR ) $(DESTDIR ) /BUILD
285
+ $(MKDIR ) -p $(DESTDIR ) /RPMS && $(LN ) -nsf $(DIST_DIR ) $(DESTDIR ) /RPMS/$(ARCH )
286
+ cd $(DESTDIR ) && rpmbuild --clean --target=$(ARCH ) -bb -D" _topdir $( DESTDIR) " -D" _version $( VERSION) " -D" _tag $( TAG) " -D" _major $( MAJOR) " SPECS/*
287
+ -cd $(DESTDIR ) && rpmlint RPMS/*
0 commit comments