Skip to content

Commit 7777777

Browse files
authored
CMake: Improve building without hunter (#601)
Signed-off-by: Garrett Brown <[email protected]>
1 parent 03fd9bd commit 7777777

File tree

4 files changed

+154
-2
lines changed

4 files changed

+154
-2
lines changed

cmake/dependencies.cmake

+23-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# hunter dependencies
22
# https://docs.hunter.sh/en/latest/packages/
33

4+
# Append local modules path if Hunter is not enabled
5+
if (NOT HUNTER_ENABLED)
6+
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules)
7+
endif()
8+
49
if (TESTING)
510
# https://docs.hunter.sh/en/latest/packages/pkg/GTest.html
611
hunter_add_package(GTest)
@@ -41,7 +46,12 @@ find_package(Boost.DI CONFIG REQUIRED)
4146

4247
# https://docs.hunter.sh/en/latest/packages/pkg/leveldb.html
4348
hunter_add_package(leveldb)
44-
find_package(leveldb CONFIG REQUIRED)
49+
if (HUNTER_ENABLED)
50+
find_package(leveldb CONFIG REQUIRED)
51+
else()
52+
find_package(leveldb REQUIRED)
53+
include_directories(${LEVELDB_INCLUDE_DIRS})
54+
endif()
4555

4656
# https://github.com/soramitsu/libp2p
4757
hunter_add_package(libp2p)
@@ -58,7 +68,12 @@ find_package(fmt CONFIG REQUIRED)
5868

5969
# https://docs.hunter.sh/en/latest/packages/pkg/cppcodec.html
6070
hunter_add_package(cppcodec)
61-
find_package(cppcodec CONFIG REQUIRED)
71+
if (HUNTER_ENABLED)
72+
find_package(cppcodec CONFIG REQUIRED)
73+
else()
74+
find_package(cppcodec REQUIRED)
75+
include_directories(${CPPCODEC_INCLUDE_DIRS})
76+
endif()
6277

6378
# http://rapidjson.org
6479
hunter_add_package(RapidJSON)
@@ -73,3 +88,9 @@ find_package(libarchive CONFIG REQUIRED)
7388

7489
hunter_add_package(prometheus-cpp)
7590
find_package(prometheus-cpp CONFIG REQUIRED)
91+
92+
# Add filecoin_ffi target if building without git submodules
93+
if (NOT BUILD_INTERNAL_DEPS)
94+
find_package(filecoin_ffi REQUIRED)
95+
include_directories(${FILECOIN_FFI_INCLUDE_DIRS})
96+
endif()

cmake/modules/Findcppcodec.cmake

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#.rst:
2+
# Findcppcodec.cmake
3+
# ------------------
4+
# Try to find cppcodec
5+
#
6+
# This will define the following variables:
7+
#
8+
# CPPCODEC_FOUND - system has cppcodec
9+
# CPPCODEC_INCLUDE_DIRS - cppcodec include directories
10+
#
11+
12+
find_package(PkgConfig)
13+
if (PKG_CONFIG_FOUND)
14+
pkg_check_modules(PC_CPPCODEC cppcodec)
15+
endif()
16+
17+
if (PC_CPPCODEC_FOUND)
18+
set(CPPCODEC_FOUND "${PC_CPPCODEC_FOUND}")
19+
set(CPPCODEC_INCLUDE_DIRS "${PC_CPPCODEC_INCLUDEDIR}")
20+
endif()

