1# -*- mode: makefile-gmake -*- 2 3OS := $(shell uname) 4# Do not forget to bump SOMINOR when changing VERSION, 5# and SOMAJOR when breaking ABI in a backward-incompatible way 6VERSION = 0.5.4 7SOMAJOR = 2 8SOMINOR = 3 9DESTDIR = 10prefix = /usr/local 11bindir = $(prefix)/bin 12libdir = $(prefix)/lib 13includedir = $(prefix)/include 14 15ifeq ($(OS), FreeBSD) 16 pkgconfigdir = $(prefix)/libdata/pkgconfig 17else 18 pkgconfigdir = $(libdir)/pkgconfig 19endif 20 21USEGCC = 1 22USECLANG = 0 23 24ifeq ($(OS), Darwin) 25USEGCC = 0 26USECLANG = 1 27endif 28 29ifeq ($(OS), FreeBSD) 30USEGCC = 0 31USECLANG = 1 32endif 33 34AR = ar 35 36ifeq ($(USECLANG),1) 37USEGCC = 0 38CC = clang 39CFLAGS_add += -fno-builtin 40endif 41 42ifeq ($(USEGCC),1) 43CC = gcc 44CFLAGS_add += -fno-gnu89-inline -fno-builtin 45endif 46 47ARCH ?= $(shell $(CC) -dumpmachine | sed "s/\([^-]*\).*$$/\1/") 48ARCH_ORIGIN := $(origin ARCH) 49 50ifeq ($(ARCH),mingw32) 51$(error "the mingw32 compiler you are using fails the openblas testsuite. please see the Julia README.windows.md document for a replacement") 52endif 53 54CFLAGS_add += -std=c99 -Wall -I$(OPENLIBM_HOME) -I$(OPENLIBM_HOME)/include -I$(OPENLIBM_HOME)/ld80 -I$(OPENLIBM_HOME)/$(ARCH) -I$(OPENLIBM_HOME)/src -DASSEMBLER -D__BSD_VISIBLE -Wno-implicit-function-declaration 55 56default: all 57 58# *int / *intf need to be built with -O0 59src/%int.c.o: src/%int.c 60 $(CC) $(CPPFLAGS) -O0 $(CFLAGS_add) -c $< -o $@ 61 62src/%intf.c.o: src/%intf.c 63 $(CC) $(CPPFLAGS) -O0 $(CFLAGS_add) -c $< -o $@ 64 65%.c.o: %.c 66 $(CC) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_add) -c $< -o $@ 67 68%.S.o: %.S 69 $(CC) $(CPPFLAGS) $(SFLAGS) $(SFLAGS_add) $(filter -m% -B% -I% -D%,$(CFLAGS_add)) -c $< -o $@ 70 71# OS-specific stuff 72REAL_ARCH := $(ARCH) 73ifeq ($(findstring arm,$(ARCH)),arm) 74override ARCH := arm 75endif 76ifeq ($(ARCH),aarch64) 77override ARCH := arm 78endif 79ifeq ($(findstring powerpc,$(ARCH)),powerpc) 80override ARCH := powerpc 81endif 82ifeq ($(findstring ppc,$(ARCH)),ppc) 83override ARCH := powerpc 84endif 85ifeq ($(ARCH),i386) 86override ARCH := i387 87endif 88ifeq ($(ARCH),i486) 89override ARCH := i387 90endif 91ifeq ($(ARCH),i586) 92override ARCH := i387 93endif 94ifeq ($(ARCH),i686) 95override ARCH := i387 96endif 97 98ifeq ($(ARCH),x86_64) 99override ARCH := amd64 100endif 101 102# If CFLAGS does not contain a -O optimization flag, default to -O3 103ifeq ($(findstring -O,$(CFLAGS)),) 104CFLAGS_add += -O3 105endif 106 107ifneq (,$(findstring MINGW,$(OS))) 108override OS=WINNT 109endif 110 111#keep these if statements separate 112 113ifeq ($(OS), WINNT) 114 SHLIB_EXT = dll 115 SONAME_FLAG = -soname 116 CFLAGS_add += -nodefaultlibs 117 shlibdir = $(bindir) 118else 119 ifeq ($(OS), Darwin) 120 SHLIB_EXT = dylib 121 SONAME_FLAG = -install_name 122 else 123 SHLIB_EXT = so 124 SONAME_FLAG = -soname 125 endif 126 CFLAGS_add += -fPIC 127 shlibdir = $(libdir) 128endif 129 130# The target specific FLAGS_add 131ifeq ($(ARCH_ORIGIN),file) 132CFLAGS_add_TARGET_$(ARCH) := 133SFLAGS_add_TARGET_$(ARCH) := 134LDFLAGS_add_TARGET_$(ARCH) := 135else 136ifeq ($(ARCH),i387) 137CFLAGS_add_TARGET_$(ARCH) := -m32 -march=$(REAL_ARCH) 138SFLAGS_add_TARGET_$(ARCH) := -m32 -march=$(REAL_ARCH) 139LDFLAGS_add_TARGET_$(ARCH) := -m32 -march=$(REAL_ARCH) 140endif 141CFLAGS_add_TARGET_x86_64 := -m64 142SFLAGS_add_TARGET_x86_64 := -m64 143LDFLAGS_add_TARGET_x86_64 := -m64 144# Arm 145ifeq ($(ARCH),arm) 146ifneq ($(REAL_ARCH),arm) 147CFLAGS_add_TARGET_$(ARCH) := -march=$(REAL_ARCH) 148SFLAGS_add_TARGET_$(ARCH) := -march=$(REAL_ARCH) 149LDFLAGS_add_TARGET_$(ARCH) := -march=$(REAL_ARCH) 150else 151$(error No known generic arm cflags. Please specify arch type) 152endif 153endif 154endif 155 156# Actually finish setting the FLAGS_add 157CFLAGS_add += $(CFLAGS_add_TARGET_$(ARCH)) 158LDFLAGS_add += $(LDFLAGS_add_TARGET_$(ARCH)) 159SFLAGS_add += $(SFLAGS_add_TARGET_$(ARCH)) 160