Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 4b716bac authored by Mathieu Faverge's avatar Mathieu Faverge
Browse files

Merge branch 'cmake/modern' into 'master'

Modern CMake

See merge request solverstack/hqr!16
parents 0c84c60d 5dfcd18a
No related branches found
No related tags found
No related merge requests found
### ###
# #
# @copyright 2017-2019 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, # @copyright 2017-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
# Univ. Bordeaux. All rights reserved. # Univ. Bordeaux. All rights reserved.
# #
# @version 0.1.0 # @version 0.1.0
# @author Mathieu Faverge # @author Mathieu Faverge
# @author Florent Pruvost
# @date 2017-04-26 # @date 2017-04-26
# #
### ###
...@@ -12,7 +13,7 @@ cmake_minimum_required (VERSION 3.0) ...@@ -12,7 +13,7 @@ cmake_minimum_required (VERSION 3.0)
project (HQR C) project (HQR C)
# Check if compiled independently or within another project # Check if compiled independently or within another project
if ( ${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) if ( ${HQR_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
set( BUILD_SUBPROJECT OFF ) set( BUILD_SUBPROJECT OFF )
else() else()
set( BUILD_SUBPROJECT ON ) set( BUILD_SUBPROJECT ON )
...@@ -59,10 +60,6 @@ int main(void) { ...@@ -59,10 +60,6 @@ int main(void) {
HAVE_FALLTHROUGH HAVE_FALLTHROUGH
FAIL_REGEX ".*fallthrough.*" ) FAIL_REGEX ".*fallthrough.*" )
if ( HAVE_FALLTHROUGH )
add_definitions( -DLIBHQR_HAVE_FALLTHROUGH )
endif()
### Misc options ### Misc options
if ( NOT BUILD_SUBPROJECT ) if ( NOT BUILD_SUBPROJECT )
option(BUILD_SHARED_LIBS option(BUILD_SHARED_LIBS
...@@ -72,44 +69,8 @@ if ( NOT BUILD_SUBPROJECT ) ...@@ -72,44 +69,8 @@ if ( NOT BUILD_SUBPROJECT )
endif(NOT CMAKE_BUILD_TYPE) endif(NOT CMAKE_BUILD_TYPE)
endif() endif()
set(hdrs # The compiled library code is here
include/libhqr.h add_subdirectory(src)
include/libhqr_internal.h
include/libhqr_queue.h
)
set(srcs
# Low level tree functions
src/low_flat.c
src/low_binary.c
src/low_fibonacci.c
src/low_greedy.c
src/low_greedy1p.c
src/low_adaptiv.c
# High level tree functions
src/high_flat.c
src/high_binary.c
src/high_fibonacci.c
src/high_greedy.c
# Direct access tree functions
src/systolic.c
src/svd.c
src/hqr.c
src/tphqr.c
src/tshqr.c
src/mtxtree.c
# Others
src/check.c
src/gendot.c
src/gensvg.c
src/print.c
src/queue.c
)
include_directories(include)
add_library(hqr ${srcs})
set_property(TARGET hqr PROPERTY INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
target_link_libraries( hqr m )
############################################################################### ###############################################################################
# Executables and Tests # # Executables and Tests #
...@@ -119,24 +80,6 @@ include(CTest) ...@@ -119,24 +80,6 @@ include(CTest)
add_subdirectory(testings) add_subdirectory(testings)
###############################################################################
# Installation
#
install(FILES
include/libhqr.h
DESTINATION include )
install(TARGETS hqr
RUNTIME DESTINATION bin
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib)
###############################################################################
# Config files (pkg_config, hqr_env.sh)
#
generate_hqr_pkgconfig_file()
generate_env_file()
#-- Add a custom target to generate tags #-- Add a custom target to generate tags
add_custom_target (tags add_custom_target (tags
COMMAND "git ls-files | xargs etags" ) COMMAND "git ls-files | xargs etags" )
### ###
# #
# @copyright (c) 2009-2014 The University of Tennessee and The University # @copyright (c) 2012-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
# of Tennessee Research Foundation.
# All rights reserved.
# @copyright (c) 2012-2017 Inria. All rights reserved.
# @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
# #
### ###
# #
# @file GenPkgConfig.cmake # @file GenHQRPkgConfig.cmake
# #
# @project MORSE # @project MORSE
# MORSE is a software package provided by: # MORSE is a software package provided by:
...@@ -18,61 +14,13 @@ ...@@ -18,61 +14,13 @@
# Univ. of California Berkeley, # Univ. of California Berkeley,
# Univ. of Colorado Denver. # Univ. of Colorado Denver.
# #
# @version 0.9.1 # @version 0.1.0
# @author Cedric Castagnede
# @author Emmanuel Agullo
# @author Mathieu Faverge # @author Mathieu Faverge
# @author Florent Pruvost # @author Florent Pruvost
# @date 10-11-2014 # @date 10-11-2014
# #
### ###
###
#
# CONVERT_LIBSTYLE_TO_PKGCONFIG: convert a libraries list to follow the pkg-config style
# used in CLEAN_LIB_LIST
#
###
# macro(CONVERT_LIBSTYLE_TO_PKGCONFIG _liblist)
# set(${_liblist}_CPY "${${_liblist}}")
# set(${_liblist} "")
# foreach(_dep ${${_liblist}_CPY})
# if (${_dep} MATCHES "^/")
# get_filename_component(dep_libname ${_dep} NAME)
# get_filename_component(dep_libdir ${_dep} DIRECTORY)
# string(REPLACE "lib" "" dep_libname "${dep_libname}")
# string(REPLACE ".so" "" dep_libname "${dep_libname}")
# string(REPLACE ".a" "" dep_libname "${dep_libname}")
# string(REPLACE ".dylib" "" dep_libname "${dep_libname}")
# string(REPLACE ".dll" "" dep_libname "${dep_libname}")
# list(APPEND ${_liblist} -L${dep_libdir} -l${dep_libname})
# elseif(NOT ${_dep} MATCHES "^-")
# list(APPEND ${_liblist} "-l${_dep}")
# else()
# list(APPEND ${_liblist} ${_dep})
# endif()
# endforeach()
# endmacro(CONVERT_LIBSTYLE_TO_PKGCONFIG)
###
#
# CLEAN_LIB_LIST: clean libraries lists to follow the pkg-config style
# used in GENERATE_PKGCONFIG_FILE
#
###
#macro(CLEAN_LIB_LIST _package)
# list(REMOVE_DUPLICATES ${_package}_PKGCONFIG_LIBS)
# list(REMOVE_DUPLICATES ${_package}_PKGCONFIG_LIBS_PRIVATE)
# list(REMOVE_DUPLICATES ${_package}_PKGCONFIG_REQUIRED)
# list(REMOVE_DUPLICATES ${_package}_PKGCONFIG_REQUIRED_PRIVATE)
# convert_libstyle_to_pkgconfig(${_package}_PKGCONFIG_LIBS)
# convert_libstyle_to_pkgconfig(${_package}_PKGCONFIG_LIBS_PRIVATE)
# string(REPLACE ";" " " ${_package}_PKGCONFIG_LIBS "${${_package}_PKGCONFIG_LIBS}")
# string(REPLACE ";" " " ${_package}_PKGCONFIG_LIBS_PRIVATE "${${_package}_PKGCONFIG_LIBS_PRIVATE}")
# string(REPLACE ";" " " ${_package}_PKGCONFIG_REQUIRED "${${_package}_PKGCONFIG_REQUIRED}")
# string(REPLACE ";" " " ${_package}_PKGCONFIG_REQUIRED_PRIVATE "${${_package}_PKGCONFIG_REQUIRED_PRIVATE}")
#endmacro(CLEAN_LIB_LIST)
### ###
# #
# GENERATE_PKGCONFIG_FILE: generate files hqr.pc # GENERATE_PKGCONFIG_FILE: generate files hqr.pc
...@@ -89,7 +37,7 @@ macro(GENERATE_HQR_PKGCONFIG_FILE) ...@@ -89,7 +37,7 @@ macro(GENERATE_HQR_PKGCONFIG_FILE)
set(_output_hqr_file "${CMAKE_BINARY_DIR}/hqr.pc") set(_output_hqr_file "${CMAKE_BINARY_DIR}/hqr.pc")
configure_file( configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/lib/pkgconfig/hqr.pc.in" "${HQR_SOURCE_DIR}/lib/pkgconfig/hqr.pc.in"
"${_output_hqr_file}" "${_output_hqr_file}"
@ONLY @ONLY
) )
...@@ -110,7 +58,7 @@ macro(generate_env_file) ...@@ -110,7 +58,7 @@ macro(generate_env_file)
# Create .sh file # Create .sh file
# --------------- # ---------------
configure_file( configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/hqr_env.sh.in" "${HQR_SOURCE_DIR}/hqr_env.sh.in"
"${CMAKE_BINARY_DIR}/bin/hqr_env.sh" @ONLY) "${CMAKE_BINARY_DIR}/bin/hqr_env.sh" @ONLY)
# installation # installation
......
###
#
# @copyright 2017-2020 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
# Univ. Bordeaux. All rights reserved.
#
# @version 0.1.0
# @author Mathieu Faverge
# @author Florent Pruvost
# @date 2020-12-14
#
###
# Note that headers are optional, and do not affect add_library, but they will not
# show up in IDEs unless they are listed in add_library.
set(HEADER_LIST
${HQR_SOURCE_DIR}/include/libhqr.h
${HQR_SOURCE_DIR}/include/libhqr_internal.h
${HQR_SOURCE_DIR}/include/libhqr_queue.h
)
set(SOURCE_LIST
# Low level tree functions
low_flat.c
low_binary.c
low_fibonacci.c
low_greedy.c
low_greedy1p.c
low_adaptiv.c
# High level tree functions
high_flat.c
high_binary.c
high_fibonacci.c
high_greedy.c
# Direct access tree functions
systolic.c
svd.c
hqr.c
tphqr.c
tshqr.c
mtxtree.c
# Others
check.c
gendot.c
gensvg.c
print.c
queue.c
)
# Make an automatic library - will be static or dynamic based on user setting
add_library(hqr ${SOURCE_LIST} ${HEADER_LIST})
set_target_properties(hqr PROPERTIES VERSION ${HQR_VERSION})
# We need this directory, to build.
target_include_directories(hqr PUBLIC
$<BUILD_INTERFACE:${HQR_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
# Users of our library will need the header defining the API
set_target_properties(hqr PROPERTIES PUBLIC_HEADER ${HQR_SOURCE_DIR}/include/libhqr.h)
# Depends on m at link
target_link_libraries(hqr PRIVATE m)
# Add definitions
if ( HAVE_FALLTHROUGH )
target_compile_definitions(hqr PRIVATE LIBHQR_HAVE_FALLTHROUGH)
endif()
# Target export
install(EXPORT hqrTargets
FILE HQRTargets.cmake
NAMESPACE HQR::
DESTINATION lib/cmake/hqr)
# Install executables, headers, lib, targets file
install(TARGETS hqr
EXPORT hqrTargets
RUNTIME DESTINATION bin
PUBLIC_HEADER DESTINATION include
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib)
# see https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html
include(CMakePackageConfigHelpers)
set(BIN_INSTALL_DIR "bin/" CACHE STRING "where to install executables relative to prefix" )
set(INC_INSTALL_DIR "include/" CACHE STRING "where to install headers relative to prefix" )
set(LIB_INSTALL_DIR "lib/" CACHE STRING "where to install libraries relative to prefix" )
configure_package_config_file(HQRConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/HQRConfig.cmake
INSTALL_DESTINATION ${LIB_INSTALL_DIR}/cmake/hqr
PATH_VARS BIN_INSTALL_DIR INC_INSTALL_DIR LIB_INSTALL_DIR)
write_basic_package_version_file(HQRConfigVersion.cmake
VERSION ${HQR_VERSION}
COMPATIBILITY AnyNewerVersion)
# Install config files
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/HQRConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/HQRConfigVersion.cmake
DESTINATION ${LIB_INSTALL_DIR}/cmake/hqr)
# Config files (pkg_config, hqr_env.sh)
generate_hqr_pkgconfig_file()
generate_env_file()
set(HQR_VERSION @HQR_VERSION@)
@PACKAGE_INIT@
set_and_check(HQR_BIN_DIR "@PACKAGE_BIN_INSTALL_DIR@")
set_and_check(HQR_INC_DIR "@PACKAGE_INC_INSTALL_DIR@")
set_and_check(HQR_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@")
check_required_components(HQR)
# Add the targets file
include("${CMAKE_CURRENT_LIST_DIR}/HQRTargets.cmake")
...@@ -9,8 +9,6 @@ ...@@ -9,8 +9,6 @@
# #
### ###
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
if ( BUILD_SUBPROJECT ) if ( BUILD_SUBPROJECT )
set( HQR_INSTALL_DIR bin/hqr ) set( HQR_INSTALL_DIR bin/hqr )
else() else()
...@@ -32,7 +30,7 @@ foreach (_file ${TESTINGS}) ...@@ -32,7 +30,7 @@ foreach (_file ${TESTINGS})
get_filename_component(_name_we ${_file} NAME_WE) get_filename_component(_name_we ${_file} NAME_WE)
add_executable(${_name_we} add_executable(${_name_we}
${_file} common.c) ${_file} common.c)
target_link_libraries(${_name_we} hqr) target_link_libraries(${_name_we} PRIVATE hqr)
install( install(
TARGETS ${_name_we} TARGETS ${_name_we}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment