Skip to content

Commit 8212472

Browse files
authored
Merge branch 'develop' into z14
2 parents 29416cb + 86a824c commit 8212472

File tree

236 files changed

+13076
-2269
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

236 files changed

+13076
-2269
lines changed

.travis.yml

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ dist: precise
44
sudo: true
55
language: c
66

7-
jobs:
7+
matrix:
88
include:
99
- &test-ubuntu
1010
os: linux
11-
stage: test
1211
compiler: gcc
1312
addons:
1413
apt:
@@ -59,7 +58,6 @@ jobs:
5958
- BTYPE="BINARY=32"
6059

6160
- os: linux
62-
stage: test
6361
compiler: gcc
6462
addons:
6563
apt:
@@ -80,13 +78,12 @@ jobs:
8078
# that don't require sudo.
8179
- &test-alpine
8280
os: linux
83-
stage: test
8481
dist: trusty
8582
sudo: true
8683
language: minimal
8784
before_install:
88-
- "wget 'https://raw.githubusercontent.com/alpinelinux/alpine-chroot-install/v0.6.0/alpine-chroot-install' \
89-
&& echo 'a827a4ba3d0817e7c88bae17fe34e50204983d1e alpine-chroot-install' | sha1sum -c || exit 1"
85+
- "wget 'https://raw.githubusercontent.com/alpinelinux/alpine-chroot-install/v0.9.0/alpine-chroot-install' \
86+
&& echo 'e5dfbbdc0c4b3363b99334510976c86bfa6cb251 alpine-chroot-install' | sha1sum -c || exit 1"
9087
- alpine() { /alpine/enter-chroot -u "$USER" "$@"; }
9188
install:
9289
- sudo sh alpine-chroot-install -p 'build-base gfortran perl linux-headers'
@@ -120,11 +117,10 @@ jobs:
120117
- <<: *test-alpine
121118
env:
122119
- TARGET_BOX=LINUX64_MUSL
123-
- BTYPE="BINARY=64 NO_AFFINITY=1 USE_OPENMP=0 NO_LAPACK=0 TARGET=core2"
120+
- BTYPE="BINARY=64 NO_AFFINITY=1 USE_OPENMP=0 NO_LAPACK=0 TARGET=CORE2"
124121

125122
- &test-cmake
126123
os: linux
127-
stage: test
128124
compiler: clang
129125
addons:
130126
apt:
@@ -153,8 +149,7 @@ jobs:
153149

154150
- &test-macos
155151
os: osx
156-
stage: test
157-
osx_image: xcode8
152+
osx_image: xcode10.1
158153
before_script:
159154
- COMMON_FLAGS="DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32"
160155
- brew update
@@ -168,6 +163,42 @@ jobs:
168163
env:
169164
- BTYPE="BINARY=32"
170165

166+
- &emulated-arm
167+
dist: trusty
168+
sudo: required
169+
services: docker
170+
env: IMAGE_ARCH=arm32 TARGET_ARCH=ARMV6 COMPILER=gcc
171+
name: "Emulated Build for ARMV6 with gcc"
172+
before_install: sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset
173+
script: |
174+
echo "FROM openblas/alpine:${IMAGE_ARCH}
175+
COPY . /tmp/openblas
176+
RUN mkdir /tmp/openblas/build && \
177+
cd /tmp/openblas/build && \
178+
CC=${COMPILER} cmake -D DYNAMIC_ARCH=OFF \
179+
-D TARGET=${TARGET_ARCH} \
180+
-D BUILD_SHARED_LIBS=ON \
181+
-D BUILD_WITHOUT_LAPACK=ON \
182+
-D BUILD_WITHOUT_CBLAS=ON \
183+
-D CMAKE_BUILD_TYPE=Release ../ && \
184+
cmake --build ." > Dockerfile
185+
docker build .
186+
- <<: *emulated-arm
187+
env: IMAGE_ARCH=arm32 TARGET_ARCH=ARMV6 COMPILER=clang
188+
name: "Emulated Build for ARMV6 with clang"
189+
- <<: *emulated-arm
190+
env: IMAGE_ARCH=arm64 TARGET_ARCH=ARMV8 COMPILER=gcc
191+
name: "Emulated Build for ARMV8 with gcc"
192+
- <<: *emulated-arm
193+
env: IMAGE_ARCH=arm64 TARGET_ARCH=ARMV8 COMPILER=clang
194+
name: "Emulated Build for ARMV8 with clang"
195+
196+
allow_failures:
197+
- env: IMAGE_ARCH=arm32 TARGET_ARCH=ARMV6 COMPILER=gcc
198+
- env: IMAGE_ARCH=arm32 TARGET_ARCH=ARMV6 COMPILER=clang
199+
- env: IMAGE_ARCH=arm64 TARGET_ARCH=ARMV8 COMPILER=gcc
200+
- env: IMAGE_ARCH=arm64 TARGET_ARCH=ARMV8 COMPILER=clang
201+
171202
# whitelist
172203
branches:
173204
only:

