1*44704f69SBart Van AsscheSHELL = /bin/sh 2*44704f69SBart Van Assche 3*44704f69SBart Van AsschePREFIX=/usr/local 4*44704f69SBart Van AsscheINSTDIR=$(DESTDIR)/$(PREFIX)/bin 5*44704f69SBart Van AsscheMANDIR=$(DESTDIR)/$(PREFIX)/man 6*44704f69SBart Van Assche 7*44704f69SBart Van AsscheEXECS = sg_sense_test sg_queue_tst bsg_queue_tst sg_chk_asc sg_tst_nvme \ 8*44704f69SBart Van Assche sg_tst_ioctl sg_tst_bidi tst_sg_lib sgs_dd sg_tst_excl \ 9*44704f69SBart Van Assche sg_tst_excl2 sg_tst_excl3 sg_tst_context sg_tst_async sgh_dd \ 10*44704f69SBart Van Assche sg_mrq_dd sg_iovec_tst sg_take_snap sg_tst_json_builder 11*44704f69SBart Van Assche 12*44704f69SBart Van AsscheEXTRAS = 13*44704f69SBart Van Assche 14*44704f69SBart Van AsscheBSG_EXTRAS = 15*44704f69SBart Van Assche 16*44704f69SBart Van Assche 17*44704f69SBart Van AsscheMAN_PGS = 18*44704f69SBart Van AsscheMAN_PREF = man8 19*44704f69SBart Van Assche 20*44704f69SBart Van AsscheLARGE_FILE_FLAGS = -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 21*44704f69SBart Van Assche 22*44704f69SBart Van Assche# For C++/clang testing 23*44704f69SBart Van Assche## CC = gcc 24*44704f69SBart Van Assche## CXX = g++ 25*44704f69SBart Van Assche## CC = clang 26*44704f69SBart Van Assche## CXX = clang++ 27*44704f69SBart Van Assche 28*44704f69SBart Van AsscheLD = $(CXX) 29*44704f69SBart Van AsscheCXXLD = $(CXX) 30*44704f69SBart Van Assche 31*44704f69SBart Van AsscheCPPFLAGS = -iquote ../include -iquote .. -D_REENTRANT $(LARGE_FILE_FLAGS) -DHAVE_CONFIG_H -DHAVE_NVME 32*44704f69SBart Van AsscheCXXFLAGS = -std=c++11 -pthread -ggdb -O2 -W -Wall -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) 33*44704f69SBart Van Assche## CXXFLAGS = -std=c++14 -pthread -ggdb -O2 -W -Wall -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) 34*44704f69SBart Van Assche## CXXFLAGS = -std=c++17 -pthread -ggdb -O2 -W -Wall -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) 35*44704f69SBart Van Assche## CXXFLAGS = -std=c++20 -pthread -ggdb -O2 -W -Wall -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) 36*44704f69SBart Van Assche## CXXFLAGS = -std=c++2a -pthread -ggdb -O2 -W -Wall -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) 37*44704f69SBart Van Assche# CPPFLAGS = -iquote ../include -iquote .. -D_REENTRANT $(LARGE_FILE_FLAGS) -DHAVE_CONFIG_H -DHAVE_NVME -DDEBUG 38*44704f69SBart Van AsscheCFLAGS = -g -O2 -W -Wall 39*44704f69SBart Van Assche# CFLAGS = -ggdb -O2 -W -Wall -DDEBUG 40*44704f69SBart Van Assche# CFLAGS = -g -O2 -Wall -DSG_KERNEL_INCLUDES 41*44704f69SBart Van Assche# CFLAGS = -g -O2 -Wall -pedantic 42*44704f69SBart Van Assche# CFLAGS = -Wall -W -pedantic -std=c11 --analyze 43*44704f69SBart Van Assche# CFLAGS = -Wall -W -pedantic -std=c++14 -fPIC 44*44704f69SBart Van Assche# CFLAGS = -Wall -W -pedantic -std=c++20 45*44704f69SBart Van Assche 46*44704f69SBart Van AsscheLDFLAGS = 47*44704f69SBart Van Assche 48*44704f69SBart Van AsscheLIBFILESOLD = ../lib/sg_lib.o ../lib/sg_lib_data.o ../lib/sg_io_linux.o \ 49*44704f69SBart Van Assche ../lib/sg_json_builder.o ../lib/sg_pr2serr.o 50*44704f69SBart Van Assche 51*44704f69SBart Van AsscheLIBFILESNEW = ../lib/sg_pt_linux_nvme.o ../lib/sg_lib.o ../lib/sg_lib_data.o \ 52*44704f69SBart Van Assche ../lib/sg_pt_linux.o ../lib/sg_io_linux.o \ 53*44704f69SBart Van Assche ../lib/sg_pt_common.o ../lib/sg_cmds_basic.o \ 54*44704f69SBart Van Assche ../lib/sg_cmds_basic2.o ../lib/sg_lib_names.o \ 55*44704f69SBart Van Assche ../lib/sg_json_builder.o ../lib/sg_pr2serr.o 56*44704f69SBart Van Assche 57*44704f69SBart Van Asscheall: $(EXECS) 58*44704f69SBart Van Assche 59*44704f69SBart Van Asscheextras: $(EXTRAS) 60*44704f69SBart Van Assche 61*44704f69SBart Van Asschebsg: $(BSG_EXTRAS) 62*44704f69SBart Van Assche 63*44704f69SBart Van Assche 64*44704f69SBart Van Asschedepend dep: 65*44704f69SBart Van Assche for i in *.c; do $(CC) $(CPPFLAGS) $(INCLUDES) $(CFLAGS) -M $$i; \ 66*44704f69SBart Van Assche done > .depend 67*44704f69SBart Van Assche 68*44704f69SBart Van Asscheclean: 69*44704f69SBart Van Assche /bin/rm -f *.o $(EXECS) $(EXTRAS) $(BSG_EXTRAS) json_writer core .depend 70*44704f69SBart Van Assche 71*44704f69SBart Van Asschesg_sense_test: sg_sense_test.o $(LIBFILESOLD) 72*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 73*44704f69SBart Van Assche 74*44704f69SBart Van Asschesg_queue_tst: sg_queue_tst.o $(LIBFILESOLD) 75*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 76*44704f69SBart Van Assche 77*44704f69SBart Van Asschebsg_queue_tst: bsg_queue_tst.o $(LIBFILESOLD) 78*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 79*44704f69SBart Van Assche 80*44704f69SBart Van Asschesg_tst_ioctl: sg_tst_ioctl.o $(LIBFILESOLD) 81*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 82*44704f69SBart Van Assche 83*44704f69SBart Van Assche# building sg_chk_asc depends on a prior successful make in ../lib 84*44704f69SBart Van Asschesg_chk_asc: sg_chk_asc.o ../lib/sg_lib.o ../lib/sg_lib_data.o 85*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 86*44704f69SBart Van Assche 87*44704f69SBart Van Asschesg_tst_nvme: sg_tst_nvme.o $(LIBFILESNEW) 88*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 89*44704f69SBart Van Assche 90*44704f69SBart Van Asschetst_sg_lib: tst_sg_lib.o $(LIBFILESNEW) 91*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 92*44704f69SBart Van Assche 93*44704f69SBart Van Asschesgs_dd: sgs_dd.o $(LIBFILESOLD) 94*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 95*44704f69SBart Van Assche 96*44704f69SBart Van Asschesg_tst_bidi: sg_tst_bidi.o $(LIBFILESNEW) 97*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 98*44704f69SBart Van Assche 99*44704f69SBart Van Asschesg_tst_excl: sg_tst_excl.o $(LIBFILESNEW) 100*44704f69SBart Van Assche $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ 101*44704f69SBart Van Assche 102*44704f69SBart Van Asschesg_tst_excl2: sg_tst_excl2.o $(LIBFILESNEW) 103*44704f69SBart Van Assche $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ 104*44704f69SBart Van Assche 105*44704f69SBart Van Asschesg_tst_excl3: sg_tst_excl3.o $(LIBFILESNEW) 106*44704f69SBart Van Assche $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ 107*44704f69SBart Van Assche 108*44704f69SBart Van Asschesg_tst_context: sg_tst_context.o $(LIBFILESNEW) 109*44704f69SBart Van Assche $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ 110*44704f69SBart Van Assche 111*44704f69SBart Van Asschesg_tst_async: sg_tst_async.o $(LIBFILESNEW) 112*44704f69SBart Van Assche $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ 113*44704f69SBart Van Assche 114*44704f69SBart Van Assche# Next three used to require '-latomic', may not anymore 115*44704f69SBart Van Asschesgh_dd: sgh_dd.o $(LIBFILESNEW) 116*44704f69SBart Van Assche $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ 117*44704f69SBart Van Assche 118*44704f69SBart Van Asschesg_mrq_dd: sg_mrq_dd.o sg_scat_gath.o $(LIBFILESNEW) 119*44704f69SBart Van Assche $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ 120*44704f69SBart Van Assche 121*44704f69SBart Van Asschesg_iovec_tst: sg_iovec_tst.o sg_scat_gath.o $(LIBFILESNEW) 122*44704f69SBart Van Assche $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ 123*44704f69SBart Van Assche 124*44704f69SBart Van Asschesg_take_snap: sg_take_snap.o $(LIBFILESNEW) 125*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 126*44704f69SBart Van Assche 127*44704f69SBart Van Asschesg_tst_json_builder: sg_tst_json_builder.o $(LIBFILESNEW) 128*44704f69SBart Van Assche $(LD) -o $@ $(LDFLAGS) $^ 129*44704f69SBart Van Assche 130*44704f69SBart Van Assche 131*44704f69SBart Van Asscheinstall: $(EXECS) 132*44704f69SBart Van Assche install -d $(INSTDIR) 133*44704f69SBart Van Assche for name in $^; \ 134*44704f69SBart Van Assche do install -s -o root -g root -m 755 $$name $(INSTDIR); \ 135*44704f69SBart Van Assche done 136*44704f69SBart Van Assche install -d $(MANDIR)/$(MAN_PREF) 137*44704f69SBart Van Assche for mp in $(MAN_PGS); \ 138*44704f69SBart Van Assche do install -o root -g root -m 644 $$mp $(MANDIR)/$(MAN_PREF); \ 139*44704f69SBart Van Assche gzip -9f $(MANDIR)/$(MAN_PREF)/$$mp; \ 140*44704f69SBart Van Assche done 141*44704f69SBart Van Assche 142*44704f69SBart Van Asscheuninstall: 143*44704f69SBart Van Assche dists="$(EXECS)"; \ 144*44704f69SBart Van Assche for name in $$dists; do \ 145*44704f69SBart Van Assche rm -f $(INSTDIR)/$$name; \ 146*44704f69SBart Van Assche done 147*44704f69SBart Van Assche for mp in $(MAN_PGS); do \ 148*44704f69SBart Van Assche rm -f $(MANDIR)/$(MAN_PREF)/$$mp.gz; \ 149*44704f69SBart Van Assche done 150*44704f69SBart Van Assche 151*44704f69SBart Van Assche# Linux uses GNU make and FreeBSD uses Berkely make. The following lines 152*44704f69SBart Van Assche# only work in Linux. Possible solutions in FreeBSD: 153*44704f69SBart Van Assche# a) use 'gmake'; b) comment out the next 3 lines, starting with 'ifeq' 154*44704f69SBart Van Assche# c) build with 'make -f Makefile.freebsd' 155*44704f69SBart Van Assche# In Linux one can install bmake (but that won't help here). 156*44704f69SBart Van Asscheifeq (.depend,$(wildcard .depend)) 157*44704f69SBart Van Asscheinclude .depend 158*44704f69SBart Van Asscheendif 159