Skip to content

Commit 3cd724e

Browse files
committed
Cmake: export bml target and allow super-build
1 parent 7d1d20c commit 3cd724e

File tree

13 files changed

+49
-26
lines changed

13 files changed

+49
-26
lines changed

CMakeLists.txt

+11-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 2.8.7)
1+
cmake_minimum_required(VERSION 3.10)
22

33
message(STATUS "CMake version ${CMAKE_VERSION}")
44

@@ -220,7 +220,7 @@ if(BML_OPENCL)
220220
include(FindOpenCL)
221221
endif()
222222

223-
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
223+
SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
224224

225225
set(BML_MAGMA FALSE CACHE BOOL "Whether to use MAGMA library")
226226
if(BML_MAGMA)
@@ -384,7 +384,7 @@ if(NOT (LAPACK_FOUND OR NOBLAS))
384384
endif()
385385
endif()
386386

387-
include(${CMAKE_SOURCE_DIR}/cmake/bmlCheckCFortranFunctionExists.cmake)
387+
include(${PROJECT_SOURCE_DIR}/cmake/bmlCheckCFortranFunctionExists.cmake)
388388
if(MAGMA_FOUND)
389389
set(CMAKE_REQUIRED_LIBRARIES
390390
${MAGMA_LIBRARIES})
@@ -491,7 +491,7 @@ set(BML_COMPLEX TRUE
491491
CACHE BOOL "Whether to build complex types")
492492