CMakeLists.txt

Lines changed: 117 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 2.8.5)
66
project(OpenBLAS C ASM)
77
set(OpenBLAS_MAJOR_VERSION 0)
88
set(OpenBLAS_MINOR_VERSION 3)
9-
set(OpenBLAS_PATCH_VERSION 3.dev)
9+
set(OpenBLAS_PATCH_VERSION 6.dev)
1010
set(OpenBLAS_VERSION "${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.${OpenBLAS_PATCH_VERSION}")
1111

1212
# Adhere to GNU filesystem layout conventions
@@ -15,16 +15,21 @@ include(GNUInstallDirs)
1515
include(CMakePackageConfigHelpers)
1616

1717

18-
set(OpenBLAS_LIBNAME openblas)
19-
2018
#######
2119
if(MSVC)
22-
option(BUILD_WITHOUT_LAPACK "Without LAPACK and LAPACKE (Only BLAS or CBLAS)" ON)
20+
option(BUILD_WITHOUT_LAPACK "Do not build LAPACK and LAPACKE (Only BLAS or CBLAS)" ON)
2321
endif()
24-
option(BUILD_WITHOUT_CBLAS "Without CBLAS" OFF)
25-
option(DYNAMIC_ARCH "Build with DYNAMIC_ARCH" OFF)
26-
option(DYNAMIC_OLDER "Support older cpus with DYNAMIC_ARCH" OFF)
27-
option(BUILD_RELAPACK "Build with ReLAPACK (recursive LAPACK" OFF)
22+
option(BUILD_WITHOUT_CBLAS "Do not build the C interface (CBLAS) to the BLAS functions" OFF)
23+
option(DYNAMIC_ARCH "Include support for multiple CPU targets, with automatic selection at runtime (x86/x86_64 only)" OFF)
24+
option(DYNAMIC_OLDER "Include specific support for older cpu models (Penryn,Dunnington,Atom,Nano,Opteron) with DYNAMIC_ARCH" OFF)
25+
option(BUILD_RELAPACK "Build with ReLAPACK (recursive implementation of several LAPACK functions on top of standard LAPACK)" OFF)
26+
27+
# Add a prefix or suffix to all exported symbol names in the shared library.
28+
# Avoids conflicts with other BLAS libraries, especially when using
29+
# 64 bit integer interfaces in OpenBLAS.
30+
31+
set(SYMBOLPREFIX "" CACHE STRING "Add a prefix to all exported symbol names in the shared library to avoid conflicts with other BLAS libraries" )
32+
set(SYMBOLSUFFIX "" CACHE STRING "Add a suffix to all exported symbol names in the shared library, e.g. _64 for INTERFACE64 builds" )
2833
#######
2934
if(BUILD_WITHOUT_LAPACK)
3035
set(NO_LAPACK 1)
@@ -37,12 +42,27 @@ endif()
3742

3843
#######
3944

45+
if(MSVC AND MSVC_STATIC_CRT)
46+
set(CompilerFlags
47+
CMAKE_CXX_FLAGS
48+
CMAKE_CXX_FLAGS_DEBUG
49+
CMAKE_CXX_FLAGS_RELEASE
50+
CMAKE_C_FLAGS
51+
CMAKE_C_FLAGS_DEBUG
52+
CMAKE_C_FLAGS_RELEASE
53+
)
54+
foreach(CompilerFlag ${CompilerFlags})
55+
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
56+
endforeach()
57+
endif()
4058

41-
message(WARNING "CMake support is experimental. This will not produce the same Makefiles that OpenBLAS ships with. Only x86 support is currently available.")
59+
message(WARNING "CMake support is experimental. It does not yet support all build options and may not produce the same Makefiles that OpenBLAS ships with.")
4260

4361
include("${PROJECT_SOURCE_DIR}/cmake/utils.cmake")
4462
include("${PROJECT_SOURCE_DIR}/cmake/system.cmake")
4563

64+
set(OpenBLAS_LIBNAME openblas${SUFFIX64_UNDERSCORE})
65+
4666
set(BLASDIRS interface driver/level2 driver/level3 driver/others)
4767

4868
if (NOT DYNAMIC_ARCH)
@@ -127,7 +147,7 @@ endif ()
127147

128148
# Only generate .def for dll on MSVC and always produce pdb files for debug and release
129149
if(MSVC)
130-
if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 3.4)
150+
if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_LESS 3.4)
131151
set(OpenBLAS_DEF_FILE "${PROJECT_BINARY_DIR}/openblas.def")
132152
endif()
133153
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi")
@@ -142,15 +162,9 @@ if (${DYNAMIC_ARCH})
142162
endforeach()
143163
endif ()
144164

145-
# Only build shared libs for MSVC
146-
if (MSVC)
147-
set(BUILD_SHARED_LIBS ON)
148-
endif()
149-
150-
151165
# add objects to the openblas lib
152166
add_library(${OpenBLAS_LIBNAME} ${LA_SOURCES} ${LAPACKE_SOURCES} ${RELA_SOURCES} ${TARGET_OBJS} ${OpenBLAS_DEF_FILE})
153-
target_include_directories(${OpenBLAS_LIBNAME} INTERFACE $<INSTALL_INTERFACE:include>)
167+
target_include_directories(${OpenBLAS_LIBNAME} INTERFACE $<INSTALL_INTERFACE:include/openblas${SUFFIX64}>)
154168

155169
# Android needs to explicitly link against libm
156170
if(ANDROID)
@@ -159,7 +173,7 @@ endif()
159173

160174
# Handle MSVC exports
161175
if(MSVC AND BUILD_SHARED_LIBS)
162-
if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 3.4)
176+
if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_LESS 3.4)
163177
include("${PROJECT_SOURCE_DIR}/cmake/export.cmake")
164178
else()
165179
# Creates verbose .def file (51KB vs 18KB)
@@ -210,15 +224,84 @@ set_target_properties(${OpenBLAS_LIBNAME} PROPERTIES
210224
SOVERSION ${OpenBLAS_MAJOR_VERSION}
211225
)
212226

