SHELL = /bin/sh PREFIX=/usr/local INSTDIR=$(DESTDIR)/$(PREFIX)/bin MANDIR=$(DESTDIR)/$(PREFIX)/man EXECS = sg_sense_test sg_queue_tst bsg_queue_tst sg_chk_asc sg_tst_nvme \ sg_tst_ioctl sg_tst_bidi tst_sg_lib sgs_dd sg_tst_excl \ sg_tst_excl2 sg_tst_excl3 sg_tst_context sg_tst_async sgh_dd \ sg_mrq_dd sg_iovec_tst sg_take_snap sg_tst_json_builder EXTRAS = BSG_EXTRAS = MAN_PGS = MAN_PREF = man8 LARGE_FILE_FLAGS = -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 # For C++/clang testing ## CC = gcc ## CXX = g++ ## CC = clang ## CXX = clang++ LD = $(CXX) CXXLD = $(CXX) CPPFLAGS = -iquote ../include -iquote .. -D_REENTRANT $(LARGE_FILE_FLAGS) -DHAVE_CONFIG_H -DHAVE_NVME CXXFLAGS = -std=c++11 -pthread -ggdb -O2 -W -Wall -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) ## CXXFLAGS = -std=c++14 -pthread -ggdb -O2 -W -Wall -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) ## CXXFLAGS = -std=c++17 -pthread -ggdb -O2 -W -Wall -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) ## CXXFLAGS = -std=c++20 -pthread -ggdb -O2 -W -Wall -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) ## CXXFLAGS = -std=c++2a -pthread -ggdb -O2 -W -Wall -iquote ../include -D_REENTRANT $(LARGE_FILE_FLAGS) # CPPFLAGS = -iquote ../include -iquote .. -D_REENTRANT $(LARGE_FILE_FLAGS) -DHAVE_CONFIG_H -DHAVE_NVME -DDEBUG CFLAGS = -g -O2 -W -Wall # CFLAGS = -ggdb -O2 -W -Wall -DDEBUG # CFLAGS = -g -O2 -Wall -DSG_KERNEL_INCLUDES # CFLAGS = -g -O2 -Wall -pedantic # CFLAGS = -Wall -W -pedantic -std=c11 --analyze # CFLAGS = -Wall -W -pedantic -std=c++14 -fPIC # CFLAGS = -Wall -W -pedantic -std=c++20 LDFLAGS = LIBFILESOLD = ../lib/sg_lib.o ../lib/sg_lib_data.o ../lib/sg_io_linux.o \ ../lib/sg_json_builder.o ../lib/sg_pr2serr.o LIBFILESNEW = ../lib/sg_pt_linux_nvme.o ../lib/sg_lib.o ../lib/sg_lib_data.o \ ../lib/sg_pt_linux.o ../lib/sg_io_linux.o \ ../lib/sg_pt_common.o ../lib/sg_cmds_basic.o \ ../lib/sg_cmds_basic2.o ../lib/sg_lib_names.o \ ../lib/sg_json_builder.o ../lib/sg_pr2serr.o all: $(EXECS) extras: $(EXTRAS) bsg: $(BSG_EXTRAS) depend dep: for i in *.c; do $(CC) $(CPPFLAGS) $(INCLUDES) $(CFLAGS) -M $$i; \ done > .depend clean: /bin/rm -f *.o $(EXECS) $(EXTRAS) $(BSG_EXTRAS) json_writer core .depend sg_sense_test: sg_sense_test.o $(LIBFILESOLD) $(LD) -o $@ $(LDFLAGS) $^ sg_queue_tst: sg_queue_tst.o $(LIBFILESOLD) $(LD) -o $@ $(LDFLAGS) $^ bsg_queue_tst: bsg_queue_tst.o $(LIBFILESOLD) $(LD) -o $@ $(LDFLAGS) $^ sg_tst_ioctl: sg_tst_ioctl.o $(LIBFILESOLD) $(LD) -o $@ $(LDFLAGS) $^ # building sg_chk_asc depends on a prior successful make in ../lib sg_chk_asc: sg_chk_asc.o ../lib/sg_lib.o ../lib/sg_lib_data.o $(LD) -o $@ $(LDFLAGS) $^ sg_tst_nvme: sg_tst_nvme.o $(LIBFILESNEW) $(LD) -o $@ $(LDFLAGS) $^ tst_sg_lib: tst_sg_lib.o $(LIBFILESNEW) $(LD) -o $@ $(LDFLAGS) $^ sgs_dd: sgs_dd.o $(LIBFILESOLD) $(LD) -o $@ $(LDFLAGS) $^ sg_tst_bidi: sg_tst_bidi.o $(LIBFILESNEW) $(LD) -o $@ $(LDFLAGS) $^ sg_tst_excl: sg_tst_excl.o $(LIBFILESNEW) $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ sg_tst_excl2: sg_tst_excl2.o $(LIBFILESNEW) $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ sg_tst_excl3: sg_tst_excl3.o $(LIBFILESNEW) $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ sg_tst_context: sg_tst_context.o $(LIBFILESNEW) $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ sg_tst_async: sg_tst_async.o $(LIBFILESNEW) $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ # Next three used to require '-latomic', may not anymore sgh_dd: sgh_dd.o $(LIBFILESNEW) $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ sg_mrq_dd: sg_mrq_dd.o sg_scat_gath.o $(LIBFILESNEW) $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ sg_iovec_tst: sg_iovec_tst.o sg_scat_gath.o $(LIBFILESNEW) $(CXXLD) -o $@ $(LDFLAGS) -pthread $^ sg_take_snap: sg_take_snap.o $(LIBFILESNEW) $(LD) -o $@ $(LDFLAGS) $^ sg_tst_json_builder: sg_tst_json_builder.o $(LIBFILESNEW) $(LD) -o $@ $(LDFLAGS) $^ install: $(EXECS) install -d $(INSTDIR) for name in $^; \ do install -s -o root -g root -m 755 $$name $(INSTDIR); \ done install -d $(MANDIR)/$(MAN_PREF) for mp in $(MAN_PGS); \ do install -o root -g root -m 644 $$mp $(MANDIR)/$(MAN_PREF); \ gzip -9f $(MANDIR)/$(MAN_PREF)/$$mp; \ done uninstall: dists="$(EXECS)"; \ for name in $$dists; do \ rm -f $(INSTDIR)/$$name; \ done for mp in $(MAN_PGS); do \ rm -f $(MANDIR)/$(MAN_PREF)/$$mp.gz; \ done # Linux uses GNU make and FreeBSD uses Berkely make. The following lines # only work in Linux. Possible solutions in FreeBSD: # a) use 'gmake'; b) comment out the next 3 lines, starting with 'ifeq' # c) build with 'make -f Makefile.freebsd' # In Linux one can install bmake (but that won't help here). ifeq (.depend,$(wildcard .depend)) include .depend endif