493493
if(BML_COMPLEX)
494-
try_compile(SUPPORTS_COMPLEX ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/cmake/test_complex.c
494+
try_compile(SUPPORTS_COMPLEX ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/test_complex.c
495495
OUTPUT_VARIABLE COMPLEX_OUTPUT
496496
)
497497
message(STATUS "Compile output: ${COMPLEX_OUTPUT}")
@@ -551,17 +551,17 @@ include(FindDoxygen)
551551
if(DOXYGEN_FOUND)
552552
if(BML_OLD)
553553
set(DOXYGEN_INPUT
554-
${CMAKE_SOURCE_DIR}/src-old
554+
${PROJECT_SOURCE_DIR}/src-old
555555
${CMAKE_BINARY_DIR}/src-old)
556556
else()
557557
set(DOXYGEN_INPUT
558-
${CMAKE_SOURCE_DIR}/src/C-interface
559-
${CMAKE_SOURCE_DIR}/src/Fortran-interface)
558+
${PROJECT_SOURCE_DIR}/src/C-interface
559+
${PROJECT_SOURCE_DIR}/src/Fortran-interface)
560560
endif()
561561
string(REPLACE ";" " " DOXYGEN_INPUT "${DOXYGEN_INPUT}")
562562
configure_file(documentation/Doxyfile.in Doxyfile)
563563
add_custom_target(docs
564-
COMMAND rm -rvf ${CMAKE_SOURCE_DIR}/docs/API/*
564+
COMMAND rm -rvf ${PROJECT_SOURCE_DIR}/docs/API/*
565565
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile)
566566
else()
567567
add_custom_target(docs)
@@ -597,6 +597,7 @@ find_program(GIT git)
597597
if(TAR AND GIT)
598598
execute_process(COMMAND ${GIT} status
599599
RESULT_VARIABLE IS_GIT_REPOSITORY
600+
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
600601
OUTPUT_QUIET
601602
ERROR_QUIET)
602603
if(NOT IS_GIT_REPOSITORY EQUAL 0)
@@ -609,7 +610,7 @@ if(TAR AND GIT)
609610
--prefix=bml-${PROJECT_VERSION}/
610611
--output=${CMAKE_BINARY_DIR}/bml-${PROJECT_VERSION}.tar.gz
611612
master
612-
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
613+
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
613614
endif()
614615
else()
615616
add_custom_target(dist)
@@ -619,7 +620,7 @@ include(FindPythonInterp)
619620
if(NOT PYTHONINTERP_FOUND)
620621
message(FATAL "Could not find Python interpreter")
621622
endif()
622-
configure_file(${CMAKE_SOURCE_DIR}/scripts/convert-template.in
623+
configure_file(${PROJECT_SOURCE_DIR}/scripts/convert-template.in
623624
${CMAKE_BINARY_DIR}/convert-template)
624625

625626
message(STATUS "When building executables with the bml library, please use the following link flags")

documentation/Doxyfile.in

+3-3
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,7 @@ LAYOUT_FILE =
687687
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
688688
# search path. See also \cite for info how to create references.
689689

690-
CITE_BIB_FILES = @CMAKE_SOURCE_DIR@/docs/references.bib
690+
CITE_BIB_FILES = @PROJECT_SOURCE_DIR@/docs/references.bib
691691

692692
#---------------------------------------------------------------------------
693693
# Configuration options related to warning and progress messages
@@ -809,7 +809,7 @@ EXCLUDE_SYMLINKS = NO
809809
# Note that the wildcards are matched against the file with absolute path, so to
810810
# exclude all test directories for example use the pattern */test/*
811811

812-
EXCLUDE_PATTERNS = @CMAKE_SOURCE_DIR@/src/*generic*.F90
812+
EXCLUDE_PATTERNS = @PROJECT_SOURCE_DIR@/src/*generic*.F90
813813

814814
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
815815
# (namespaces, classes, functions, etc.) that should be excluded from the
@@ -1042,7 +1042,7 @@ GENERATE_HTML = YES
10421042
# The default directory is: html.
10431043
# This tag requires that the tag GENERATE_HTML is set to YES.
10441044

1045-
HTML_OUTPUT = ${CMAKE_SOURCE_DIR}/docs/API
1045+
HTML_OUTPUT = ${PROJECT_SOURCE_DIR}/docs/API
10461046

10471047
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
10481048
# generated HTML page (for example: .htm, .php, .asp).

src/BMLConfig.cmakein

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
include(CMakeFindDependencyMacro)
2+
if(@OPENMP_FOUND@)
3+
find_dependency(OpenMP REQUIRED)
4+
endif()
5+
include("${CMAKE_CURRENT_LIST_DIR}/BML_Targets.cmake")

src/C-interface/dense/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ set(SOURCES-DENSE-TYPED
8080
bml_transpose_triangle_dense_typed.c
8181
bml_utilities_dense_typed.c)
8282

83-
include(${CMAKE_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
83+
include(${PROJECT_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
8484
bml_add_typed_library(bml-dense single_real "${SOURCES-DENSE-TYPED}")
8585
bml_add_typed_library(bml-dense double_real "${SOURCES-DENSE-TYPED}")
8686
bml_add_typed_library(bml-dense single_complex "${SOURCES-DENSE-TYPED}")

src/C-interface/ellblock/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ set(SOURCES-ELLBLOCK-TYPED
7474
bml_utilities_ellblock_typed.c
7575
)
7676

77-
include(${CMAKE_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
77+
include(${PROJECT_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
7878
bml_add_typed_library(bml-ellblock single_real "${SOURCES-ELLBLOCK-TYPED}")
7979
bml_add_typed_library(bml-ellblock double_real "${SOURCES-ELLBLOCK-TYPED}")
8080
bml_add_typed_library(bml-ellblock single_complex "${SOURCES-ELLBLOCK-TYPED}")

src/C-interface/ellpack/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ set(SOURCES-ELLPACK-TYPED
8181
bml_transpose_ellpack_typed.c
8282
bml_utilities_ellpack_typed.c)
8383

84-
include(${CMAKE_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
84+
include(${PROJECT_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
8585
bml_add_typed_library(bml-ellpack single_real "${SOURCES-ELLPACK-TYPED}")
8686
bml_add_typed_library(bml-ellpack double_real "${SOURCES-ELLPACK-TYPED}")
8787
bml_add_typed_library(bml-ellpack single_complex "${SOURCES-ELLPACK-TYPED}")

src/C-interface/ellsort/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ set(SOURCES-ELLSORT-TYPED
7575
bml_transpose_ellsort_typed.c
7676
bml_utilities_ellsort_typed.c)
7777

78-
include(${CMAKE_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
78+
include(${PROJECT_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
7979
bml_add_typed_library(bml-ellsort single_real "${SOURCES-ELLSORT-TYPED}")
8080
bml_add_typed_library(bml-ellsort double_real "${SOURCES-ELLSORT-TYPED}")
8181
bml_add_typed_library(bml-ellsort single_complex "${SOURCES-ELLSORT-TYPED}")

src/CMakeLists.txt

+18-1
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,31 @@ set_target_properties(bml
3232
PROPERTIES
3333
SOVERSION ${PROJECT_VERSION}
3434
POSITION_INDEPENDENT_CODE yes)
35+
target_include_directories(bml PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
36+
if(OPENMP_FOUND)
37+
target_link_libraries(bml PUBLIC OpenMP::OpenMP_C)
38+
endif()
39+
target_link_libraries(bml PRIVATE ${LINK_LIBRARIES})
3540

3641
add_library(bml_fortran
3742
$<TARGET_OBJECTS:bml-fortran>)
3843
set_target_properties(bml_fortran
3944
PROPERTIES
4045
SOVERSION ${PROJECT_VERSION}
4146
POSITION_INDEPENDENT_CODE yes)
47+
target_include_directories(bml_fortran PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/Fortran-interface>)
48+
target_link_libraries(bml_fortran PUBLIC bml)
49+
if(OPENMP_FOUND)
50+
target_link_libraries(bml_fortran PUBLIC OpenMP::OpenMP_Fortran)
51+
endif()
4252

43-
install(TARGETS bml bml_fortran
53+
install(TARGETS bml bml_fortran EXPORT BML_Targets
4454
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
4555
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
56+
install(EXPORT BML_Targets FILE BML_Targets.cmake NAMESPACE BML:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/BML)
57+
include(CMakePackageConfigHelpers)
58+
configure_file(BMLConfig.cmakein ${CMAKE_CURRENT_BINARY_DIR}/BMLConfig.cmake @ONLY)
59+
write_basic_package_version_file("BMLConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY ExactVersion)
60+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/BMLConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/BMLConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/BML)
61+
add_library(BML::bml ALIAS bml)
62+
add_library(BML::bml_fortran ALIAS bml_fortran)

src/Fortran-interface/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ set(FORTRAN-SOURCES-PRIVATE
3939
set(FORTRAN-SOURCES-TYPED
4040
bml_utilities_typed_m.F90)
4141

42-
include(${CMAKE_SOURCE_DIR}/cmake/bmlGetTypes.cmake)
42+
include(${PROJECT_SOURCE_DIR}/cmake/bmlGetTypes.cmake)
4343
foreach(i RANGE ${NUMBER_TYPES_MAX})
4444
get_Fortran_types(${i} MATRIX_TYPE PRECISION_NAME REAL_TYPE REAL_KIND REAL_NAME)
4545
foreach(S ${FORTRAN-SOURCES-TYPED})

src/internal-blas/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ install(FILES ${HEADERS-C} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
66
set(SOURCES-INTERNAL-BLAS
77
bml_gemm.c)
88

9-
include(${CMAKE_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
9+
include(${PROJECT_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
1010
bml_add_typed_library(bml-internal-blas single_real "${SOURCES-INTERNAL-BLAS}")
1111
bml_add_typed_library(bml-internal-blas double_real "${SOURCES-INTERNAL-BLAS}")
1212
bml_add_typed_library(bml-internal-blas single_complex "${SOURCES-INTERNAL-BLAS}")

test-getter/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
project(ptr C Fortran)
22
cmake_minimum_required(VERSION 3.0)
33

4-
include_directories(${CMAKE_SOURCE_DIR}/../install/include)
5-
link_directories(${CMAKE_SOURCE_DIR}/../install/lib64)
4+
include_directories(${PROJECT_SOURCE_DIR}/../install/include)
5+
link_directories(${PROJECT_SOURCE_DIR}/../install/lib64)
66

77
add_executable(ptr-F ptr.F90)
88
target_link_libraries(ptr-F bml m)

tests/C-tests/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
include_directories(${CMAKE_SOURCE_DIR}/src/C-interface)
1+
include_directories(${PROJECT_SOURCE_DIR}/src/C-interface)
22

33
set(SOURCES_TYPED
44
add_matrix_typed.c
@@ -30,7 +30,7 @@ set(SOURCES_TYPED
3030
trace_matrix_typed.c
3131
transpose_matrix_typed.c)
3232

33-
include(${CMAKE_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
33+
include(${PROJECT_SOURCE_DIR}/cmake/bmlAddTypedLibrary.cmake)
3434
bml_add_typed_library(bmltests single_real "${SOURCES_TYPED}")
3535
bml_add_typed_library(bmltests double_real "${SOURCES_TYPED}")
3636
bml_add_typed_library(bmltests single_complex "${SOURCES_TYPED}")

tests/Fortran-tests/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
include_directories(${BML_INCLUDEDIR})
22
include_directories(${CMAKE_BINARY_DIR}/src/Fortran-interface)
3-
include(${CMAKE_SOURCE_DIR}/cmake/bmlGetTypes.cmake)
3+
include(${PROJECT_SOURCE_DIR}/cmake/bmlGetTypes.cmake)
44

55
# Adding the low-level source for each test
66
set(FORTRAN-SOURCES-TYPED
@@ -82,7 +82,7 @@ endforeach()
8282

8383
# Setting link flags
8484
#set(FORTRAN_TEST_LINK_FLAGS
85-
#-L${CMAKE_SOURCE_DIR}/build/src -lbml_fortran -lbml
85+
#-L${PROJECT_SOURCE_DIR}/build/src -lbml_fortran -lbml
8686
#${OpenMP_Fortran_FLAGS}
8787
#${BLAS_LIBRARIES}
8888
#${LINK_LIBRARIES}

0 commit comments

Comments
 (0)