From 6aac06587d289d7b734caecfc968df67a5d808c6 Mon Sep 17 00:00:00 2001 From: Sacha Refshauge Date: Thu, 17 Aug 2017 17:27:01 +1000 Subject: [PATCH] Fix typos and use CMake OpenMP support. --- CMakeLists.txt | 41 +++++++++++++++++++++++------------------ cmake/arch.cmake | 35 +++++++++-------------------------- cmake/system.cmake | 19 ++++++++++--------- 3 files changed, 42 insertions(+), 53 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bafeb9..db59f5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,14 +3,12 @@ ## cmake_minimum_required(VERSION 2.8.5) -project(OpenBLAS C) +project(OpenBLAS C ASM) set(OpenBLAS_MAJOR_VERSION 0) set(OpenBLAS_MINOR_VERSION 3) set(OpenBLAS_PATCH_VERSION 0.dev) set(OpenBLAS_VERSION "${OpenBLAS_MAJOR_VERSION}.${OpenBLAS_MINOR_VERSION}.${OpenBLAS_PATCH_VERSION}") -enable_language(ASM) - # Adhere to GNU filesystem layout conventions include(GNUInstallDirs) @@ -176,6 +174,11 @@ add_subdirectory(utest) if (USE_THREAD) # Add threading library to linker find_package(Threads) + if (THREADS_HAVE_PTHREAD_ARG) + set_property(TARGET ${OpenBLAS_LIBNAME} PROPERTY COMPILE_OPTIONS "-pthread") + set_property(TARGET ${OpenBLAS_LIBNAME} PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") + endif() + message("PTHREAD: ${CMAKE_THREAD_LIBS_INIT}") target_link_libraries(${OpenBLAS_LIBNAME} ${CMAKE_THREAD_LIBS_INIT}) endif() @@ -219,26 +222,28 @@ install(TARGETS ${OpenBLAS_LIBNAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) # Install include files - set (GENCONFIG_BIN ${CMAKE_BINARY_DIR}/gen_config_h${CMAKE_EXECUTABLE_SUFFIX}) +set (GENCONFIG_BIN ${CMAKE_BINARY_DIR}/gen_config_h${CMAKE_EXECUTABLE_SUFFIX}) - execute_process(COMMAND ${GENCONFIG_BIN} - ${CMAKE_CURRENT_SOURCE_DIR}/config.h - ${CMAKE_CURRENT_SOURCE_DIR}/openblas_config_template.h - OUTPUT_VARIABLE OPENBLAS_CONFIG_H_CONTENTS) +execute_process(COMMAND ${GENCONFIG_BIN} + ${CMAKE_CURRENT_SOURCE_DIR}/config.h + ${CMAKE_CURRENT_SOURCE_DIR}/openblas_config_template.h + OUTPUT_VARIABLE OPENBLAS_CONFIG_H_CONTENTS) - file(WRITE ${CMAKE_BINARY_DIR}/openblas_config.tmp "${OPENBLAS_CONFIG_H_CONTENTS}") - configure_file(${CMAKE_BINARY_DIR}/openblas_config.tmp ${CMAKE_BINARY_DIR}/openblas_config.h COPYONLY) +file(WRITE ${CMAKE_BINARY_DIR}/openblas_config.tmp "${OPENBLAS_CONFIG_H_CONTENTS}") +configure_file(${CMAKE_BINARY_DIR}/openblas_config.tmp ${CMAKE_BINARY_DIR}/openblas_config.h COPYONLY) - install (FILES ${CMAKE_BINARY_DIR}/openblas_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +install (FILES ${CMAKE_BINARY_DIR}/openblas_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - message(STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR}") +if(NOT NOFORTRAN) + message(STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR}") - file(WRITE ${CMAKE_BINARY_DIR}/f77blas.h "") - file(APPEND ${CMAKE_BINARY_DIR}/f77blas.h "#ifndef OPENBLAS_F77BLAS_H\n#define OPENBLAS_F77BLAS_H\n#include \"openblas_config.h\"\n") - file(READ ${CMAKE_CURRENT_SOURCE_DIR}/common_interface.h COMMON_INTERFACE_H_CONTENTS) - file(APPEND ${CMAKE_BINARY_DIR}/f77blas.h "${COMMON_INTERFACE_H_CONTENTS}") - file(APPEND ${CMAKE_BINARY_DIR}/f77blas.h "#endif") - install (FILES ${CMAKE_BINARY_DIR}/f77blas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + file(WRITE ${CMAKE_BINARY_DIR}/f77blas.h "") + file(APPEND ${CMAKE_BINARY_DIR}/f77blas.h "#ifndef OPENBLAS_F77BLAS_H\n#define OPENBLAS_F77BLAS_H\n#include \"openblas_config.h\"\n") + file(READ ${CMAKE_CURRENT_SOURCE_DIR}/common_interface.h COMMON_INTERFACE_H_CONTENTS) + file(APPEND ${CMAKE_BINARY_DIR}/f77blas.h "${COMMON_INTERFACE_H_CONTENTS}") + file(APPEND ${CMAKE_BINARY_DIR}/f77blas.h "#endif") + install (FILES ${CMAKE_BINARY_DIR}/f77blas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() if(NOT NO_CBLAS) message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR}") diff --git a/cmake/arch.cmake b/cmake/arch.cmake index 5b897d8..bc9a762 100644 --- a/cmake/arch.cmake +++ b/cmake/arch.cmake @@ -33,32 +33,15 @@ if (${CMAKE_C_COMPILER_ID} STREQUAL "Intel") endif () if (USE_OPENMP) - - if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID} STREQUAL "LSB") - set(CCOMMON_OPT "${CCOMMON_OPT} -fopenmp") - endif () - - if (${CMAKE_C_COMPILER_ID} STREQUAL "Clang") - message(WARNING "Clang doesn't support OpenMP yet.") - set(CCOMMON_OPT "${CCOMMON_OPT} -fopenmp") - endif () - - if (${CMAKE_C_COMPILER_ID} STREQUAL "Intel") - set(CCOMMON_OPT "${CCOMMON_OPT} -openmp") - endif () - - if (${CMAKE_C_COMPILER_ID} STREQUAL "PGI") - set(CCOMMON_OPT "${CCOMMON_OPT} -mp") - endif () - - if (${CMAKE_C_COMPILER_ID} STREQUAL "OPEN64") - set(CCOMMON_OPT "${CCOMMON_OPT} -mp") - set(CEXTRALIB "${CEXTRALIB} -lstdc++") - endif () - - if (${CMAKE_C_COMPILER_ID} STREQUAL "PATHSCALE") - set(CCOMMON_OPT "${CCOMMON_OPT} -mp") - endif () + # USE_SIMPLE_THREADED_LEVEL3 = 1 + # NO_AFFINITY = 1 + find_package(OpenMP) + if (OpenMP_FOUND) + set(CCOMMON_OPT "${CCOMMON_OPT} ${OpenMP_C_FLAGS} -DUSE_OPENMP") + set(FCOMMON_OPT "${FCOMMON_OPT} ${OpenMP_Fortran_FLAGS}") + elseif (UNIX) + set(USE_OPENMP 0) + endif() endif () diff --git a/cmake/system.cmake b/cmake/system.cmake index 8802237..e31e74a 100644 --- a/cmake/system.cmake +++ b/cmake/system.cmake @@ -27,7 +27,7 @@ if (DEFINED BINARY AND DEFINED TARGET AND BINARY EQUAL 32) endif () if (DEFINED TARGET) - message(STATUS "Targetting the ${TARGET} architecture.") + message(STATUS "Targeting the ${TARGET} architecture.") set(GETARCH_FLAGS "-DFORCE_${TARGET}") endif () @@ -92,6 +92,12 @@ elseif(NOT DEFINED USE_THREAD) set(USE_THREAD 1) endif () +# TODO: Fix. Isn't working. Was never working in CMake. +# Undefined reference to get_num_procs, blas_thread_shutdown, ... +if (UNIX) + set(USE_THREAD 0) +endif() + if (USE_THREAD) message(STATUS "Multi-threading enabled with ${NUM_THREADS} threads.") endif () @@ -166,6 +172,8 @@ if (NO_AVX2) endif () if (USE_THREAD) + # USE_SIMPLE_THREADED_LEVEL3 = 1 + # NO_AFFINITY = 1 set(CCOMMON_OPT "${CCOMMON_OPT} -DSMP_SERVER") if (${ARCH} STREQUAL "mips64") @@ -174,16 +182,9 @@ if (USE_THREAD) endif () endif () - if (USE_OPENMP) - # USE_SIMPLE_THREADED_LEVEL3 = 1 - # NO_AFFINITY = 1 - set(CCOMMON_OPT "${CCOMMON_OPT} -DUSE_OPENMP") - endif () - if (BIGNUMA) set(CCOMMON_OPT "${CCOMMON_OPT} -DBIGNUMA") endif () - endif () if (NO_WARMUP) @@ -298,7 +299,7 @@ set(LAPACK_FPFLAGS "${LAPACK_FPFLAGS} ${FPFLAGS}") #Disable -fopenmp for LAPACK Fortran codes on Windows. if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") - set(FILTER_FLAGS "-fopenmp;-mp;-openmp;-xopenmp=parralel") + set(FILTER_FLAGS "-fopenmp;-mp;-openmp;-xopenmp=parallel") foreach (FILTER_FLAG ${FILTER_FLAGS}) string(REPLACE ${FILTER_FLAG} "" LAPACK_FFLAGS ${LAPACK_FFLAGS}) string(REPLACE ${FILTER_FLAG} "" LAPACK_FPFLAGS ${LAPACK_FPFLAGS}) -- 2.7.4