1697 lines
87 KiB
HTML
1697 lines
87 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en" class="no-js">
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
|
|
|
|
<link rel="canonical" href="https://openblas.net/docs/install/">
|
|
|
|
|
|
<link rel="prev" href="..">
|
|
|
|
|
|
<link rel="next" href="../user_manual/">
|
|
|
|
|
|
<link rel="icon" href="../logo.svg">
|
|
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.43">
|
|
|
|
|
|
|
|
<title>Install OpenBLAS - OpenBLAS</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../assets/stylesheets/main.0253249f.min.css">
|
|
|
|
|
|
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
|
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
|
|
|
|
|
|
|
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
|
|
|
|
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
|
|
|
|
<a href="#install-openblas" class="md-skip">
|
|
Skip to content
|
|
</a>
|
|
|
|
</div>
|
|
<div data-md-component="announce">
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<header class="md-header md-header--shadow" data-md-component="header">
|
|
<nav class="md-header__inner md-grid" aria-label="Header">
|
|
<a href=".." title="OpenBLAS" class="md-header__button md-logo" aria-label="OpenBLAS" data-md-component="logo">
|
|
|
|
<img src="../logo.svg" alt="logo">
|
|
|
|
</a>
|
|
<label class="md-header__button md-icon" for="__drawer">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
|
</label>
|
|
<div class="md-header__title" data-md-component="header-title">
|
|
<div class="md-header__ellipsis">
|
|
<div class="md-header__topic">
|
|
<span class="md-ellipsis">
|
|
OpenBLAS
|
|
</span>
|
|
</div>
|
|
<div class="md-header__topic" data-md-component="header-topic">
|
|
<span class="md-ellipsis">
|
|
|
|
Install OpenBLAS
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<form class="md-header__option" data-md-component="palette">
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
|
|
</label>
|
|
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_0" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
|
|
</label>
|
|
|
|
|
|
</form>
|
|
|
|
|
|
|
|
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
|
|
|
|
|
|
|
|
<label class="md-header__button md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
</label>
|
|
<div class="md-search" data-md-component="search" role="dialog">
|
|
<label class="md-search__overlay" for="__search"></label>
|
|
<div class="md-search__inner" role="search">
|
|
<form class="md-search__form" name="search">
|
|
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
|
<label class="md-search__icon md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
|
</label>
|
|
<nav class="md-search__options" aria-label="Search">
|
|
|
|
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
|
</button>
|
|
</nav>
|
|
|
|
</form>
|
|
<div class="md-search__output">
|
|
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
|
<div class="md-search-result" data-md-component="search-result">
|
|
<div class="md-search-result__meta">
|
|
Initializing search
|
|
</div>
|
|
<ol class="md-search-result__list" role="presentation"></ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="md-header__source">
|
|
<a href="https://github.com/OpenMathLib/OpenBLAS" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
GitHub
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
</header>
|
|
|
|
<div class="md-container" data-md-component="container">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
|
|
<label class="md-nav__title" for="__drawer">
|
|
<a href=".." title="OpenBLAS" class="md-nav__button md-logo" aria-label="OpenBLAS" data-md-component="logo">
|
|
|
|
<img src="../logo.svg" alt="logo">
|
|
|
|
</a>
|
|
OpenBLAS
|
|
</label>
|
|
|
|
<div class="md-nav__source">
|
|
<a href="https://github.com/OpenMathLib/OpenBLAS" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
GitHub
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href=".." class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Home
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active">
|
|
|
|
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Install OpenBLAS
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<a href="./" class="md-nav__link md-nav__link--active">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Install OpenBLAS
|
|
</span>
|
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#installing-with-a-package-manager" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Installing with a package manager
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Installing with a package manager">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#linux" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Linux
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#windows" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Windows
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#macos" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
macOS
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#freebsd" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
FreeBSD
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#building-from-source" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Building from source
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Building from source">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#linux-and-macos" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Linux and macOS
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#windows_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Windows
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Windows">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#visual-studio-native-windows-abi" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Visual Studio & native Windows ABI
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#mingw-gnu-abi" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
MinGW & GNU ABI
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#windows-on-arm" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Windows on Arm
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#generating-an-import-library" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Generating an import library
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#android" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Android
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Android">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#building-for-armv7" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Building for ARMV7
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#building-for-armv8" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Building for ARMV8
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#iphoneios" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
iPhone/iOS
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#mips" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
MIPS
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#freebsd_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
FreeBSD
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#cortex-m" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Cortex-M
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../user_manual/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
User manual
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../extensions/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Extensions
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../developers/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Developer manual
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../build_system/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Build system
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../distributing/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Redistributing OpenBLAS
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../ci/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
CI jobs
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../about/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
About
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../faq/" class="md-nav__link">
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
FAQ
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#installing-with-a-package-manager" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Installing with a package manager
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Installing with a package manager">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#linux" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Linux
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#windows" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Windows
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#macos" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
macOS
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#freebsd" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
FreeBSD
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#building-from-source" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Building from source
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Building from source">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#linux-and-macos" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Linux and macOS
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#windows_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Windows
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Windows">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#visual-studio-native-windows-abi" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Visual Studio & native Windows ABI
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#mingw-gnu-abi" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
MinGW & GNU ABI
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#windows-on-arm" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Windows on Arm
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#generating-an-import-library" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Generating an import library
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#android" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Android
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Android">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#building-for-armv7" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Building for ARMV7
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#building-for-armv8" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Building for ARMV8
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#iphoneios" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
iPhone/iOS
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#mips" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
MIPS
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#freebsd_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
FreeBSD
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#cortex-m" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Cortex-M
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-content" data-md-component="content">
|
|
<article class="md-content__inner md-typeset">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h1 id="install-openblas">Install OpenBLAS</h1>
|
|
<p>OpenBLAS can be installed through package managers or from source. If you only
|
|
want to use OpenBLAS rather than make changes to it, we recommend installing a
|
|
pre-built binary package with your package manager of choice.</p>
|
|
<p>This page contains an overview of installing with package managers as well as
|
|
from source. For the latter, see <a href="#building-from-source">further down on this page</a>.</p>
|
|
<h2 id="installing-with-a-package-manager">Installing with a package manager</h2>
|
|
<div class="admonition note">
|
|
<p class="admonition-title">Note</p>
|
|
<p>Almost every package manager provides OpenBLAS packages; the list on this
|
|
page is not comprehensive. If your package manager of choice isn't shown
|
|
here, please search its package database for <code>openblas</code> or <code>libopenblas</code>.</p>
|
|
</div>
|
|
<h3 id="linux">Linux</h3>
|
|
<p>On Linux, OpenBLAS can be installed with the system package manager, or with a
|
|
package manager like <a href="https://docs.conda.io/en/latest/">Conda</a>
|
|
(or alternative package managers for the conda-forge ecosystem, like
|
|
<a href="https://mamba.readthedocs.io/en/latest/">Mamba</a>,
|
|
<a href="https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html">Micromamba</a>,
|
|
or <a href="https://pixi.sh/latest/#windows-installer">Pixi</a>),
|
|
<a href="https://spack.io/">Spack</a>, or <a href="https://nixos.org/">Nix</a>. For the latter set of
|
|
tools, the package name in all cases is <code>openblas</code>. Since package management in
|
|
quite a few of these tools is declarative (i.e., managed by adding <code>openblas</code>
|
|
to a metadata file describing the dependencies for your project or
|
|
environment), we won't attempt to give detailed instructions for these tools here.</p>
|
|
<p>Linux distributions typically split OpenBLAS up in two packages: one containing
|
|
the library itself (typically named <code>openblas</code> or <code>libopenblas</code>), and one containing headers,
|
|
pkg-config and CMake files (typically named the same as the package for the
|
|
library with <code>-dev</code> or <code>-devel</code> appended; e.g., <code>openblas-devel</code>). Please keep
|
|
in mind that if you want to install OpenBLAS in order to use it directly in
|
|
your own project, you will need to install both of those packages.</p>
|
|
<p>Distro-specific installation commands:</p>
|
|
<div class="tabbed-set tabbed-alternate" data-tabs="1:4"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Debian/Ubuntu/Mint/Kali</label><label for="__tabbed_1_2">openSUSE/SLE</label><label for="__tabbed_1_3">Fedora/CentOS/RHEL</label><label for="__tabbed_1_4">Arch/Manjaro/Antergos</label></div>
|
|
<div class="tabbed-content">
|
|
<div class="tabbed-block">
|
|
<p><div class="highlight"><pre><span></span><code>$<span class="w"> </span>sudo<span class="w"> </span>apt<span class="w"> </span>update
|
|
$<span class="w"> </span>sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>libopenblas-dev
|
|
</code></pre></div>
|
|
OpenBLAS can be configured as the default BLAS through the <code>update-alternatives</code> mechanism:</p>
|
|
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>sudo<span class="w"> </span>update-alternatives<span class="w"> </span>--config<span class="w"> </span>libblas.so.3
|
|
</code></pre></div>
|
|
</div>
|
|
<div class="tabbed-block">
|
|
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>sudo<span class="w"> </span>zypper<span class="w"> </span>refresh
|
|
$<span class="w"> </span>sudo<span class="w"> </span>zypper<span class="w"> </span>install<span class="w"> </span>openblas-devel
|
|
</code></pre></div>
|
|
<p>OpenBLAS can be configured as the default BLAS through the <code>update-alternatives</code> mechanism:
|
|
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>sudo<span class="w"> </span>update-alternatives<span class="w"> </span>--config<span class="w"> </span>libblas.so.3
|
|
</code></pre></div></p>
|
|
</div>
|
|
<div class="tabbed-block">
|
|
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>dnf<span class="w"> </span>check-update
|
|
$<span class="w"> </span>dnf<span class="w"> </span>install<span class="w"> </span>openblas-devel
|
|
</code></pre></div>
|
|
<div class="admonition warning">
|
|
<p class="admonition-title">Warning</p>
|
|
<p>Fedora does not ship the pkg-config files for OpenBLAS. Instead, it wants you to
|
|
link against <a href="https://www.mpi-magdeburg.mpg.de/projects/flexiblas">FlexiBLAS</a> (which
|
|
uses OpenBLAS by default as its backend on Fedora), which you can install with:</p>
|
|
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>dnf<span class="w"> </span>install<span class="w"> </span>flexiblas-devel
|
|
</code></pre></div>
|
|
</div>
|
|
<p>For CentOS and RHEL, OpenBLAS packages are provided via the <a href="https://fedoraproject.org/wiki/EPEL">Fedora EPEL repository</a>.
|
|
After adding that repository and its repository keys, you can install
|
|
<code>openblas-devel</code> with either <code>dnf</code> or <code>yum</code>.</p>
|
|
</div>
|
|
<div class="tabbed-block">
|
|
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>sudo<span class="w"> </span>pacman<span class="w"> </span>-S<span class="w"> </span>openblas
|
|
</code></pre></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<h3 id="windows">Windows</h3>
|
|
<div class="tabbed-set tabbed-alternate" data-tabs="2:3"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Conda-forge</label><label for="__tabbed_2_2">vcpkg</label><label for="__tabbed_2_3">OpenBLAS releases</label></div>
|
|
<div class="tabbed-content">
|
|
<div class="tabbed-block">
|
|
<p>OpenBLAS can be installed with <code>conda</code> (or <code>mamba</code>, <code>micromamba</code>, or
|
|
<code>pixi</code>) from conda-forge:
|
|
<div class="highlight"><pre><span></span><code>conda install openblas
|
|
</code></pre></div></p>
|
|
<p>Conda-forge provides a method for switching the default BLAS implementation
|
|
used by all packages. To use that for OpenBLAS, install <code>libblas=*=*openblas</code>
|
|
(see <a href="https://conda-forge.org/docs/maintainer/knowledge_base/#switching-blas-implementation">the docs on this mechanism</a>
|
|
for more details).</p>
|
|
</div>
|
|
<div class="tabbed-block">
|
|
<p>OpenBLAS can be installed with vcpkg:
|
|
<div class="highlight"><pre><span></span><code># In classic mode:
|
|
vcpkg install openblas
|
|
|
|
# Or in manifest mode:
|
|
vcpkg add port openblas
|
|
</code></pre></div></p>
|
|
</div>
|
|
<div class="tabbed-block">
|
|
<p>Windows is the only platform for which binaries are made available by the
|
|
OpenBLAS project itself. They can be downloaded from the GitHub
|
|
Releases](https://github.com/OpenMathLib/OpenBLAS/releases) page. These
|
|
binaries are built with MinGW, using the following build options:
|
|
<div class="highlight"><pre><span></span><code>NUM_THREADS=64 TARGET=GENERIC DYNAMIC_ARCH=1 DYNAMIC_OLDER=1 CONSISTENT_FPCSR=1 INTERFACE=0
|
|
</code></pre></div>
|
|
There are separate packages for x86-64 and x86. The zip archive contains
|
|
the include files, static and shared libraries, as well as configuration
|
|
files for getting them found via CMake or pkg-config. To use these
|
|
binaries, create a suitable folder for your OpenBLAS installation and unzip
|
|
the <code>.zip</code> bundle there (note that you will need to edit the provided
|
|
<code>openblas.pc</code> and <code>OpenBLASConfig.cmake</code> to reflect the installation path
|
|
on your computer, as distributed they have "win" or "win64" reflecting the
|
|
local paths on the system they were built on).</p>
|
|
<p>Note that the same binaries can be downloaded
|
|
<a href="http://sourceforge.net/projects/openblas/files">from SourceForge</a>; this is
|
|
mostly of historical interest.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<h3 id="macos">macOS</h3>
|
|
<p>To install OpenBLAS with a package manager on macOS, run:</p>
|
|
<div class="tabbed-set tabbed-alternate" data-tabs="3:3"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><input id="__tabbed_3_2" name="__tabbed_3" type="radio" /><input id="__tabbed_3_3" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">Homebrew</label><label for="__tabbed_3_2">MacPorts</label><label for="__tabbed_3_3">Conda-forge</label></div>
|
|
<div class="tabbed-content">
|
|
<div class="tabbed-block">
|
|
<div class="highlight"><pre><span></span><code>%<span class="w"> </span>brew<span class="w"> </span>install<span class="w"> </span>openblas
|
|
</code></pre></div>
|
|
</div>
|
|
<div class="tabbed-block">
|
|
<div class="highlight"><pre><span></span><code>%<span class="w"> </span>sudo<span class="w"> </span>port<span class="w"> </span>install<span class="w"> </span>OpenBLAS-devel
|
|
</code></pre></div>
|
|
</div>
|
|
<div class="tabbed-block">
|
|
<div class="highlight"><pre><span></span><code>%<span class="w"> </span>conda<span class="w"> </span>install<span class="w"> </span>openblas
|
|
</code></pre></div>
|
|
<p>Conda-forge provides a method for switching the default BLAS implementation
|
|
used by all packages. To use that for OpenBLAS, install <code>libblas=*=*openblas</code>
|
|
(see <a href="https://conda-forge.org/docs/maintainer/knowledge_base/#switching-blas-implementation">the docs on this mechanism</a>
|
|
for more details).</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<h3 id="freebsd">FreeBSD</h3>
|
|
<p>You can install OpenBLAS from the FreeBSD <a href="https://www.freebsd.org/ports/index.html">Ports collection</a>:
|
|
<div class="highlight"><pre><span></span><code>pkg install openblas
|
|
</code></pre></div></p>
|
|
<h2 id="building-from-source">Building from source</h2>
|
|
<p>We recommend download the latest <a href="https://github.com/OpenMathLib/OpenBLAS/releases">stable version</a>
|
|
from the GitHub Releases page, or checking it out from a git tag, rather than a
|
|
dev version from the <code>develop</code> branch.</p>
|
|
<div class="admonition tip">
|
|
<p class="admonition-title">Tip</p>
|
|
<p>The User manual contains <a href="../user_manual/#compiling-openblas">a section with detailed information on compiling OpenBLAS</a>,
|
|
including how to customize builds and how to cross-compile. Please read
|
|
that documentation first. This page contains only platform-specific build
|
|
information, and assumes you already understand the general build system
|
|
invocations to build OpenBLAS, with the specific build options you want to
|
|
control multi-threading and other non-platform-specific behavior).</p>
|
|
</div>
|
|
<h3 id="linux-and-macos">Linux and macOS</h3>
|
|
<p>Ensure you have C and Fortran compilers installed, then simply type <code>make</code> to compile the library.
|
|
There are no other build dependencies, nor unusual platform-specific
|
|
environment variables to set or other system setup to do.</p>
|
|
<div class="admonition note">
|
|
<p class="admonition-title">Note</p>
|
|
<p>When building in an emulator (KVM, QEMU, etc.), please make sure that the combination of CPU features exposed to
|
|
the virtual environment matches that of an existing CPU to allow detection of the CPU model to succeed.
|
|
(With <code>qemu</code>, this can be done by passing <code>-cpu host</code> or a supported model name at invocation).</p>
|
|
</div>
|
|
<h3 id="windows_1">Windows</h3>
|
|
<p>We support building OpenBLAS with either MinGW or Visual Studio on Windows.
|
|
Using MSVC will yield an OpenBLAS build with the Windows platform-native ABI.
|
|
Using MinGW will yield a different ABI. We'll describe both methods in detail
|
|
in this section, since the process for each is quite different.</p>
|
|
<h4 id="visual-studio-native-windows-abi">Visual Studio & native Windows ABI</h4>
|
|
<p>For Visual Studio, you can use CMake to generate Visual Studio solution files;
|
|
note that you will need at least CMake 3.11 for linking to work correctly).</p>
|
|
<p>Note that you need a Fortran compiler if you plan to build and use the LAPACK
|
|
functions included with OpenBLAS. The sections below describe using either
|
|
<code>flang</code> as an add-on to clang/LLVM or <code>gfortran</code> as part of MinGW for this
|
|
purpose. If you want to use the Intel Fortran compiler (<code>ifort</code> or <code>ifx</code>) for
|
|
this, be sure to also use the Intel C compiler (<code>icc</code> or <code>icx</code>) for building
|
|
the C parts, as the ABI imposed by <code>ifort</code> is incompatible with MSVC</p>
|
|
<p>A fully-optimized OpenBLAS that can be statically or dynamically linked to your
|
|
application can currently be built for the 64-bit architecture with the LLVM
|
|
compiler infrastructure. We're going to use <a href="https://docs.anaconda.com/miniconda/">Miniconda3</a>
|
|
to grab all of the tools we need, since some of them are in an experimental
|
|
status. Before you begin, you'll need to have Microsoft Visual Studio 2015 or
|
|
newer installed.</p>
|
|
<ol>
|
|
<li>Install Miniconda3 for 64-bit Windows using <code>winget install --id Anaconda.Miniconda3</code>,
|
|
or easily download from <a href="https://docs.conda.io/en/latest/miniconda.html">conda.io</a>.</li>
|
|
<li>Open the "Anaconda Command Prompt" now available in the Start Menu, or at <code>%USERPROFILE%\miniconda3\shell\condabin\conda-hook.ps1</code>.</li>
|
|
<li>In that command prompt window, use <code>cd</code> to change to the directory where you want to build OpenBLAS.</li>
|
|
<li>Now install all of the tools we need:
|
|
<div class="highlight"><pre><span></span><code>conda update -n base conda
|
|
conda config --add channels conda-forge
|
|
conda install -y cmake flang clangdev perl libflang ninja
|
|
</code></pre></div></li>
|
|
<li>
|
|
<p>Still in the Anaconda Command Prompt window, activate the 64-bit MSVC environment with <code>vcvarsall x64</code>.
|
|
On Windows 11 with Visual Studio 2022, this would be done by invoking:</p>
|
|
<div class="highlight"><pre><span></span><code><span class="s2">"c:\Program Files\Microsoft Visual Studio\2022\Community\vc\Auxiliary\Build\vcvars64.bat"</span>
|
|
</code></pre></div>
|
|
<p>With VS2019, the command should be the same (except for the year number of course).
|
|
For other versions of MSVC, please check the Visual Studio documentation for
|
|
exactly how to invoke the <code>vcvars64.bat</code> script.</p>
|
|
<p>Confirm that the environment is active by typing <code>link</code>. This should return
|
|
a long list of possible options for the <code>link</code> command. If it just returns
|
|
<em>"command not found"</em> or similar, review and retype the call to <code>vcvars64.bat</code>.</p>
|
|
<div class="admonition note">
|
|
<p class="admonition-title">Note</p>
|
|
<p>if you are working from a Visual Studio command prompt window instead
|
|
(so that you do not have to do the <code>vcvars</code> call), you need to invoke
|
|
<code>conda activate</code> so that <code>CONDA_PREFIX</code> etc. get set up correctly before
|
|
proceeding to step 6. Failing to do so will lead to link errors like
|
|
<code>libflangmain.lib</code> not getting found later in the build.</p>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p>Now configure the project with CMake. Starting in the project directory, execute the following:
|
|
<div class="highlight"><pre><span></span><code>set "LIB=%CONDA_PREFIX%\Library\lib;%LIB%"
|
|
set "CPATH=%CONDA_PREFIX%\Library\include;%CPATH%"
|
|
mkdir build
|
|
cd build
|
|
cmake .. -G "Ninja" -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_C_COMPILER=clang-cl -DCMAKE_Fortran_COMPILER=flang -DCMAKE_MT=mt -DBUILD_WITHOUT_LAPACK=no -DNOFORTRAN=0 -DDYNAMIC_ARCH=ON -DCMAKE_BUILD_TYPE=Release
|
|
</code></pre></div></p>
|
|
<p>You may want to add further options in the <code>cmake</code> command here. For
|
|
instance, the default only produces a static <code>.lib</code> version of the library.
|
|
If you would rather have a DLL, add <code>-DBUILD_SHARED_LIBS=ON</code> above. Note that
|
|
this step only creates some command files and directories, the actual build
|
|
happens next.</p>
|
|
</li>
|
|
<li>
|
|
<p>Build the project:</p>
|
|
<p><div class="highlight"><pre><span></span><code>cmake --build . --config Release
|
|
</code></pre></div>
|
|
This step will create the OpenBLAS library in the <code>lib</code> directory, and
|
|
various build-time tests in the <code>test</code>, <code>ctest</code> and <code>openblas_utest</code>
|
|
directories. However it will not separate the header files you might need
|
|
for building your own programs from those used internally. To put all
|
|
relevant files in a more convenient arrangement, run the next step.</p>
|
|
</li>
|
|
<li>
|
|
<p>Install all relevant files created by the build:</p>
|
|
<p><div class="highlight"><pre><span></span><code>cmake --install . --prefix c:\opt -v
|
|
</code></pre></div>
|
|
This will copy all files that are needed for building and running your own
|
|
programs with OpenBLAS to the given location, creating appropriate
|
|
subdirectories for the individual kinds of files. In the case of <code>C:\opt</code> as
|
|
given above, this would be:</p>
|
|
<ul>
|
|
<li><code>C:\opt\include\openblas</code> for the header files, </li>
|
|
<li><code>C:\opt\bin</code> for the <code>libopenblas.dll</code> shared library,</li>
|
|
<li><code>C:\opt\lib</code> for the static library, and</li>
|
|
<li><code>C:\opt\share</code> holds various support files that enable other cmake-based
|
|
build scripts to find OpenBLAS automatically.</li>
|
|
</ul>
|
|
</li>
|
|
</ol>
|
|
<div class="admonition tip">
|
|
<p class="admonition-title">Change in complex types for Visual Studio 2017 and up</p>
|
|
<p>In newer Visual Studio versions, Microsoft has changed
|
|
<a href="https://docs.microsoft.com/en-us/cpp/c-runtime-library/complex-math-support?view=msvc-170#types-used-in-complex-math">how it handles complex types</a>.
|
|
Even when using a precompiled version of OpenBLAS, you might need to define
|
|
<code>LAPACK_COMPLEX_CUSTOM</code> in order to define complex types properly for MSVC.
|
|
For example, some variant of the following might help:</p>
|
|
<div class="highlight"><pre><span></span><code><span class="cp">#if defined(_MSC_VER)</span>
|
|
<span class="w"> </span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><complex.h></span>
|
|
<span class="w"> </span><span class="cp">#define LAPACK_COMPLEX_CUSTOM</span>
|
|
<span class="w"> </span><span class="cp">#define lapack_complex_float _Fcomplex</span>
|
|
<span class="w"> </span><span class="cp">#define lapack_complex_double _Dcomplex</span>
|
|
<span class="cp">#endif</span>
|
|
</code></pre></div>
|
|
<p>For reference, see
|
|
<a href="https://github.com/OpenMathLib/OpenBLAS/issues/3661">openblas#3661</a>,
|
|
<a href="https://github.com/Reference-LAPACK/lapack/issues/683">lapack#683</a>, and
|
|
<a href="https://stackoverflow.com/questions/47520244/using-openblas-lapacke-in-visual-studio">this Stack Overflow question</a>.</p>
|
|
</div>
|
|
<div class="admonition warning">
|
|
<p class="admonition-title">Building 32-bit binaries with MSVC</p>
|
|
<p>This method may produce binaries which demonstrate significantly lower
|
|
performance than those built with the other methods. The Visual Studio
|
|
compiler does not support the dialect of assembly used in the cpu-specific
|
|
optimized files, so only the "generic" <code>TARGET</code> which is written in pure C
|
|
will get built. For the same reason it is not possible (and not necessary)
|
|
to use <code>-DDYNAMIC_ARCH=ON</code> in a Visual Studio build. You may consider
|
|
building for the 32-bit architecture using the GNU (MinGW) ABI instead.</p>
|
|
</div>
|
|
<h5 id="cmake-visual-studio-integration">CMake & Visual Studio integration</h5>
|
|
<p>To generate Visual Studio solution files, ensure CMake is installed and then run:
|
|
<div class="highlight"><pre><span></span><code># Do this from Powershell so cmake can find visual studio
|
|
cmake -G "Visual Studio 14 Win64" -DCMAKE_BUILD_TYPE=Release .
|
|
</code></pre></div></p>
|
|
<p>To then build OpenBLAS using those solution files from within Visual Studio, we
|
|
also need Perl. Please install it and ensure it's on the <code>PATH</code> (see, e.g.,
|
|
<a href="http://stackoverflow.com/questions/3051049/active-perl-installation-on-windows-operating-system">this Stack Overflow question for how</a>).</p>
|
|
<p>If you build from within Visual Studio, the dependencies may not be
|
|
automatically configured: if you try to build <code>libopenblas</code> directly, it may
|
|
fail with a message saying that some <code>.obj</code> files aren't found. If this
|
|
happens, you can work around the problem by building the projects that
|
|
<code>libopenblas</code> depends on before building <code>libopenblas</code> itself.</p>
|
|
<h6 id="build-openblas-for-universal-windows-platform">Build OpenBLAS for Universal Windows Platform</h6>
|
|
<p>OpenBLAS can be built targeting <a href="https://en.wikipedia.org/wiki/Universal_Windows_Platform">Universal Windows Platform</a>
|
|
(UWP) like this:</p>
|
|
<ol>
|
|
<li>Follow the steps above to build the Visual Studio solution files for
|
|
Windows. This builds the helper executables which are required when building
|
|
the OpenBLAS Visual Studio solution files for UWP in step 2.</li>
|
|
<li>
|
|
<p>Remove the generated <code>CMakeCache.txt</code> and the <code>CMakeFiles</code> directory from
|
|
the OpenBLAS source directory, then re-run CMake with the following options:</p>
|
|
<p><div class="highlight"><pre><span></span><code># do this to build UWP compatible solution files
|
|
cmake -G "Visual Studio 14 Win64" -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0" -DCMAKE_SYSTEM_PROCESSOR=AMD64 -DVS_WINRT_COMPONENT=TRUE -DCMAKE_BUILD_TYPE=Release .
|
|
</code></pre></div>
|
|
3. Now build the solution with Visual Studio.</p>
|
|
</li>
|
|
</ol>
|
|
<h4 id="mingw-gnu-abi">MinGW & GNU ABI</h4>
|
|
<div class="admonition note">
|
|
<p class="admonition-title">Note</p>
|
|
<p>The resulting library from building with MinGW as described below can be
|
|
used in Visual Studio, but it can only be linked dynamically. This
|
|
configuration has not been thoroughly tested and should be considered
|
|
experimental.</p>
|
|
</div>
|
|
<p>To build OpenBLAS on Windows with MinGW:</p>
|
|
<ol>
|
|
<li>Install the MinGW (GCC) compiler suite, either the 32-bit
|
|
[MinGW]((http://www.mingw.org/) or the 64-bit
|
|
<a href="http://mingw-w64.sourceforge.net/">MinGW-w64</a> toolchain. Be sure to install
|
|
its <code>gfortran</code> package as well (unless you really want to build the BLAS part
|
|
of OpenBLAS only) and check that <code>gcc</code> and <code>gfortran</code> are the same version.
|
|
In addition, please install MSYS2 with MinGW.</li>
|
|
<li>Build OpenBLAS in the MSYS2 shell. Usually, you can just type <code>make</code>.
|
|
OpenBLAS will detect the compiler and CPU automatically. </li>
|
|
<li>After the build is complete, OpenBLAS will generate the static library
|
|
<code>libopenblas.a</code> and the shared library <code>libopenblas.dll</code> in the folder. You
|
|
can type <code>make PREFIX=/your/installation/path install</code> to install the
|
|
library to a certain location.</li>
|
|
</ol>
|
|
<p>Note that OpenBLAS will generate the import library <code>libopenblas.dll.a</code> for
|
|
<code>libopenblas.dll</code> by default.</p>
|
|
<p>If you want to generate Windows-native PDB files from a MinGW build, you can
|
|
use the <a href="https://github.com/rainers/cv2pdb">cv2pdb</a> tool to do so.</p>
|
|
<p>To then use the built OpenBLAS shared library in Visual Studio:</p>
|
|
<ol>
|
|
<li>Copy the import library (<code>OPENBLAS_TOP_DIR/libopenblas.dll.a</code>) and the
|
|
shared library (<code>libopenblas.dll</code>) into the same folder (this must be the
|
|
folder of your project that is going to use the BLAS library. You may need
|
|
to add <code>libopenblas.dll.a</code> to the linker input list: <code>properties->Linker->Input</code>).</li>
|
|
<li>Please follow the Visual Studio documentation about using third-party .dll
|
|
libraries, and make sure to link against a library for the correct
|
|
architecture.<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></li>
|
|
<li>If you need CBLAS, you should include <code>cblas.h</code> in
|
|
<code>/your/installation/path/include</code> in Visual Studio. Please see
|
|
<a href="http://github.com/OpenMathLib/OpenBLAS/issues/95">openblas#95</a> for more details.</li>
|
|
</ol>
|
|
<div class="admonition info">
|
|
<p class="admonition-title">Limitations of using the MinGW build within Visual Studio</p>
|
|
<ul>
|
|
<li>Both static and dynamic linking are supported with MinGW. With Visual
|
|
Studio, however, only dynamic linking is supported and so you should use
|
|
the import library.</li>
|
|
<li>Debugging from Visual Studio does not work because MinGW and Visual
|
|
Studio have incompatible formats for debug information (PDB vs.
|
|
DWARF/STABS). You should either debug with GDB on the command line or
|
|
with a visual frontend, for instance <a href="http://www.eclipse.org/cdt/">Eclipse</a> or
|
|
<a href="http://qt.nokia.com/products/developer-tools/">Qt Creator</a>.</li>
|
|
</ul>
|
|
</div>
|
|
<h4 id="windows-on-arm">Windows on Arm</h4>
|
|
<p>The following tools needs to be installed to build for Windows on Arm (WoA):</p>
|
|
<ul>
|
|
<li>Clang for Windows on Arm.
|
|
Find the latest LLVM build for WoA from <a href="https://releases.llvm.org/">LLVM release page</a>.
|
|
E.g: LLVM 12 build for WoA64 can be found <a href="https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.0/LLVM-12.0.0-woa64.exe">here</a>
|
|
Run the LLVM installer and ensure that LLVM is added to environment PATH.</li>
|
|
<li>Download and install classic Flang for Windows on Arm.
|
|
Classic Flang is the only available Fortran compiler for Windows on Arm for now.
|
|
A pre-release build can be found <a href="https://github.com/kaadam/flang/releases/tag/v0.1">here</a>
|
|
There is no installer for classic flang and the zip package can be
|
|
extracted and the path needs to be added to environment <code>PATH</code>.
|
|
E.g., in PowerShell:
|
|
<div class="highlight"><pre><span></span><code>$env:Path += ";C:\flang_woa\bin"
|
|
</code></pre></div></li>
|
|
</ul>
|
|
<p>The following steps describe how to build the static library for OpenBLAS with and without LAPACK:</p>
|
|
<ol>
|
|
<li>
|
|
<p>Build OpenBLAS static library with BLAS and LAPACK routines with Make:</p>
|
|
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>make<span class="w"> </span><span class="nv">CC</span><span class="o">=</span><span class="s2">"clang-cl"</span><span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span><span class="s2">"clang-cl"</span><span class="w"> </span><span class="nv">AR</span><span class="o">=</span><span class="s2">"llvm-ar"</span><span class="w"> </span><span class="nv">BUILD_WITHOUT_LAPACK</span><span class="o">=</span><span class="m">0</span><span class="w"> </span><span class="nv">NOFORTRAN</span><span class="o">=</span><span class="m">0</span><span class="w"> </span><span class="nv">DYNAMIC_ARCH</span><span class="o">=</span><span class="m">0</span><span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>ARMV8<span class="w"> </span><span class="nv">ARCH</span><span class="o">=</span>arm64<span class="w"> </span><span class="nv">BINARY</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">USE_OPENMP</span><span class="o">=</span><span class="m">0</span><span class="w"> </span><span class="nv">PARALLEL</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">RANLIB</span><span class="o">=</span><span class="s2">"llvm-ranlib"</span><span class="w"> </span><span class="nv">MAKE</span><span class="o">=</span>make<span class="w"> </span><span class="nv">F_COMPILER</span><span class="o">=</span>FLANG<span class="w"> </span><span class="nv">FC</span><span class="o">=</span>FLANG<span class="w"> </span><span class="nv">FFLAGS_NOOPT</span><span class="o">=</span><span class="s2">"-march=armv8-a -cpp"</span><span class="w"> </span><span class="nv">FFLAGS</span><span class="o">=</span><span class="s2">"-march=armv8-a -cpp"</span><span class="w"> </span><span class="nv">NEED_PIC</span><span class="o">=</span><span class="m">0</span><span class="w"> </span><span class="nv">HOSTARCH</span><span class="o">=</span>arm64<span class="w"> </span>libs<span class="w"> </span>netlib
|
|
</code></pre></div>
|
|
</li>
|
|
<li>
|
|
<p>Build static library with BLAS routines using CMake:</p>
|
|
<p>Classic Flang has compatibility issues with CMake, hence only BLAS routines can be compiled with CMake:</p>
|
|
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>mkdir<span class="w"> </span>build
|
|
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
|
|
$<span class="w"> </span>cmake<span class="w"> </span>..<span class="w"> </span>-G<span class="w"> </span>Ninja<span class="w"> </span>-DCMAKE_C_COMPILER<span class="o">=</span>clang<span class="w"> </span>-DBUILD_WITHOUT_LAPACK<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DNOFORTRAN<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DDYNAMIC_ARCH<span class="o">=</span><span class="m">0</span><span class="w"> </span>-DTARGET<span class="o">=</span>ARMV8<span class="w"> </span>-DARCH<span class="o">=</span>arm64<span class="w"> </span>-DBINARY<span class="o">=</span><span class="m">64</span><span class="w"> </span>-DUSE_OPENMP<span class="o">=</span><span class="m">0</span><span class="w"> </span>-DCMAKE_SYSTEM_PROCESSOR<span class="o">=</span>ARM64<span class="w"> </span>-DCMAKE_CROSSCOMPILING<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DCMAKE_SYSTEM_NAME<span class="o">=</span>Windows
|
|
$<span class="w"> </span>cmake<span class="w"> </span>--build<span class="w"> </span>.<span class="w"> </span>--config<span class="w"> </span>Release
|
|
</code></pre></div>
|
|
</li>
|
|
</ol>
|
|
<div class="admonition tip">
|
|
<p class="admonition-title"><code>getarch.exe</code> execution error</p>
|
|
<p>If you notice that platform-specific headers by <code>getarch.exe</code> are not
|
|
generated correctly, this could be due to a known debug runtime DLL issue for
|
|
arm64 platforms. Please check out <a href="https://linaro.atlassian.net/wiki/spaces/WOAR/pages/28677636097/Debug+run-time+DLL+issue#Workaround">this page</a>
|
|
for a workaround.</p>
|
|
</div>
|
|
<h4 id="generating-an-import-library">Generating an import library</h4>
|
|
<p>Microsoft Windows has this thing called "import libraries". You need it for
|
|
MSVC; you don't need it for MinGW because the <code>ld</code> linker is smart enough -
|
|
however, you may still want it for some reason, so we'll describe the process
|
|
for both MSVC and MinGW.</p>
|
|
<p>Import libraries are compiled from a list of what symbols to use, which are
|
|
contained in a <code>.def</code> file. A <code>.def</code> file should be already be present in the
|
|
<code>exports</code> directory under the top-level OpenBLAS directory after you've run a build.
|
|
In your shell, move to this directory: <code>cd exports</code>.</p>
|
|
<div class="tabbed-set tabbed-alternate" data-tabs="4:2"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">MSVC</label><label for="__tabbed_4_2">MinGW</label></div>
|
|
<div class="tabbed-content">
|
|
<div class="tabbed-block">
|
|
<p>Unlike MinGW, MSVC absolutely requires an import library. Now the C ABI of
|
|
MSVC and MinGW are actually identical, so linking is actually okay (any
|
|
incompatibility in the C ABI would be a bug).</p>
|
|
<p>The import libraries of MSVC have the suffix <code>.lib</code>. They are generated
|
|
from a <code>.def</code> file using MSVC's <code>lib.exe</code>. See <a href="use_visual_studio.md#generate-import-library-before-0210-version">the MSVC instructions</a>.</p>
|
|
</div>
|
|
<div class="tabbed-block">
|
|
<p>MinGW import libraries have the suffix <code>.a</code>, just like static libraries.
|
|
Our goal is to produce the file <code>libopenblas.dll.a</code>.</p>
|
|
<p>You need to first insert a line <code>LIBRARY libopenblas.dll</code> in <code>libopenblas.def</code>:
|
|
<div class="highlight"><pre><span></span><code>cat <(echo "LIBRARY libopenblas.dll") libopenblas.def > libopenblas.def.1
|
|
mv libopenblas.def.1 libopenblas.def
|
|
</code></pre></div></p>
|
|
<p>Now the <code>.def</code> file probably looks like:
|
|
<div class="highlight"><pre><span></span><code>LIBRARY libopenblas.dll
|
|
EXPORTS
|
|
caxpy=caxpy_ @1
|
|
caxpy_=caxpy_ @2
|
|
...
|
|
</code></pre></div>
|
|
Then, generate the import library: <code>dlltool -d libopenblas.def -l libopenblas.dll.a</code></p>
|
|
<p><em>Again, there is basically <strong>no point</strong> in making an import library for use in MinGW. It actually slows down linking.</em></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<h3 id="android">Android</h3>
|
|
<p>To build OpenBLAS for Android, you will need the following tools installed on your machine:</p>
|
|
<ul>
|
|
<li><a href="https://developer.android.com/ndk/">The Android NDK</a></li>
|
|
<li>Perl</li>
|
|
<li>Clang compiler on the build machine</li>
|
|
</ul>
|
|
<p>The next two sections below describe how to build with Clang for ARMV7 and
|
|
ARMV8 targets, respectively. The same basic principles as described below for
|
|
ARMV8 should also apply to building an x86 or x86-64 version (substitute
|
|
something like <code>NEHALEM</code> for the target instead of <code>ARMV8</code>, and replace all the
|
|
<code>aarch64</code> in the toolchain paths with <code>x86</code> or <code>x96_64</code> as appropriate).</p>
|
|
<div class="admonition info">
|
|
<p class="admonition-title">Historic note</p>
|
|
<p>Since NDK version 19, the default toolchain is provided as a standalone
|
|
toolchain, so building one yourself following
|
|
<a href="http://developer.android.com/ndk/guides/standalone_toolchain.html">building a standalone toolchain</a>
|
|
should no longer be necessary.</p>
|
|
</div>
|
|
<h4 id="building-for-armv7">Building for ARMV7</h4>
|
|
<div class="highlight"><pre><span></span><code><span class="c1"># Set path to ndk-bundle</span>
|
|
<span class="nb">export</span><span class="w"> </span><span class="nv">NDK_BUNDLE_DIR</span><span class="o">=</span>/path/to/ndk-bundle
|
|
|
|
<span class="c1"># Set the PATH to contain paths to clang and arm-linux-androideabi-* utilities</span>
|
|
<span class="nb">export</span><span class="w"> </span><span class="nv">PATH</span><span class="o">=</span><span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span>/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:<span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span>/toolchains/llvm/prebuilt/linux-x86_64/bin:<span class="nv">$PATH</span>
|
|
|
|
<span class="c1"># Set LDFLAGS so that the linker finds the appropriate libgcc</span>
|
|
<span class="nb">export</span><span class="w"> </span><span class="nv">LDFLAGS</span><span class="o">=</span><span class="s2">"-L</span><span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span><span class="s2">/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x"</span>
|
|
|
|
<span class="c1"># Set the clang cross compile flags</span>
|
|
<span class="nb">export</span><span class="w"> </span><span class="nv">CLANG_FLAGS</span><span class="o">=</span><span class="s2">"-target arm-linux-androideabi -marm -mfpu=vfp -mfloat-abi=softfp --sysroot </span><span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span><span class="s2">/platforms/android-23/arch-arm -gcc-toolchain </span><span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span><span class="s2">/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/"</span>
|
|
|
|
<span class="c1">#OpenBLAS Compile</span>
|
|
make<span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>ARMV7<span class="w"> </span><span class="nv">ONLY_CBLAS</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">AR</span><span class="o">=</span>ar<span class="w"> </span><span class="nv">CC</span><span class="o">=</span><span class="s2">"clang </span><span class="si">${</span><span class="nv">CLANG_FLAGS</span><span class="si">}</span><span class="s2">"</span><span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="nv">ARM_SOFTFP_ABI</span><span class="o">=</span><span class="m">1</span><span class="w"> </span>-j4
|
|
</code></pre></div>
|
|
<p>On macOS, it may also be necessary to give the complete path to the <code>ar</code>
|
|
utility in the make command above, like so:
|
|
<div class="highlight"><pre><span></span><code><span class="nv">AR</span><span class="o">=</span><span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span>/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc-ar
|
|
</code></pre></div>
|
|
otherwise you may get a linker error complaining like <code>malformed archive header
|
|
name at 8</code> when the native macOS <code>ar</code> command was invoked instead.</p>
|
|
<h4 id="building-for-armv8">Building for ARMV8</h4>
|
|
<p><div class="highlight"><pre><span></span><code><span class="c1"># Set path to ndk-bundle</span>
|
|
<span class="nb">export</span><span class="w"> </span><span class="nv">NDK_BUNDLE_DIR</span><span class="o">=</span>/path/to/ndk-bundle/
|
|
|
|
<span class="c1"># Export PATH to contain directories of clang and aarch64-linux-android-* utilities</span>
|
|
<span class="nb">export</span><span class="w"> </span><span class="nv">PATH</span><span class="o">=</span><span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span>/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/:<span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span>/toolchains/llvm/prebuilt/linux-x86_64/bin:<span class="nv">$PATH</span>
|
|
|
|
<span class="c1"># Setup LDFLAGS so that loader can find libgcc and pass -lm for sqrt</span>
|
|
<span class="nb">export</span><span class="w"> </span><span class="nv">LDFLAGS</span><span class="o">=</span><span class="s2">"-L</span><span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span><span class="s2">/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/lib/gcc/aarch64-linux-android/4.9.x -lm"</span>
|
|
|
|
<span class="c1"># Setup the clang cross compile options</span>
|
|
<span class="nb">export</span><span class="w"> </span><span class="nv">CLANG_FLAGS</span><span class="o">=</span><span class="s2">"-target aarch64-linux-android --sysroot </span><span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span><span class="s2">/platforms/android-23/arch-arm64 -gcc-toolchain </span><span class="si">${</span><span class="nv">NDK_BUNDLE_DIR</span><span class="si">}</span><span class="s2">/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/"</span>
|
|
|
|
<span class="c1"># Compile</span>
|
|
make<span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>ARMV8<span class="w"> </span><span class="nv">ONLY_CBLAS</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">AR</span><span class="o">=</span>ar<span class="w"> </span><span class="nv">CC</span><span class="o">=</span><span class="s2">"clang </span><span class="si">${</span><span class="nv">CLANG_FLAGS</span><span class="si">}</span><span class="s2">"</span><span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span>-j4
|
|
</code></pre></div>
|
|
Note: using <code>TARGET=CORTEXA57</code> in place of <code>ARMV8</code> will pick up better
|
|
optimized routines. Implementations for the <code>CORTEXA57</code> target are compatible
|
|
with all other <code>ARMV8</code> targets.</p>
|
|
<p>Note: for NDK 23b, something as simple as:
|
|
<div class="highlight"><pre><span></span><code><span class="nb">export</span><span class="w"> </span><span class="nv">PATH</span><span class="o">=</span>/opt/android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/bin/:<span class="nv">$PATH</span>
|
|
make<span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="nv">CC</span><span class="o">=</span>/opt/android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android31-clang<span class="w"> </span><span class="nv">ONLY_CBLAS</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>ARMV8
|
|
</code></pre></div>
|
|
appears to be sufficient on Linux.</p>
|
|
<details class="note">
|
|
<summary>Alternative build script for 3 architectures</summary>
|
|
<p>This script will build OpenBLAS for 3 architecture (<code>ARMV7</code>, <code>ARMV8</code>, <code>X86</code>) and install them to <code>/opt/OpenBLAS/lib</code>.
|
|
It was tested on macOS with NDK version 21.3.6528147.</p>
|
|
<p><div class="highlight"><pre><span></span><code><span class="nb">export</span><span class="w"> </span><span class="nv">NDK</span><span class="o">=</span>YOUR_PATH_TO_SDK/Android/sdk/ndk/21.3.6528147
|
|
<span class="nb">export</span><span class="w"> </span><span class="nv">TOOLCHAIN</span><span class="o">=</span><span class="nv">$NDK</span>/toolchains/llvm/prebuilt/darwin-x86_64
|
|
|
|
make<span class="w"> </span>clean
|
|
make<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>ARMV7<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">ONLY_CBLAS</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">CC</span><span class="o">=</span><span class="s2">"</span><span class="nv">$TOOLCHAIN</span><span class="s2">"</span>/bin/armv7a-linux-androideabi21-clang<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">AR</span><span class="o">=</span><span class="s2">"</span><span class="nv">$TOOLCHAIN</span><span class="s2">"</span>/bin/arm-linux-androideabi-ar<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">ARM_SOFTFP_ABI</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span>-j4
|
|
sudo<span class="w"> </span>make<span class="w"> </span>install
|
|
|
|
make<span class="w"> </span>clean
|
|
make<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>CORTEXA57<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">ONLY_CBLAS</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">CC</span><span class="o">=</span><span class="nv">$TOOLCHAIN</span>/bin/aarch64-linux-android21-clang<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">AR</span><span class="o">=</span><span class="nv">$TOOLCHAIN</span>/bin/aarch64-linux-android-ar<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="se">\</span>
|
|
-j4
|
|
sudo<span class="w"> </span>make<span class="w"> </span>install
|
|
|
|
make<span class="w"> </span>clean
|
|
make<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>ATOM<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">ONLY_CBLAS</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="se">\</span>
|
|
<span class="nv">CC</span><span class="o">=</span><span class="s2">"</span><span class="nv">$TOOLCHAIN</span><span class="s2">"</span>/bin/i686-linux-android21-clang<span class="w"> </span><span class="se">\</span>
|
|
<span class="nv">AR</span><span class="o">=</span><span class="s2">"</span><span class="nv">$TOOLCHAIN</span><span class="s2">"</span>/bin/i686-linux-android-ar<span class="w"> </span><span class="se">\</span>
|
|
<span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="se">\</span>
|
|
<span class="nv">ARM_SOFTFP_ABI</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="se">\</span>
|
|
-j4
|
|
sudo<span class="w"> </span>make<span class="w"> </span>install
|
|
|
|
<span class="c1">## This will build for x86_64 </span>
|
|
make<span class="w"> </span>clean
|
|
make<span class="w"> </span><span class="se">\</span>
|
|
<span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>ATOM<span class="w"> </span><span class="nv">BINARY</span><span class="o">=</span><span class="m">64</span><span class="se">\</span>
|
|
<span class="nv">ONLY_CBLAS</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="se">\</span>
|
|
<span class="nv">CC</span><span class="o">=</span><span class="s2">"</span><span class="nv">$TOOLCHAIN</span><span class="s2">"</span>/bin/x86_64-linux-android21-clang<span class="w"> </span><span class="se">\</span>
|
|
<span class="nv">AR</span><span class="o">=</span><span class="s2">"</span><span class="nv">$TOOLCHAIN</span><span class="s2">"</span>/bin/x86_64-linux-android-ar<span class="w"> </span><span class="se">\</span>
|
|
<span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="se">\</span>
|
|
<span class="nv">ARM_SOFTFP_ABI</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="se">\</span>
|
|
-j4
|
|
sudo<span class="w"> </span>make<span class="w"> </span>install
|
|
</code></pre></div>
|
|
You can find full list of target architectures in <a href="https://github.com/OpenMathLib/OpenBLAS/blob/develop/TargetList.txt">TargetList.txt</a></p>
|
|
</details>
|
|
<h3 id="iphoneios">iPhone/iOS</h3>
|
|
<p>As none of the current developers uses iOS, the following instructions are what
|
|
was found to work in our Azure CI setup, but as far as we know this builds a
|
|
fully working OpenBLAS for this platform.</p>
|
|
<p>Go to the directory where you unpacked OpenBLAS,and enter the following commands:
|
|
<div class="highlight"><pre><span></span><code><span class="nv">CC</span><span class="o">=</span>/Applications/Xcode_12.4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
|
|
|
<span class="nv">CFLAGS</span><span class="o">=</span><span class="w"> </span>-O2<span class="w"> </span>-Wno-macro-redefined<span class="w"> </span>-isysroot<span class="w"> </span>/Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.4.sdk<span class="w"> </span>-arch<span class="w"> </span>arm64<span class="w"> </span>-miphoneos-version-min<span class="o">=</span><span class="m">10</span>.0
|
|
|
|
make<span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>ARMV8<span class="w"> </span><span class="nv">DYNAMIC_ARCH</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">NUM_THREADS</span><span class="o">=</span><span class="m">32</span><span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>clang<span class="w"> </span><span class="nv">NOFORTRAN</span><span class="o">=</span><span class="m">1</span>
|
|
</code></pre></div>
|
|
Adjust <code>MIN_IOS_VERSION</code> as necessary for your installation. E.g., change the version number
|
|
to the minimum iOS version you want to target and execute this file to build the library.</p>
|
|
<h3 id="mips">MIPS</h3>
|
|
<p>For MIPS targets you will need latest toolchains:</p>
|
|
<ul>
|
|
<li>P5600 - MTI GNU/Linux Toolchain</li>
|
|
<li>I6400, P6600 - IMG GNU/Linux Toolchain</li>
|
|
</ul>
|
|
<p>You can use following commandlines for builds:</p>
|
|
<div class="highlight"><pre><span></span><code><span class="nv">IMG_TOOLCHAIN_DIR</span><span class="o">={</span>full<span class="w"> </span>IMG<span class="w"> </span>GNU/Linux<span class="w"> </span>Toolchain<span class="w"> </span>path<span class="w"> </span>including<span class="w"> </span><span class="s2">"bin"</span><span class="w"> </span>directory<span class="w"> </span>--<span class="w"> </span><span class="k">for</span><span class="w"> </span>example,<span class="w"> </span>/opt/linux_toolchain/bin<span class="o">}</span>
|
|
<span class="nv">IMG_GCC_PREFIX</span><span class="o">=</span>mips-img-linux-gnu
|
|
<span class="nv">IMG_TOOLCHAIN</span><span class="o">=</span><span class="si">${</span><span class="nv">IMG_TOOLCHAIN_DIR</span><span class="si">}</span>/<span class="si">${</span><span class="nv">IMG_GCC_PREFIX</span><span class="si">}</span>
|
|
|
|
<span class="c1"># I6400 Build (n32):</span>
|
|
make<span class="w"> </span><span class="nv">BINARY</span><span class="o">=</span><span class="m">32</span><span class="w"> </span><span class="nv">BINARY32</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">CC</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-gcc<span class="w"> </span><span class="nv">AR</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-ar<span class="w"> </span><span class="nv">FC</span><span class="o">=</span><span class="s2">"</span><span class="nv">$IMG_TOOLCHAIN</span><span class="s2">-gfortran -EL -mabi=n32"</span><span class="w"> </span><span class="nv">RANLIB</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-ranlib<span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="nv">CFLAGS</span><span class="o">=</span><span class="s2">"-EL"</span><span class="w"> </span><span class="nv">FFLAGS</span><span class="o">=</span><span class="nv">$CFLAGS</span><span class="w"> </span><span class="nv">LDFLAGS</span><span class="o">=</span><span class="nv">$CFLAGS</span><span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>I6400
|
|
|
|
<span class="c1"># I6400 Build (n64):</span>
|
|
make<span class="w"> </span><span class="nv">BINARY</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">BINARY64</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">CC</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-gcc<span class="w"> </span><span class="nv">AR</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-ar<span class="w"> </span><span class="nv">FC</span><span class="o">=</span><span class="s2">"</span><span class="nv">$IMG_TOOLCHAIN</span><span class="s2">-gfortran -EL"</span><span class="w"> </span><span class="nv">RANLIB</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-ranlib<span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="nv">CFLAGS</span><span class="o">=</span><span class="s2">"-EL"</span><span class="w"> </span><span class="nv">FFLAGS</span><span class="o">=</span><span class="nv">$CFLAGS</span><span class="w"> </span><span class="nv">LDFLAGS</span><span class="o">=</span><span class="nv">$CFLAGS</span><span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>I6400
|
|
|
|
<span class="c1"># P6600 Build (n32):</span>
|
|
make<span class="w"> </span><span class="nv">BINARY</span><span class="o">=</span><span class="m">32</span><span class="w"> </span><span class="nv">BINARY32</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">CC</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-gcc<span class="w"> </span><span class="nv">AR</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-ar<span class="w"> </span><span class="nv">FC</span><span class="o">=</span><span class="s2">"</span><span class="nv">$IMG_TOOLCHAIN</span><span class="s2">-gfortran -EL -mabi=n32"</span><span class="w"> </span><span class="nv">RANLIB</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-ranlib<span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="nv">CFLAGS</span><span class="o">=</span><span class="s2">"-EL"</span><span class="w"> </span><span class="nv">FFLAGS</span><span class="o">=</span><span class="nv">$CFLAGS</span><span class="w"> </span><span class="nv">LDFLAGS</span><span class="o">=</span><span class="nv">$CFLAGS</span><span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>P6600
|
|
|
|
<span class="c1"># P6600 Build (n64):</span>
|
|
make<span class="w"> </span><span class="nv">BINARY</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">BINARY64</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">CC</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-gcc<span class="w"> </span><span class="nv">AR</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-ar<span class="w"> </span><span class="nv">FC</span><span class="o">=</span><span class="s2">"</span><span class="nv">$IMG_TOOLCHAIN</span><span class="s2">-gfortran -EL"</span><span class="w"> </span><span class="nv">RANLIB</span><span class="o">=</span><span class="nv">$IMG_TOOLCHAIN</span>-ranlib<span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="nv">CFLAGS</span><span class="o">=</span><span class="s2">"-EL"</span><span class="w"> </span><span class="nv">FFLAGS</span><span class="o">=</span><span class="s2">"</span><span class="nv">$CFLAGS</span><span class="s2">"</span><span class="w"> </span><span class="nv">LDFLAGS</span><span class="o">=</span><span class="s2">"</span><span class="nv">$CFLAGS</span><span class="s2">"</span><span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>P6600
|
|
|
|
<span class="nv">MTI_TOOLCHAIN_DIR</span><span class="o">={</span>full<span class="w"> </span>MTI<span class="w"> </span>GNU/Linux<span class="w"> </span>Toolchain<span class="w"> </span>path<span class="w"> </span>including<span class="w"> </span><span class="s2">"bin"</span><span class="w"> </span>directory<span class="w"> </span>--<span class="w"> </span><span class="k">for</span><span class="w"> </span>example,<span class="w"> </span>/opt/linux_toolchain/bin<span class="o">}</span>
|
|
<span class="nv">MTI_GCC_PREFIX</span><span class="o">=</span>mips-mti-linux-gnu
|
|
<span class="nv">MTI_TOOLCHAIN</span><span class="o">=</span><span class="si">${</span><span class="nv">IMG_TOOLCHAIN_DIR</span><span class="si">}</span>/<span class="si">${</span><span class="nv">IMG_GCC_PREFIX</span><span class="si">}</span>
|
|
|
|
<span class="c1"># P5600 Build:</span>
|
|
|
|
make<span class="w"> </span><span class="nv">BINARY</span><span class="o">=</span><span class="m">32</span><span class="w"> </span><span class="nv">BINARY32</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">CC</span><span class="o">=</span><span class="nv">$MTI_TOOLCHAIN</span>-gcc<span class="w"> </span><span class="nv">AR</span><span class="o">=</span><span class="nv">$MTI_TOOLCHAIN</span>-ar<span class="w"> </span><span class="nv">FC</span><span class="o">=</span><span class="s2">"</span><span class="nv">$MTI_TOOLCHAIN</span><span class="s2">-gfortran -EL"</span><span class="w"> </span><span class="nv">RANLIB</span><span class="o">=</span><span class="nv">$MTI_TOOLCHAIN</span>-ranlib<span class="w"> </span><span class="nv">HOSTCC</span><span class="o">=</span>gcc<span class="w"> </span><span class="nv">CFLAGS</span><span class="o">=</span><span class="s2">"-EL"</span><span class="w"> </span><span class="nv">FFLAGS</span><span class="o">=</span><span class="nv">$CFLAGS</span><span class="w"> </span><span class="nv">LDFLAGS</span><span class="o">=</span><span class="nv">$CFLAGS</span><span class="w"> </span><span class="nv">TARGET</span><span class="o">=</span>P5600
|
|
</code></pre></div>
|
|
<h3 id="freebsd_1">FreeBSD</h3>
|
|
<p>You will need to install the following tools from the FreeBSD ports tree:</p>
|
|
<ul>
|
|
<li>lang/gcc</li>
|
|
<li>lang/perl5.12</li>
|
|
<li>ftp/curl</li>
|
|
<li>devel/gmake</li>
|
|
<li>devel/patch</li>
|
|
</ul>
|
|
<p>To compile run the command:
|
|
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>gmake<span class="w"> </span><span class="nv">CC</span><span class="o">=</span>gcc<span class="w"> </span><span class="nv">FC</span><span class="o">=</span>gfortran
|
|
</code></pre></div></p>
|
|
<h3 id="cortex-m">Cortex-M</h3>
|
|
<p>Cortex-M is a widely used microcontroller that is present in a variety of
|
|
industrial and consumer electronics. A common variant of the Cortex-M is the
|
|
<code>STM32F4xx</code> series. Here, we will give instructions for building for that
|
|
series.</p>
|
|
<p>First, install the embedded Arm GCC compiler from the Arm website. Then, create
|
|
the following <code>toolchain.cmake</code> file:</p>
|
|
<div class="highlight"><pre><span></span><code><span class="nb">set</span><span class="p">(</span><span class="s">CMAKE_SYSTEM_NAME</span><span class="w"> </span><span class="s">Generic</span><span class="p">)</span>
|
|
<span class="nb">set</span><span class="p">(</span><span class="s">CMAKE_SYSTEM_PROCESSOR</span><span class="w"> </span><span class="s">arm</span><span class="p">)</span>
|
|
|
|
<span class="nb">set</span><span class="p">(</span><span class="s">CMAKE_C_COMPILER</span><span class="w"> </span><span class="s2">"arm-none-eabi-gcc.exe"</span><span class="p">)</span>
|
|
<span class="nb">set</span><span class="p">(</span><span class="s">CMAKE_CXX_COMPILER</span><span class="w"> </span><span class="s2">"arm-none-eabi-g++.exe"</span><span class="p">)</span>
|
|
|
|
<span class="nb">set</span><span class="p">(</span><span class="s">CMAKE_EXE_LINKER_FLAGS</span><span class="w"> </span><span class="s2">"--specs=nosys.specs"</span><span class="w"> </span><span class="s">CACHE</span><span class="w"> </span><span class="s">INTERNAL</span><span class="w"> </span><span class="s2">""</span><span class="p">)</span>
|
|
|
|
<span class="nb">set</span><span class="p">(</span><span class="s">CMAKE_FIND_ROOT_PATH_MODE_PROGRAM</span><span class="w"> </span><span class="s">NEVER</span><span class="p">)</span>
|
|
<span class="nb">set</span><span class="p">(</span><span class="s">CMAKE_FIND_ROOT_PATH_MODE_LIBRARY</span><span class="w"> </span><span class="s">ONLY</span><span class="p">)</span>
|
|
<span class="nb">set</span><span class="p">(</span><span class="s">CMAKE_FIND_ROOT_PATH_MODE_INCLUDE</span><span class="w"> </span><span class="s">ONLY</span><span class="p">)</span>
|
|
<span class="nb">set</span><span class="p">(</span><span class="s">CMAKE_FIND_ROOT_PATH_MODE_PACKAGE</span><span class="w"> </span><span class="s">ONLY</span><span class="p">)</span>
|
|
</code></pre></div>
|
|
<p>Then build OpenBLAS with:
|
|
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>cmake<span class="w"> </span>..<span class="w"> </span>-G<span class="w"> </span>Ninja<span class="w"> </span>-DCMAKE_C_COMPILER<span class="o">=</span>arm-none-eabi-gcc<span class="w"> </span>-DCMAKE_TOOLCHAIN_FILE:PATH<span class="o">=</span><span class="s2">"toolchain.cmake"</span><span class="w"> </span>-DNOFORTRAN<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DTARGET<span class="o">=</span>ARMV5<span class="w"> </span>-DEMBEDDED<span class="o">=</span><span class="m">1</span>
|
|
</code></pre></div></p>
|
|
<p>In your embedded application, the following functions need to be provided for OpenBLAS to work correctly:
|
|
<div class="highlight"><pre><span></span><code><span class="kt">void</span><span class="w"> </span><span class="nf">free</span><span class="p">(</span><span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="n">ptr</span><span class="p">);</span>
|
|
<span class="kt">void</span><span class="o">*</span><span class="w"> </span><span class="nf">malloc</span><span class="p">(</span><span class="kt">size_t</span><span class="w"> </span><span class="n">size</span><span class="p">);</span>
|
|
</code></pre></div></p>
|
|
<div class="admonition note">
|
|
<p class="admonition-title">Note</p>
|
|
<p>If you are developing for an embedded platform, it is your responsibility
|
|
to make sure that the device has sufficient memory for <code>malloc</code> calls.
|
|
<a href="https://github.com/embeddedartistry/libmemory">Libmemory</a>
|
|
provides one implementation of <code>malloc</code> for embedded platforms.</p>
|
|
</div>
|
|
<div class="footnote">
|
|
<hr />
|
|
<ol>
|
|
<li id="fn:1">
|
|
<p>If the OpenBLAS DLLs are not linked correctly, you may see an error like
|
|
<em>"The application was unable to start correctly (0xc000007b)"</em>, which typically
|
|
indicates a mismatch between 32-bit and 64-bit libraries. <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="md-source-file">
|
|
|
|
|
|
<span class="md-source-file__fact">
|
|
<span class="md-icon" title="Last update">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg>
|
|
</span>
|
|
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">July 26, 2024</span>
|
|
</span>
|
|
|
|
|
|
|
|
|
|
<span class="md-source-file__fact">
|
|
<span class="md-icon" title="Created">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg>
|
|
</span>
|
|
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">August 4, 2023</span>
|
|
</span>
|
|
|
|
|
|
|
|
|
|
</aside>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</article>
|
|
</div>
|
|
|
|
|
|
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
</div>
|
|
|
|
</main>
|
|
|
|
<footer class="md-footer">
|
|
|
|
<div class="md-footer-meta md-typeset">
|
|
<div class="md-footer-meta__inner md-grid">
|
|
<div class="md-copyright">
|
|
|
|
<div class="md-copyright__highlight">
|
|
Copyright © 2012- OpenBLAS contributors
|
|
</div>
|
|
|
|
|
|
Made with
|
|
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
|
Material for MkDocs
|
|
</a>
|
|
|
|
</div>
|
|
|
|
<div class="md-social">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a href="https://github.com/OpenMathLib/OpenBLAS" target="_blank" rel="noopener" title="github.com" class="md-social__link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
|
|
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a href="https://github.com/OpenMathLib/OpenBLAS/LICENSE" target="_blank" rel="noopener" title="github.com" class="md-social__link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 10a3.04 3.04 0 0 1 3-3 3.04 3.04 0 0 1 3 3 3.04 3.04 0 0 1-3 3 3.04 3.04 0 0 1-3-3m3 9 4 1v-3.08A7.54 7.54 0 0 1 12 18a7.54 7.54 0 0 1-4-1.08V20m4-16a5.78 5.78 0 0 0-4.24 1.74A5.78 5.78 0 0 0 6 10a5.78 5.78 0 0 0 1.76 4.23A5.78 5.78 0 0 0 12 16a5.78 5.78 0 0 0 4.24-1.77A5.78 5.78 0 0 0 18 10a5.78 5.78 0 0 0-1.76-4.26A5.78 5.78 0 0 0 12 4m8 6a8 8 0 0 1-.57 2.8A7.8 7.8 0 0 1 18 15.28V23l-6-2-6 2v-7.72A7.9 7.9 0 0 1 4 10a7.68 7.68 0 0 1 2.33-5.64A7.73 7.73 0 0 1 12 2a7.73 7.73 0 0 1 5.67 2.36A7.68 7.68 0 0 1 20 10"/></svg>
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</div>
|
|
<div class="md-dialog" data-md-component="dialog">
|
|
<div class="md-dialog__inner md-typeset"></div>
|
|
</div>
|
|
|
|
|
|
<script id="__config" type="application/json">{"base": "..", "features": ["header.autohide"], "search": "../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
|
|
|
|
|
<script src="../assets/javascripts/bundle.83f73b43.min.js"></script>
|
|
|
|
|
|
</body>
|
|
</html> |