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-dev 7SOMAJOR = 2 8SOMINOR = 1 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 ($(findstring powerpc,$(ARCH)),powerpc) 77override ARCH := powerpc 78endif 79ifeq ($(findstring ppc,$(ARCH)),ppc) 80override ARCH := powerpc 81endif 82ifeq ($(ARCH),i386) 83override ARCH := i387 84endif 85ifeq ($(ARCH),i486) 86override ARCH := i387 87endif 88ifeq ($(ARCH),i586) 89override ARCH := i387 90endif 91ifeq ($(ARCH),i686) 92override ARCH := i387 93endif 94 95ifeq ($(ARCH),x86_64) 96override ARCH := amd64 97endif 98 99# The optimization flag may be overriden with the environment variable CFLAGS. 100CFLAGS ?= -O2 101 102ifneq (,$(findstring MINGW,$(OS))) 103override OS=WINNT 104endif 105 106#keep these if statements separate 107 108ifeq ($(OS), WINNT) 109 SHLIB_EXT = dll 110 SONAME_FLAG = -soname 111 override CFLAGS_add += -nodefaultlibs 112 shlibdir = $(bindir) 113else 114 ifeq ($(OS), Darwin) 115 SHLIB_EXT = dylib 116 SONAME_FLAG = -install_name 117 else 118 SHLIB_EXT = so 119 SONAME_FLAG = -soname 120 endif 121 override CFLAGS_add += -fPIC 122 shlibdir = $(libdir) 123endif 124 125# The target specific FLAGS_add 126ifeq ($(ARCH_ORIGIN),file) 127CFLAGS_add_TARGET_$(ARCH) := 128SFLAGS_add_TARGET_$(ARCH) := 129LDFLAGS_add_TARGET_$(ARCH) := 130else 131ifeq ($(ARCH),i387) 132CFLAGS_add_TARGET_$(ARCH) := -m32 -march=$(REAL_ARCH) 133SFLAGS_add_TARGET_$(ARCH) := -m32 -march=$(REAL_ARCH) 134LDFLAGS_add_TARGET_$(ARCH) := -m32 -march=$(REAL_ARCH) 135endif 136CFLAGS_add_TARGET_x86_64 := -m64 137SFLAGS_add_TARGET_x86_64 := -m64 138LDFLAGS_add_TARGET_x86_64 := -m64 139# Arm 140ifeq ($(ARCH),arm) 141ifneq ($(REAL_ARCH),arm) 142CFLAGS_add_TARGET_$(ARCH) := -march=$(REAL_ARCH) 143SFLAGS_add_TARGET_$(ARCH) := -march=$(REAL_ARCH) 144LDFLAGS_add_TARGET_$(ARCH) := -march=$(REAL_ARCH) 145else 146$(error No known generic arm cflags. Please specify arch type) 147endif 148endif 149endif 150 151# Actually finish setting the FLAGS_add 152CFLAGS_add += $(CFLAGS_add_TARGET_$(ARCH)) 153LDFLAGS_add += $(LDFLAGS_add_TARGET_$(ARCH)) 154SFLAGS_add += $(SFLAGS_add_TARGET_$(ARCH)) 155