Skip to content

Commit 351c8be

Browse files
authored
Merge pull request #3 from itpplasma/library_path
Static linking and dependency management for libneo
2 parents 07e7469 + 1e46706 commit 351c8be

File tree

5 files changed

+68
-42
lines changed

5 files changed

+68
-42
lines changed

CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ endif()
5656
cmake_policy(SET CMP0074 NEW)
5757
find_package(HDF5 COMPONENTS C Fortran HL REQUIRED)
5858
find_package(Boost 1.74 REQUIRED)
59-
find_package(FFTW REQUIRED)
6059
find_package(GSL REQUIRED)
6160

6261
### NetCDF
@@ -90,9 +89,10 @@ add_link_options(${NETCDF_FLIBS})
9089

9190
include(ExternalProject)
9291
include(SetupCODE)
93-
include(SetupLIBNEO)
9492
include(SetupTriangle)
9593
include(SetupMFEM)
94+
include(Util)
95+
find_or_fetch(libneo)
9696

9797
### Project source files
9898
# SuiteSparse
@@ -157,7 +157,7 @@ add_library(mephit SHARED
157157
${MEPHIT_C_SRC_FILES}
158158
${MEPHIT_CPP_SRC_FILES}
159159
)
160-
add_dependencies(mephit LIBNEO MFEM TRIANGLE)
160+
add_dependencies(mephit MFEM TRIANGLE)
161161
target_include_directories(mephit PUBLIC
162162
${magfie_include_dir}
163163
${NETCDF_INCLUDES}
@@ -176,9 +176,9 @@ set(MEPHIT_LIBS
176176
LAPACK::LAPACK
177177
${FFTW_LIBRARIES}
178178
${triangle_lib}
179-
${magfie_lib}
180-
${neo_lib}
181-
${hdf5_tools_lib}
179+
LIBNEO::magfie
180+
LIBNEO::neo
181+
LIBNEO::hdf5_tools
182182
)
183183
target_link_libraries(mephit ${MEPHIT_LIBS})
184184
if(LEGACY_SUITESPARSE)

cmake/SetupCODE.cmake

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
if (DEFINED ENV{CODE})
22
message(STATUS "External libraries prebuilt in $CODE=" $ENV{CODE})
3-
set(LIBNEO_DIR $ENV{CODE}/libneo/build/ CACHE STRING "libneo directory")
4-
set(FGSL_DIR $ENV{CODE}/external/fgsl-1.6.0/ CACHE STRING "FGSL directory")
5-
set(TRIANGLE_DIR $ENV{CODE}/external/triangle/ CACHE STRING "TRIANGLE directory")
6-
set(MFEM_DIR $ENV{CODE}/external/mfem-4.7/build/ CACHE STRING "MFEM directory")
3+
if(EXISTS $ENV{CODE}/libneo/build/)
4+
set(LIBNEO_DIR $ENV{CODE}/libneo/build/ CACHE STRING "libneo directory")
5+
endif()
6+
if(EXISTS $ENV{CODE}/external/fgsl-1.6.0/)
7+
set(FGSL_DIR $ENV{CODE}/external/fgsl-1.6.0/ CACHE STRING "FGSL directory")
8+
endif()
9+
if(EXISTS $ENV{CODE}/external/triangle/)
10+
set(TRIANGLE_DIR $ENV{CODE}/external/triangle/ CACHE STRING "TRIANGLE directory")
11+
endif()
12+
if(EXISTS $ENV{CODE}/external/mfem-4.7/build/)
13+
set(MFEM_DIR $ENV{CODE}/external/mfem-4.7/build/ CACHE STRING "MFEM directory")
14+
endif()
715
else()
816
message(STATUS "Downloading and building external libraries")
917
endif()

cmake/SetupLIBNEO.cmake

Lines changed: 0 additions & 30 deletions
This file was deleted.

cmake/SetupTriangle.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ else()# Define Triangle repository
1717
BUILD_COMMAND /bin/bash ${CMAKE_SOURCE_DIR}/cmake/setup_triangle.sh <SOURCE_DIR>
1818
INSTALL_COMMAND ""
1919
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
20-
BUILD_BYPRODUCTS <SOURCE_DIR>/libtriangle${CMAKE_SHARED_LIBRARY_SUFFIX}
20+
BUILD_BYPRODUCTS <SOURCE_DIR>/libtriangle.so
2121
)
2222
set(TRIANGLE_DIR ${CMAKE_BINARY_DIR}/triangle/src/TRIANGLE)
2323
endif()
2424

2525
set(TRIANGLE_INCLUDE_DIR ${TRIANGLE_DIR} CACHE STRING "Path to triangle include")
2626
set(TRIANGLE_LIB_DIR ${TRIANGLE_DIR} CACHE STRING "Path to triangle lib")
2727

28-
set(triangle_lib ${TRIANGLE_LIB_DIR}/libtriangle${CMAKE_SHARED_LIBRARY_SUFFIX} CACHE STRING "TRIANGLE lib")
28+
set(triangle_lib ${TRIANGLE_LIB_DIR}/libtriangle.so CACHE STRING "TRIANGLE lib")

cmake/Util.cmake

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
include(FetchContent)
2+
3+
function(find_or_fetch DEPENDENCY)
4+
if(DEFINED ENV{CODE} AND EXISTS $ENV{CODE}/${DEPENDENCY})
5+
set(${DEPENDENCY}_SOURCE_DIR $ENV{CODE}/${DEPENDENCY})
6+
message(STATUS "Using ${DEPENDENCY} in $ENV{CODE}/${DEPENDENCY}")
7+
else()
8+
set(REPO_URL https://github.com/itpplasma/${DEPENDENCY}.git)
9+
get_branch_or_main(${REPO_URL} REMOTE_BRANCH)
10+
message(STATUS "Using ${DEPENDENCY} branch ${REMOTE_BRANCH} from ${REPO_URL}")
11+
12+
FetchContent_Declare(
13+
${DEPENDENCY}
14+
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
15+
GIT_REPOSITORY ${REPO_URL}
16+
GIT_TAG ${REMOTE_BRANCH}
17+
)
18+
FetchContent_Populate(${DEPENDENCY})
19+
endif()
20+
21+
add_subdirectory(${${DEPENDENCY}_SOURCE_DIR}
22+
${CMAKE_CURRENT_BINARY_DIR}/${DEPENDENCY}
23+
EXCLUDE_FROM_ALL
24+
)
25+
endfunction()
26+
27+
28+
function(get_branch_or_main REPO_URL REMOTE_BRANCH)
29+
execute_process(
30+
COMMAND git rev-parse --abbrev-ref HEAD
31+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
32+
OUTPUT_VARIABLE BRANCH
33+
OUTPUT_STRIP_TRAILING_WHITESPACE
34+
)
35+
36+
execute_process(
37+
COMMAND git ls-remote --heads ${REPO_URL} ${BRANCH}
38+
OUTPUT_VARIABLE BRANCH_EXISTS
39+
ERROR_VARIABLE GIT_ERROR
40+
OUTPUT_STRIP_TRAILING_WHITESPACE
41+
)
42+
43+
if(BRANCH_EXISTS)
44+
set(${REMOTE_BRANCH} ${BRANCH} PARENT_SCOPE)
45+
else()
46+
set(${REMOTE_BRANCH} "main" PARENT_SCOPE)
47+
endif()
48+
endfunction()

0 commit comments

Comments
 (0)