cmake/modules/Findfilecoin_ffi.cmake

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#.rst:
2+
# Findfilecoin_ffi.cmake
3+
# -----------
4+
# Finds the Filecoin FFI library
5+
#
6+
# This will define the following variables:
7+
#
8+
# FILECOIN_FFI_FOUND - system has filecoin_ffi
9+
# FILECOIN_FFI_INCLUDE_DIRS - filecoin_ffi include directories
10+
# FILECOIN_FFI_LIBRARY - library needed to use filecoin_ffi
11+
#
12+
# and the following imported targets:
13+
#
14+
# filecoin_ffi - The filecoin_ffi library
15+
#
16+
17+
find_package(PkgConfig REQUIRED)
18+
19+
find_path(FILECOIN_FFI_INCLUDE_DIR
20+
NAMES filecoin-ffi/filcrypto.h
21+
HINTS "${FILECOIN_FFI_ROOT_DIR}" "$ENV{FILECOIN_FFI_ROOT_DIR}"
22+
PATH_SUFFIXES include
23+
)
24+
25+
find_library(FILECOIN_FFI_LIBRARY
26+
NAMES filcrypto
27+
HINTS "${FILECOIN_FFI_ROOT_DIR}" "$ENV{FILECOIN_FFI_ROOT_DIR}"
28+
PATH_SUFFIXES "${LIBRARY_PATH_PREFIX}"
29+
)
30+
message(FALAL_ERROR "${LIBRARY_PATH_PREFIX}")
31+
32+
pkg_check_modules(PKG_FILECOIN IMPORTED_TARGET filcrypto)
33+
34+
if (PKG_FILECOIN_FOUND)
35+
set(FILECOIN_FFI_FOUND "${PKG_FILECOIN_FOUND}")
36+
set(FILECOIN_FFI_INCLUDE_DIRS "${FILECOIN_FFI_INCLUDE_DIR}")
37+
set(FILECOIN_FFI_LIBRARIES "${FILECOIN_FFI_LIBRARY}")
38+
39+
add_library(filecoin_ffi
40+
STATIC
41+
IMPORTED
42+
GLOBAL
43+
)
44+
45+
set_target_properties(filecoin_ffi
46+
PROPERTIES
47+
INTERFACE_INCLUDE_DIRECTORIES "${FILECOIN_FFI_INCLUDE_DIR}"
48+
IMPORTED_LOCATION "${FILECOIN_FFI_LIBRARY}"
49+
)
50+
51+
target_link_libraries(filecoin_ffi
52+
INTERFACE PkgConfig::PKG_FILECOIN
53+
)
54+
endif()
55+
56+
mark_as_advanced(FILECOIN_FFI_INCLUDE_DIR)
57+
mark_as_advanced(FILECOIN_FFI_LIBRARY)

cmake/modules/Findleveldb.cmake

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#.rst:
2+
# Findleveldb.cmake
3+
# -----------
4+
# Finds the leveldb library
5+
#
6+
# This will define the following variables:
7+
#
8+
# LEVELDB_FOUND - system has leveldb
9+
# LEVELDB_INCLUDE_DIRS - leveldb include directories
10+
# LEVELDB_LIBRARIES - libraries needed to use leveldb
11+
#
12+
# and the following imported targets:
13+
#
14+
# leveldb::leveldb - The leveldb library
15+
#
16+
17+
include(FindPackageHandleStandardArgs)
18+
19+
find_path(
20+
LEVELDB_INCLUDE_DIR
21+
NAMES leveldb/db.h
22+
HINTS "${LEVELDB_ROOT_DIR}" "$ENV{LEVELDB_ROOT_DIR}"
23+
PATH_SUFFIXES include
24+
)
25+
26+
find_library(
27+
LEVELDB_LIBRARY
28+
NAMES leveldb
29+
HINTS "${LEVELDB_ROOT_DIR}" "$ENV{LEVELDB_ROOT_DIR}"
30+
PATH_SUFFIXES "${LIBRARY_PATH_PREFIX}"
31+
)
32+
33+
find_package_handle_standard_args(
34+
leveldb
35+
DEFAULT_MSG
36+
LEVELDB_INCLUDE_DIR
37+
LEVELDB_LIBRARY
38+
)
39+
40+
if (LEVELDB_FOUND)
41+
set(LEVELDB_INCLUDE_DIRS "${LEVELDB_INCLUDE_DIR}")
42+
set(LEVELDB_LIBRARIES "${LEVELDB_LIBRARY}")
43+
44+
if (NOT TARGET leveldb::leveldb)
45+
add_library(leveldb::leveldb UNKNOWN IMPORTED)
46+
set_target_properties(leveldb::leveldb PROPERTIES
47+
INTERFACE_INCLUDE_DIRECTORIES "${LEVELDB_INCLUDE_DIR}"
48+
IMPORTED_LOCATION "${LEVELDB_LIBRARY}"
49+
)
50+
endif()
51+
endif()
52+
53+
mark_as_advanced(LEVELDB_INCLUDE_DIR)
54+
mark_as_advanced(LEVELDB_LIBRARY)

0 commit comments

Comments
 (0)