1# Linux/OS X Makefile for PLINK 2.00. 2# 3# Compilation options (leave blank after "=" to disable, put "= 1" to enable): 4# Do not use AVX2 instructions: NO_AVX2 5# Do not use SSE4.2 instructions: NO_SSE42 6# Print clear error message if SSE42/AVX2 needed but missing: CPU_CHECK 7# Do not link to LAPACK: NO_LAPACK 8# Use cblas_f77 instead of cblas: FORCE_CBLAS_F77 9# Use only -O2 optimization for zstd (may be necessary for gcc 4.x): ZSTD_O2 10# Statically link zlib: STATIC_ZLIB 11# Statically link zstd: STATIC_ZSTD 12# Link to MKL with 64-bit indexes (dynamically): DYNAMIC_MKL 13# (this also requires MKLROOT and MKL_IOMP5_DIR to be defined, and 14# LD_LIBRARY_PATH to include the appropriate directories) 15# 32-bit binary (also sets STATIC_ZLIB and ZSTD_O2): 16# FORCE_32BIT (warning: you may need to add a zconf.h symlink to make that 17# work) 18# Debug symbols: set DEBUG to -g 19NO_AVX2 = 1 20NO_SSE42 = 21CPU_CHECK = 1 22NO_LAPACK = 23PREFER_CBLAS_F77 = 24ZSTD_O2 = 1 25STATIC_ZLIB = 26STATIC_ZSTD = 1 27DYNAMIC_MKL = 28MKLROOT = /home/ubuntu/intel/mkl 29MKL_IOMP5_DIR = /home/ubuntu/intel/compilers_and_libraries_2017.2.174/linux/compiler/lib/intel64 30FORCE_32BIT = 31DEBUG = 32 33BASEFLAGS=-DZSTD_MULTITHREAD 34# ***** end configuration ***** 35 36BASEFLAGS += ${DEBUG} 37 38include ../Makefile.src 39 40LINKFLAGS=-lm -lpthread ${DEBUG} 41ZLIB= 42ARCH32= 43CPUCHECK_FLAGS = ${DEBUG} 44 45ifdef FORCE_32BIT 46 # this is targeted at Scientific Linux 6. 47 STATIC_ZLIB = 1 48 ZSTD_O2 = 1 49 ARCH32 = -m32 -march=i686 50 CXXFLAGS = -std=c++0x 51else 52 ifdef NO_AVX2 53 ifndef NO_SSE42 54 BASEFLAGS += -msse4.2 55 ifdef CPU_CHECK 56 BASEFLAGS += -DCPU_CHECK_SSE42 57 CPUCHECK_FLAGS = -O2 -DCPU_CHECK_SSE42 ${CXXWARN2} 58 endif 59 endif 60 else 61 BASEFLAGS += -mavx2 -mbmi -mbmi2 -mlzcnt 62 ifdef CPU_CHECK 63 BASEFLAGS += -DCPU_CHECK_AVX2 64 CPUCHECK_FLAGS = -O2 -DCPU_CHECK_AVX2 ${CXXWARN2} 65 endif 66 endif 67 CXXFLAGS = -std=c++11 68endif 69BASEFLAGS += ${ARCH32} 70 71CFLAGS=-O2 -std=gnu99 72# zstd appears to be seriously targeted at -O3; see 26 Jul 2016 entry at 73# cbloom.com/rants.html 74ifdef ZSTD_O2 75 ZCFLAGS=-O2 -std=gnu99 76else 77 ZCFLAGS=-O3 -std=gnu99 78endif 79# this actually needs to be named "CXXFLAGS" 80CXXFLAGS += -O2 81 82ifdef FORCE_CBLAS_F77 83 BASEFLAGS += -DFORCE_CBLAS_F77 84 BLASFLAGS=-llapack -lf77blas -latlas 85else 86 BLASFLAGS=-llapack -lblas -lcblas -latlas 87endif 88 89ifdef STATIC_ZLIB 90 BASEFLAGS += -DSTATIC_ZLIB 91 LINKFLAGS += -L. ../../zlib-1.2.11/libz.a 92else 93 LINKFLAGS += -lz 94endif 95 96SKIP_STATIC_ZSTD = 97ifdef STATIC_ZSTD 98 BASEFLAGS += -DSTATIC_ZSTD 99else 100 ZCSRC2 = 101 SKIP_STATIC_ZSTD = echo 102 OBJ = $(CSRC:.c=.o) $(CCSRC:.cc=.o) 103 OBJ2 = $(notdir $(OBJ)) 104 LINKFLAGS += -lzstd 105endif 106 107UNAME := $(shell uname) 108ifeq ($(UNAME), Darwin) 109 ifdef FORCE_32BIT 110 $(error 32-bit OS X builds are not supported) 111 endif 112 ifdef DYNAMIC_MKL 113 $(error MKL is not currently supported on OS X) 114 endif 115 BLASFLAGS=-framework Accelerate 116 CXXFLAGS += -stdlib=libc++ 117else 118 ifdef DYNAMIC_MKL 119 ifdef NO_LAPACK 120 $(error DYNAMIC_MKL and NO_LAPACK conflict) 121 endif 122 ifdef FORCE_32BIT 123 $(error DYNAMIC_MKL + FORCE_32BIT not supported) 124 endif 125 BASEFLAGS += -DDYNAMIC_MKL -DLAPACK_ILP64 -I${MKLROOT}/include 126 BLASFLAGS = -L${MKLROOT}/lib/intel64 -L${MKL_IOMP5_DIR} -Wl,--no-as-needed -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 127 LINKFLAGS += -ldl 128 endif 129endif 130 131ifdef NO_LAPACK 132 BASEFLAGS += -DNOLAPACK 133 BLASFLAGS= 134endif 135 136CFLAGS += ${BASEFLAGS} ${CWARN2} ${CINCLUDE2} 137ZCFLAGS += ${BASEFLAGS} ${CWARN2} ${ZSTD_INCLUDE2} 138CXXFLAGS += ${BASEFLAGS} ${CXXWARN2} 139 140ifdef FORCE_32BIT 141 CXXFLAGS += -Wno-sign-compare 142endif 143 144all: plink2 pgen_compress 145 146plink2: $(CSRC2) $(ZCSRC2) $(CCSRC2) ../plink2_cpu.cc 147 gcc $(CFLAGS) $(CSRC2) -c 148 $(SKIP_STATIC_ZSTD) gcc $(ZCFLAGS) $(ZCSRC2) -c 149 g++ $(CXXFLAGS) $(CCSRC2) -c 150 g++ $(CPUCHECK_FLAGS) ../plink2_cpu.cc -c 151 g++ $(OBJ2) plink2_cpu.o $(ARCH32) -o plink2 $(BLASFLAGS) $(LINKFLAGS) 152 153pgen_compress: $(PGCSRC2) 154 g++ $(CXXFLAGS) $(PGCSRC2) -o pgen_compress 155 156.PHONY: clean 157clean: 158 rm -f *.o 159 rm -f plink2 160 rm -f pgen_compress 161