-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
158 lines (128 loc) · 5.21 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
cmake_minimum_required(VERSION 3.9)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
set(CMAKE_CXX_FLAGS "-Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -O2 -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
project(
cpp-zarr
VERSION 1.4.0
LANGUAGES CXX)
set(CBLOSC_VER "c-blosc-1.21.6")
set(CBLOSC2_VER "c-blosc2-2.15.2")
# Set the RPATH to $ORIGIN when installing if applicable
set(CMAKE_INSTALL_RPATH $ORIGIN)
# OpenMP is Required
find_package(OpenMP REQUIRED)
if (UNIX)
execute_process(
COMMAND rm -rf libuuid-1.0.3
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dependencies
)
execute_process(
COMMAND tar -xf libuuid-1.0.3.tar.gz
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dependencies
)
include(ExternalProject)
# Set the path to your Makefile.am
set(UUID_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/libuuid-1.0.3/")
# Build the UUID library using Autotools
ExternalProject_Add(uuid_external
SOURCE_DIR ${UUID_SOURCE_DIR}
CONFIGURE_COMMAND ${UUID_SOURCE_DIR}/configure --with-pic
BUILD_COMMAND make
INSTALL_COMMAND ""
BUILD_IN_SOURCE 1
)
# Specify the include directories and link the UUID library
ExternalProject_Get_Property(uuid_external source_dir)
ExternalProject_Get_Property(uuid_external binary_dir)
#target_include_directories(cppZarr_shared PRIVATE ${source_dir}/include)
#target_link_libraries(cppZarr_shared PRIVATE ${binary_dir}/.libs/libuuid.a)
endif()
# Add c-blosc
set(CBLOSC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/${CBLOSC_VER}")
set(BUILD_SHARED OFF CACHE BOOL "" FORCE)
set(BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(BUILD_BENCHMARKS OFF CACHE BOOL "" FORCE)
set(BUILD_FUZZERS OFF CACHE BOOL "" FORCE)
add_subdirectory(${CBLOSC_DIR})
set_property(TARGET blosc_static PROPERTY POSITION_INDEPENDENT_CODE ON)
set(CBLOSC2_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/${CBLOSC2_VER}")
set(BUILD_SHARED OFF CACHE BOOL "" FORCE)
set(BUILD_BENCHMARKS OFF CACHE BOOL "" FORCE)
set(BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(BUILD_FUZZERS OFF CACHE BOOL "" FORCE)
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory(${CBLOSC2_DIR})
set_property(TARGET blosc2_static PROPERTY POSITION_INDEPENDENT_CODE ON)
set(JSON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/json-3.11.2")
add_subdirectory(${JSON_DIR})
set(SKIP_INSTALL_ALL ON CACHE BOOL "" FORCE)
set(ZLIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/zlib-1.2.8")
add_subdirectory(${ZLIB_DIR})
set_property(TARGET zlibstaticCPPZARR PROPERTY POSITION_INDEPENDENT_CODE ON)
set(CBLOSC_INCLUDE_DIR "${CBLOSC_DIR}/blosc")
set(CBLOSC2_INCLUDE_DIR "${CBLOSC2_DIR}/include")
set(JSON_INCLUDE_DIR "${JSON_DIR}/include")
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
add_library(cppZarr_shared SHARED ${SRC_DIR}/zarr.cpp ${SRC_DIR}/helperfunctions.cpp ${SRC_DIR}/parallelreadzarr.cpp ${SRC_DIR}/parallelwritezarr.cpp)
set_target_properties(cppZarr_shared PROPERTIES OUTPUT_NAME cppZarr)
add_dependencies(cppZarr_shared blosc_static)
add_dependencies(cppZarr_shared blosc2_static)
add_dependencies(cppZarr_shared zlibstaticCPPZARR)
if(UNIX)
add_dependencies(cppZarr_shared uuid_external)
endif()
#add_library(cppZarrStatic STATIC ${SRC_DIR}/zarr.cpp ${SRC_DIR}/helperfunctions.cpp ${SRC_DIR}/parallelreadzarr.cpp ${SRC_DIR}/parallelwritezarr.cpp)
#set_property(TARGET cppZarr_shared PROPERTY POSITION_INDEPENDENT_CODE ON)
set_target_properties(cppZarr_shared PROPERTIES PUBLIC_HEADER "${SRC_DIR}/zarr.h;${SRC_DIR}/helperfunctions.h;${SRC_DIR}/parallelreadzarr.h;${SRC_DIR}/parallelwritezarr.h")
if(UNIX)
target_include_directories(cppZarr_shared PRIVATE ${source_dir}/include)
target_link_libraries(cppZarr_shared PRIVATE ${binary_dir}/.libs/libuuid.a)
endif()
#message(NOTICE "${CBLOSC_INCLUDE_DIR}")
#message(NOTICE "${CBLOSC2_INCLUDE_DIR}")
#message(NOTICE "${JSON_INCLUDE_DIR}")
#message(NOTICE "${ZLIB_DIR}")
# Include the header files from blosc, blosc2, and json
target_include_directories(cppZarr_shared PRIVATE
${CBLOSC_INCLUDE_DIR}
${CBLOSC2_INCLUDE_DIR}
${JSON_INCLUDE_DIR}
${ZLIB_DIR}
)
#target_include_directories(cppZarrStatic PRIVATE
# ${CBLOSC_INCLUDE_DIR}
# ${CBLOSC2_INCLUDE_DIR}
# ${JSON_INCLUDE_DIR}
# ${ZLIB_DIR}
#)
if(UNIX)
set(ZLIB_STATIC_NAME "libz.a")
else()
set(ZLIB_STATIC_NAME "libzlibstaticCPPZARR.a")
endif()
# Link against the blosc and blosc2 libraries
target_link_libraries(cppZarr_shared PRIVATE
#"-Wl,--allow-multiple-definition"
${CMAKE_BINARY_DIR}/dependencies/${CBLOSC2_VER}/blosc/libblosc2.a
${CMAKE_BINARY_DIR}/dependencies/${CBLOSC_VER}/blosc/libblosc.a
${CMAKE_BINARY_DIR}/dependencies/zlib-1.2.8/${ZLIB_STATIC_NAME}
-static-libgcc
-static-libstdc++
OpenMP::OpenMP_CXX
)
install(TARGETS cppZarr_shared
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_WRITE WORLD_EXECUTE
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
# Install JSON headers
install(DIRECTORY ${JSON_INCLUDE_DIR}/nlohmann
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)