227+
if (BUILD_SHARED_LIBS AND NOT ${SYMBOLPREFIX}${SYMBOLSUFIX} STREQUAL "")
228+
if (NOT DEFINED ARCH)
229+
set(ARCH_IN "x86_64")
230+
else()
231+
set(ARCH_IN ${ARCH})
232+
endif()
233+
234+
if (${CORE} STREQUAL "generic")
235+
set(ARCH_IN "GENERIC")
236+
endif ()
237+
238+
if (NOT DEFINED EXPRECISION)
239+
set(EXPRECISION_IN 0)
240+
else()
241+
set(EXPRECISION_IN ${EXPRECISION})
242+
endif()
243+
244+
if (NOT DEFINED NO_CBLAS)
245+
set(NO_CBLAS_IN 0)
246+
else()
247+
set(NO_CBLAS_IN ${NO_CBLAS})
248+
endif()
249+
250+
if (NOT DEFINED NO_LAPACK)
251+
set(NO_LAPACK_IN 0)
252+
else()
253+
set(NO_LAPACK_IN ${NO_LAPACK})
254+
endif()
255+
256+
if (NOT DEFINED NO_LAPACKE)
257+
set(NO_LAPACKE_IN 0)
258+
else()
259+
set(NO_LAPACKE_IN ${NO_LAPACKE})
260+
endif()
261+
262+
if (NOT DEFINED NEED2UNDERSCORES)
263+
set(NEED2UNDERSCORES_IN 0)
264+
else()
265+
set(NEED2UNDERSCORES_IN ${NEED2UNDERSCORES})
266+
endif()
267+
268+
if (NOT DEFINED ONLY_CBLAS)
269+
set(ONLY_CBLAS_IN 0)
270+
else()
271+
set(ONLY_CBLAS_IN ${ONLY_CBLAS})
272+
endif()
273+
274+
if (NOT DEFINED BU)
275+
set(BU _)
276+
endif()
277+
278+
if (NOT ${SYMBOLPREFIX} STREQUAL "")
279+
message(STATUS "adding prefix ${SYMBOLPREFIX} to names of exported symbols in ${OpenBLAS_LIBNAME}")
280+
endif()
281+
if (NOT ${SYMBOLSUFFIX} STREQUAL "")
282+
message(STATUS "adding suffix ${SYMBOLSUFFIX} to names of exported symbols in ${OpenBLAS_LIBNAME}")
283+
endif()
284+
add_custom_command(TARGET ${OpenBLAS_LIBNAME} POST_BUILD
285+
COMMAND perl ${PROJECT_SOURCE_DIR}/exports/gensymbol "objcopy" "${ARCH}" "${BU}" "${EXPRECISION_IN}" "${NO_CBLAS_IN}" "${NO_LAPACK_IN}" "${NO_LAPACKE_IN}" "${NEED2UNDERSCORES_IN}" "${ONLY_CBLAS_IN}" \"${SYMBOLPREFIX}\" \"${SYMBOLSUFFIX}\" "${BUILD_LAPACK_DEPRECATED}" > ${PROJECT_BINARY_DIR}/objcopy.def
286+
COMMAND objcopy -v --redefine-syms ${PROJECT_BINARY_DIR}/objcopy.def ${PROJECT_BINARY_DIR}/lib/lib${OpenBLAS_LIBNAME}.so
287+
COMMENT "renaming symbols"
288+
)
289+
endif()
290+
291+
213292
# Install project
214293
215294
# Install libraries
216295
install(TARGETS ${OpenBLAS_LIBNAME}
217-
EXPORT "OpenBLASTargets"
296+
EXPORT "OpenBLAS${SUFFIX64}Targets"
218297
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
219298
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
220299
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
221300
301+
# Install headers
302+
set(CMAKE_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}/openblas${SUFFIX64})
303+
set(CMAKE_INSTALL_FULL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
304+
222305
message(STATUS "Generating openblas_config.h in ${CMAKE_INSTALL_INCLUDEDIR}")
223306
224307
set(OPENBLAS_CONFIG_H ${CMAKE_BINARY_DIR}/openblas_config.h)
@@ -238,7 +321,7 @@ install (FILES ${OPENBLAS_CONFIG_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
238321
if(NOT NOFORTRAN)
239322
message(STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
240323

241-
set(F77BLAS_H ${CMAKE_BINARY_DIR}/f77blas.h)
324+
set(F77BLAS_H ${CMAKE_BINARY_DIR}/generated/f77blas.h)
242325
file(WRITE ${F77BLAS_H} "#ifndef OPENBLAS_F77BLAS_H\n")
243326
file(APPEND ${F77BLAS_H} "#define OPENBLAS_F77BLAS_H\n")
244327
file(APPEND ${F77BLAS_H} "#include \"openblas_config.h\"\n")
@@ -251,10 +334,11 @@ endif()
251334
if(NOT NO_CBLAS)
252335
message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR}")
253336

337+
set(CBLAS_H ${CMAKE_BINARY_DIR}/generated/cblas.h)
254338
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/cblas.h CBLAS_H_CONTENTS)
255339
string(REPLACE "common" "openblas_config" CBLAS_H_CONTENTS_NEW "${CBLAS_H_CONTENTS}")
256-
file(WRITE ${CMAKE_BINARY_DIR}/cblas.tmp "${CBLAS_H_CONTENTS_NEW}")
257-
install (FILES ${CMAKE_BINARY_DIR}/cblas.tmp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} RENAME cblas.h)
340+
file(WRITE ${CBLAS_H} "${CBLAS_H_CONTENTS_NEW}")
341+
install (FILES ${CBLAS_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
258342
endif()
259343

260344
if(NOT NO_LAPACKE)
@@ -266,29 +350,31 @@ if(NOT NO_LAPACKE)
266350
ADD_CUSTOM_TARGET(genlapacke
267351
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/lapack-netlib/LAPACKE/include/lapacke_mangling_with_flags.h.in "${CMAKE_BINARY_DIR}/lapacke_mangling.h"
268352
)
269-
install (FILES ${CMAKE_BINARY_DIR}/lapacke_mangling.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
353+
install (FILES ${CMAKE_BINARY_DIR}/lapacke_mangling.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/openblas${SUFFIX64})
270354
endif()
271355

272356
include(FindPkgConfig QUIET)
273357
if(PKG_CONFIG_FOUND)
274-
configure_file(${PROJECT_SOURCE_DIR}/cmake/openblas.pc.in ${PROJECT_BINARY_DIR}/openblas.pc @ONLY)
275-
install (FILES ${PROJECT_BINARY_DIR}/openblas.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/)
358+
configure_file(${PROJECT_SOURCE_DIR}/cmake/openblas.pc.in ${PROJECT_BINARY_DIR}/openblas${SUFFIX64}.pc @ONLY)
359+
install (FILES ${PROJECT_BINARY_DIR}/openblas${SUFFIX64}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/)
276360
endif()
277361

278362

279363
# GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share".
280364
set(PN OpenBLAS)
281-
set(CMAKECONFIG_INSTALL_DIR "share/cmake/${PN}")
365+
set(CMAKECONFIG_INSTALL_DIR "share/cmake/${PN}${SUFFIX64}")
282366
configure_package_config_file(cmake/${PN}Config.cmake.in
283-
"${CMAKE_CURRENT_BINARY_DIR}/${PN}Config.cmake"
367+
"${CMAKE_CURRENT_BINARY_DIR}/${PN}${SUFFIX64}Config.cmake"
284368
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR})
285369
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${PN}ConfigVersion.cmake
286370
VERSION ${${PN}_VERSION}
287371
COMPATIBILITY AnyNewerVersion)
288-
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PN}Config.cmake
289-
${CMAKE_CURRENT_BINARY_DIR}/${PN}ConfigVersion.cmake
372+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PN}${SUFFIX64}Config.cmake
373+
DESTINATION ${CMAKECONFIG_INSTALL_DIR})
374+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PN}ConfigVersion.cmake
375+
RENAME ${PN}${SUFFIX64}ConfigVersion.cmake
290376
DESTINATION ${CMAKECONFIG_INSTALL_DIR})
291-
install(EXPORT "${PN}Targets"
292-
NAMESPACE "${PN}::"
377+
install(EXPORT "${PN}${SUFFIX64}Targets"
378+
NAMESPACE "${PN}${SUFFIX64}::"
293379
DESTINATION ${CMAKECONFIG_INSTALL_DIR})
294380

0 commit comments

Comments
 (0)