1e8bf3685SViral B. Shah# -*- mode: makefile-gmake -*- 2e8bf3685SViral B. Shah 3c2145306SElliot Saba# Default build rule for any Makefile in this project: all 4c2145306SElliot Sabadefault: all 5c2145306SElliot Saba 6bcefcc3dSJameson NashOS := $(shell uname) 71f77ae02SMilan Bouchet-Valat# Do not forget to bump SOMINOR when changing VERSION, 8c41813f6SMilan Bouchet-Valat# and SOMAJOR when breaking ABI in a backward-incompatible way 94971b569SViral B. ShahVERSION = 0.6.0 10763da446SViral B. ShahSOMAJOR = 2 11a40570beSGraham InggsSOMINOR = 5 1271d942f7SViral B. ShahDESTDIR = 13bb40f6c7SMilan Bouchet-Valatprefix = /usr/local 14716317b7STony Kelmanbindir = $(prefix)/bin 15bb40f6c7SMilan Bouchet-Valatlibdir = $(prefix)/lib 16b4625783SMilan Bouchet-Valatincludedir = $(prefix)/include 1756811b08SViral B. Shah 1837559aa1SIblis Linifeq ($(OS), FreeBSD) 1937559aa1SIblis Linpkgconfigdir = $(prefix)/libdata/pkgconfig 2037559aa1SIblis Linelse 2137559aa1SIblis Linpkgconfigdir = $(libdir)/pkgconfig 2237559aa1SIblis Linendif 2337559aa1SIblis Lin 2456811b08SViral B. ShahUSEGCC = 1 2556811b08SViral B. ShahUSECLANG = 0 2656811b08SViral B. Shah 27bf188aebSAlex Arslanifneq (,$(findstring $(OS),Darwin FreeBSD OpenBSD)) 2834d44ffaSEd SchoutenUSEGCC = 0 2934d44ffaSEd SchoutenUSECLANG = 1 3034d44ffaSEd Schoutenendif 3134d44ffaSEd Schouten 328d91ecb3SwarpcoilAR = $(TOOLPREFIX)ar 3375ba4267SMike Nolta 3456811b08SViral B. Shahifeq ($(USECLANG),1) 3556811b08SViral B. ShahUSEGCC = 0 3656811b08SViral B. ShahCC = clang 37ddf649beSSimon ByrneCFLAGS_add += -fno-builtin -fno-strict-aliasing 3856811b08SViral B. Shahendif 3956811b08SViral B. Shah 4056811b08SViral B. Shahifeq ($(USEGCC),1) 418d91ecb3SwarpcoilCC = $(TOOLPREFIX)gcc 424a1b310fSViral B. ShahCFLAGS_add += -fno-gnu89-inline -fno-builtin 4356811b08SViral B. Shahendif 44ccd319c0SViral B. Shah 45f70240deSAlexander LightARCH ?= $(shell $(CC) -dumpmachine | sed "s/\([^-]*\).*$$/\1/") 46f70240deSAlexander Light 47f948e55cSJameson Nashifeq ($(ARCH),mingw32) 48f948e55cSJameson Nash$(error "the mingw32 compiler you are using fails the openblas testsuite. please see the Julia README.windows.md document for a replacement") 49f948e55cSJameson Nashendif 50bcefcc3dSJameson Nash 51ccd319c0SViral B. Shah# OS-specific stuff 52f70240deSAlexander Lightifeq ($(findstring arm,$(ARCH)),arm) 53f70240deSAlexander Lightoverride ARCH := arm 54c2145306SElliot SabaMARCH ?= armv7-a 55c2145306SElliot SabaCFLAGS_add += -mhard-float 56019990ecSGraham Inggsendif 5710bae660SSimon Byrneifeq ($(findstring powerpc,$(ARCH)),powerpc) 5810bae660SSimon Byrneoverride ARCH := powerpc 5910bae660SSimon Byrneendif 60b87b1631SSimon Byrneifeq ($(findstring ppc,$(ARCH)),ppc) 61b87b1631SSimon Byrneoverride ARCH := powerpc 62b87b1631SSimon Byrneendif 63*2a1e5685SDan Horákifeq ($(findstring s390,$(ARCH)),s390) 64*2a1e5685SDan Horákoverride ARCH := s390 65*2a1e5685SDan Horákendif 66c2145306SElliot Sabaifneq ($(filter $(ARCH),i386 i486 i586 i686 i387 i487 i587 i687),) 67bcefcc3dSJameson Nashoverride ARCH := i387 68c2145306SElliot SabaMARCH ?= i686 69307d7361SKeno Fischerendif 70307d7361SKeno Fischerifeq ($(ARCH),x86_64) 71bcefcc3dSJameson Nashoverride ARCH := amd64 72307d7361SKeno Fischerendif 734f5112eaSRadovan Birdicifeq ($(findstring mips,$(ARCH)),mips) 744f5112eaSRadovan Birdicoverride ARCH := mips 754f5112eaSRadovan Birdicendif 760df00dd0SJameson Nash 7775ec57d9SElliot Saba# If CFLAGS does not contain a -O optimization flag, default to -O3 7875ec57d9SElliot Sabaifeq ($(findstring -O,$(CFLAGS)),) 7975ec57d9SElliot SabaCFLAGS_add += -O3 8075ec57d9SElliot Sabaendif 81ac6fb73cSSimon Byrne 8213cc5795SJameson Nashifneq (,$(findstring MINGW,$(OS))) 8313cc5795SJameson Nashoverride OS=WINNT 843fda504fSJameson Nashendif 85716317b7STony Kelman 86716317b7STony Kelman#keep these if statements separate 873fda504fSJameson Nashifeq ($(OS), WINNT) 88251814ebSMilan Bouchet-ValatSHLIB_EXT = dll 89251814ebSMilan Bouchet-ValatSONAME_FLAG = -soname 9057ed3553SPeter ColbergCFLAGS_add += -nodefaultlibs 911cc9ad07STony Kelmanshlibdir = $(bindir) 92716317b7STony Kelmanelse 93ccd319c0SViral B. Shahifeq ($(OS), Darwin) 94ccd319c0SViral B. ShahSHLIB_EXT = dylib 95251814ebSMilan Bouchet-ValatSONAME_FLAG = -install_name 96ebe1db3cSGraham Inggselse 97ebe1db3cSGraham InggsSHLIB_EXT = so 98ebe1db3cSGraham InggsSONAME_FLAG = -soname 99ebe1db3cSGraham Inggsendif 10057ed3553SPeter ColbergCFLAGS_add += -fPIC 101ebe1db3cSGraham Inggsshlibdir = $(libdir) 1020df00dd0SJameson Nashendif 103f70240deSAlexander Light 104c2145306SElliot Saba# Add `-march` to our CFLAGS if it's defined 105c2145306SElliot Sabaifneq ($(MARCH),) 106c2145306SElliot SabaCFLAGS_arch += -march=$(MARCH) 107f70240deSAlexander Lightendif 108f70240deSAlexander Light 109c2145306SElliot Sabaifeq ($(ARCH),i387) 110c2145306SElliot SabaCFLAGS_arch += -m32 111c2145306SElliot SabaSFLAGS_arch += -m32 112c2145306SElliot SabaLDFLAGS_arch += -m32 113c2145306SElliot Sabaendif 114c2145306SElliot Saba 115c2145306SElliot Sabaifeq ($(ARCH),amd64) 116c2145306SElliot SabaCFLAGS_arch += -m64 117c2145306SElliot SabaSFLAGS_arch += -m64 118c2145306SElliot SabaLDFLAGS_arch += -m64 119c2145306SElliot Sabaendif 120c2145306SElliot Saba 121c2145306SElliot Saba# Add our "arch"-related FLAGS in. We separate arch-related flags out so that 122c2145306SElliot Saba# we can conveniently get at them for targets that don't want the rest of 123c2145306SElliot Saba# *FLAGS_add, such as the testing Makefile targets 124c2145306SElliot SabaCFLAGS_add += $(CFLAGS_arch) 125c2145306SElliot SabaSFLAGS_add += $(SFLAGS_arch) 126c2145306SElliot SabaLDFLAGS_add += $(LDFLAGS_arch) 127c2145306SElliot Saba 128c2145306SElliot SabaCFLAGS_add += -std=c99 -Wall -I$(OPENLIBM_HOME) -I$(OPENLIBM_HOME)/include -I$(OPENLIBM_HOME)/$(ARCH) -I$(OPENLIBM_HOME)/src -DASSEMBLER -D__BSD_VISIBLE -Wno-implicit-function-declaration 129238a9095SYichao Yuifneq ($(filter $(ARCH),i387 amd64 powerpc),) 130c2145306SElliot SabaCFLAGS_add += -I$(OPENLIBM_HOME)/ld80 131238a9095SYichao Yuelse 132238a9095SYichao Yuifneq ($(filter $(ARCH),aarch64),) 133238a9095SYichao YuCFLAGS_add += -I$(OPENLIBM_HOME)/ld128 134238a9095SYichao Yuendif 135c2145306SElliot Sabaendif 136c2145306SElliot Saba 137c2145306SElliot Saba 138c2145306SElliot Saba%.c.o: %.c 139c2145306SElliot Saba $(CC) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_add) -c $< -o $@ 140c2145306SElliot Saba 141c2145306SElliot Saba%.S.o: %.S 142c2145306SElliot Saba $(CC) $(CPPFLAGS) $(SFLAGS) $(SFLAGS_add) $(filter -m% -B% -I% -D%,$(CFLAGS_add)) -c $< -o $@ 143c2145306SElliot Saba 144c2145306SElliot Saba 145c2145306SElliot Saba# Makefile debugging trick: 146c2145306SElliot Saba# call print-VARIABLE to see the runtime value of any variable 147c2145306SElliot Sabaprint-%: 148c2145306SElliot Saba @echo '$*=$($*)' 149