openblas: update 0.2.15 --> 2.2.20 and build optimised lapack

Openblas has it's own optimised versions of netlib lapack that it
bundles into `-lopenblas` so won't conflict with those libs. Also
enable RecursiveLAPACK.

From `Makefile.rule`:
```
  Force number of make jobs. The default is the number of logical CPU of the host.
  This is particularly useful when using distcc.
  A negative value will disable adding a -j flag to make, allowing to use a parent
  make -j value. This is useful to call OpenBLAS make from an other project
  makefile
  MAKE_NB_JOBS = 2
```

fixes #1651
pull/1985/head
Tony Theodore 7 years ago
parent e48e157c9e
commit 8b6d75e57e

@ -0,0 +1,23 @@
This file is part of MXE. See LICENSE.md for licensing information.
Contains ad hoc patches for cross building.
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tony Theodore <tonyt@logyst.com>
Date: Mon, 20 Nov 2017 16:20:03 +1100
Subject: [PATCH 1/1] ARCH from openblas build conflicts with lapack
diff --git a/Makefile b/Makefile
index 1111111..2222222 100644
--- a/Makefile
+++ b/Makefile
@@ -241,7 +241,7 @@ ifndef NOFORTRAN
-@echo "LOADOPTS = $(FFLAGS) $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "CC = $(CC)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "override CFLAGS = $(LAPACK_CFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
- -@echo "ARCH = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc
+ -@echo "override ARCH = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "ARCHFLAGS = -ru" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "RANLIB = $(RANLIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "LAPACKLIB = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc

@ -0,0 +1,71 @@
/*
* This file is part of MXE.
* See index.html for further information.
*
* taken from: https://gist.github.com/xianyi/5780018
*/
#include "stdio.h"
#include "stdlib.h"
#include "sys/time.h"
#include "time.h"
extern void dgemm_(char*, char*, int*, int*,int*, double*, double*, int*, double*, int*, double*, double*, int*);
int main(int argc, char* argv[])
{
int i;
printf("test!\n");
if(argc<4){
printf("Input Error\n");
return 1;
}
int m = atoi(argv[1]);
int n = atoi(argv[2]);
int k = atoi(argv[3]);
int sizeofa = m * k;
int sizeofb = k * n;
int sizeofc = m * n;
char ta = 'N';
char tb = 'N';
double alpha = 1.2;
double beta = 0.001;
struct timeval start,finish;
double duration;
double* A = (double*)malloc(sizeof(double) * sizeofa);
double* B = (double*)malloc(sizeof(double) * sizeofb);
double* C = (double*)malloc(sizeof(double) * sizeofc);
srand((unsigned)time(NULL));
for (i=0; i<sizeofa; i++)
A[i] = i%3+1;//(rand()%100)/10.0;
for (i=0; i<sizeofb; i++)
B[i] = i%3+1;//(rand()%100)/10.0;
for (i=0; i<sizeofc; i++)
C[i] = i%3+1;//(rand()%100)/10.0;
//#if 0
printf("m=%d,n=%d,k=%d,alpha=%lf,beta=%lf,sizeofc=%d\n",m,n,k,alpha,beta,sizeofc);
gettimeofday(&start, NULL);
dgemm_(&ta, &tb, &m, &n, &k, &alpha, A, &m, B, &k, &beta, C, &m);
gettimeofday(&finish, NULL);
duration = ((double)(finish.tv_sec-start.tv_sec)*1000000 + (double)(finish.tv_usec-start.tv_usec)) / 1000000;
double gflops = 2.0 * m *n*k;
gflops = gflops/duration*1.0e-6;
FILE *fp;
fp = fopen("timeDGEMM.txt", "a");
fprintf(fp, "%dx%dx%d\t%lf s\t%lf MFLOPS\n", m, n, k, duration, gflops);
fclose(fp);
free(A);
free(B);
free(C);
return 0;
}

@ -4,20 +4,13 @@ PKG := openblas
$(PKG)_WEBSITE := http://www.openblas.net/
$(PKG)_DESCR := OpenBLAS
$(PKG)_IGNORE :=
$(PKG)_VERSION := 0.2.15
$(PKG)_CHECKSUM := 73c40ace5978282224e5e122a41c8388c5a19e65a6f2329c2b7c0b61bacc9044
$(PKG)_SUBDIR := OpenBLAS-$($(PKG)_VERSION)
$(PKG)_FILE := $($(PKG)_SUBDIR).tar.gz
$(PKG)_URL := https://github.com/xianyi/OpenBLAS/archive/v$($(PKG)_VERSION).tar.gz
$(PKG)_VERSION := 0.2.20
$(PKG)_CHECKSUM := 5ef38b15d9c652985774869efd548b8e3e972e1e99475c673b25537ed7bcf394
$(PKG)_GH_CONF := xianyi/OpenBLAS/tags, v
$(PKG)_DEPS := gcc pthreads
define $(PKG)_UPDATE
$(WGET) -q -O- 'https://github.com/xianyi/OpenBLAS/releases' | \
$(SED) -n 's,.*OpenBLAS/archive/v\([0-9][^"]*\)\.tar\.gz.*,\1,p' | \
grep -v 'rc' | \
$(SORT) -V | \
tail -1
endef
# openblas has it's own optimised versions of netlib lapack that
# it bundles into -lopenblas so won't conflict with those libs
$(PKG)_MAKE_OPTS = \
PREFIX='$(PREFIX)/$(TARGET)' \
@ -25,9 +18,9 @@ $(PKG)_MAKE_OPTS = \
FC='$(TARGET)-gfortran' \
CC='$(TARGET)-gcc' \
HOSTCC='$(BUILD_CC)' \
MAKE_NB_JOBS=-1 \
CROSS=1 \
NO_CBLAS=1 \
NO_LAPACK=1 \
BUILD_RELAPACK=1 \
USE_THREAD=1 \
USE_OPENMP=1 \
TARGET=CORE2 \
@ -38,9 +31,14 @@ $(PKG)_MAKE_OPTS = \
BINARY=$(BITS) \
$(if $(BUILD_STATIC),NO_SHARED=1) \
$(if $(BUILD_SHARED),NO_STATIC=1) \
EXTRALIB="`'$(TARGET)-pkg-config' --libs pthreads` -fopenmp"
EXTRALIB="`'$(TARGET)-pkg-config' --libs pthreads` -fopenmp -lgfortran -lquadmath"
define $(PKG)_BUILD
$(MAKE) -C '$(1)' -j '$(JOBS)' $($(PKG)_MAKE_OPTS)
$(MAKE) -C '$(1)' -j 1 install $($(PKG)_MAKE_OPTS)
$(MAKE) -C '$(SOURCE_DIR)' -j '$(JOBS)' $($(PKG)_MAKE_OPTS)
$(MAKE) -C '$(SOURCE_DIR)' -j 1 install $($(PKG)_MAKE_OPTS)
'$(TARGET)-gcc' \
-W -Wall -Werror \
'$(TEST_FILE)' -o '$(PREFIX)/$(TARGET)/bin/test-$(PKG).exe' \
`'$(TARGET)-pkg-config' --cflags --libs $(PKG)`
endef

Loading…
Cancel
Save