1+ cmake_minimum_required (VERSION 3.10 )
2+ if (NOT CMAKE_CXX_COMPILER )
3+ set (CMAKE_CXX_COMPILER g++)
4+ endif ()
5+
6+ execute_process (
7+ COMMAND git log --pretty=format:%h -n 1
8+ OUTPUT_VARIABLE GIT_COMMIT
9+ )
10+ if ("${GIT_COMMIT} " STREQUAL "" )
11+ set (GIT_COMMIT "NA" )
12+ endif ()
13+
14+ file (STRINGS "VERSION" RM_VERSION )
15+ project (remeta VERSION ${RM_VERSION} )
16+
17+ set (CMAKE_CXX_STANDARD 17)
18+ set (CMAKE_CXX_STANDARD_REQUIRED True )
19+ set (CMAKE_CXX_FLAGS "-O3 -Wall -ffast-math -fvisibility=hidden -fopenmp" )
20+ add_definitions (-DVERSION_NUMBER= "v${RM_VERSION} -${GIT_COMMIT} " )
21+
22+ add_executable (remeta
23+ ${CMAKE_SOURCE_DIR} /src/io/bgz_reader.cpp
24+ ${CMAKE_SOURCE_DIR} /src/io/bgz_writer.cpp
25+ ${CMAKE_SOURCE_DIR} /src/io/block_pgen_reader.cpp
26+ ${CMAKE_SOURCE_DIR} /src/io/gene_set_reader.cpp
27+ ${CMAKE_SOURCE_DIR} /src/io/htpv4_reader.cpp
28+ ${CMAKE_SOURCE_DIR} /src/io/htpv4_writer.cpp
29+ ${CMAKE_SOURCE_DIR} /src/io/remeta_matrix_reader.cpp
30+ ${CMAKE_SOURCE_DIR} /src/io/regenie_ld_matrix_reader.cpp
31+ ${CMAKE_SOURCE_DIR} /src/io/regenie_ld_matrix_writer.cpp
32+ ${CMAKE_SOURCE_DIR} /src/io/ref_ld_block_mapper.cpp
33+ ${CMAKE_SOURCE_DIR} /src/io/ref_ld_genetic_map.cpp
34+ ${CMAKE_SOURCE_DIR} /src/io/ref_ld_matrix_reader.cpp
35+ ${CMAKE_SOURCE_DIR} /src/io/ref_ld_matrix_writer.cpp
36+ ${CMAKE_SOURCE_DIR} /src/io/regenie_anno_reader.cpp
37+ ${CMAKE_SOURCE_DIR} /src/meta/es_meta_analyzer.cpp
38+ ${CMAKE_SOURCE_DIR} /src/meta/genep_meta_analyzer.cpp
39+ ${CMAKE_SOURCE_DIR} /src/meta/htp_meta_analyzer.cpp
40+ ${CMAKE_SOURCE_DIR} /src/meta/pv_meta_analyzer.cpp
41+ ${CMAKE_SOURCE_DIR} /src/meta/set_meta_analyzer.cpp
42+ ${CMAKE_SOURCE_DIR} /src/meta/variant_meta_analyzer.cpp
43+ ${CMAKE_SOURCE_DIR} /src/stat/misc.cpp
44+ ${CMAKE_SOURCE_DIR} /src/stat/spa.cpp
45+ ${CMAKE_SOURCE_DIR} /src/stat/tests.cpp
46+ ${CMAKE_SOURCE_DIR} /src/allele_frequency_map.cpp
47+ ${CMAKE_SOURCE_DIR} /src/annotation_map.cpp
48+ ${CMAKE_SOURCE_DIR} /src/htpv4_pos.cpp
49+ ${CMAKE_SOURCE_DIR} /src/logging.cpp
50+ ${CMAKE_SOURCE_DIR} /src/parameter_checks.cpp
51+ ${CMAKE_SOURCE_DIR} /src/remeta.cpp
52+ ${CMAKE_SOURCE_DIR} /src/run_acatv.cpp
53+ ${CMAKE_SOURCE_DIR} /src/run_compute_ref_ld.cpp
54+ ${CMAKE_SOURCE_DIR} /src/run_esma.cpp
55+ ${CMAKE_SOURCE_DIR} /src/run_genep.cpp
56+ ${CMAKE_SOURCE_DIR} /src/run_htp.cpp
57+ ${CMAKE_SOURCE_DIR} /src/run_index_anno.cpp
58+ ${CMAKE_SOURCE_DIR} /src/run_ld_deflate.cpp
59+ ${CMAKE_SOURCE_DIR} /src/run_ld_inflate.cpp
60+ ${CMAKE_SOURCE_DIR} /src/run_pvma.cpp
61+ ${CMAKE_SOURCE_DIR} /src/source_map.cpp
62+ ${CMAKE_SOURCE_DIR} /src/util.cpp
63+ ${CMAKE_SOURCE_DIR} /src/variant_filter.cpp
64+ )
65+
66+ find_path (
67+ EIGEN
68+ Eigen
69+ HINTS ${EIGEN_PATH}
70+ /usr/local/include/eigen3
71+ )
72+ if (${EIGEN} STREQUAL EIGEN-NOTFOUND)
73+ message (SEND_ERROR "could not find Eigen folder at EIGEN_PATH" )
74+ else ()
75+ message ("EIGEN: ${EIGEN} " )
76+ endif ()
77+
78+ target_include_directories (remeta PRIVATE ${EIGEN} )
79+
80+ find_library (
81+ HTSLIB
82+ libhts.a
83+ HINTS ${HTSLIB_PATH}
84+ )
85+ find_library (
86+ DEFLATE
87+ libdeflate.a
88+ )
89+ if (${HTSLIB} STREQUAL HTSLIB-NOTFOUND)
90+ message (SEND_ERROR "Could not find libhts.a at ${HTSLIB_PATH} " )
91+ else ()
92+ message ("HTSlib: ${HTSLIB} " )
93+ endif ()
94+ if (${DEFLATE} STREQUAL DEFLATE-NOTFOUND)
95+ message (SEND_ERROR "Could not find libdeflate.a" )
96+ endif ()
97+
98+ find_library (
99+ BOOST_LOG_SETUP
100+ libboost_log_setup.a
101+ HINTS ${BOOST_PATH}
102+ )
103+ find_library (
104+ BOOST_LOG
105+ libboost_log.a
106+ HINTS ${BOOST_PATH}
107+ )
108+ find_library (
109+ BOOST_PROGRAM_OPTIONS
110+ libboost_program_options.a
111+ HINTS ${BOOST_PATH}
112+ )
113+ find_library (
114+ BOOST_FILESYSTEM
115+ libboost_filesystem.a
116+ HINTS ${BOOST_PATH}
117+ )
118+ find_library (
119+ BOOST_SYSTEM
120+ libboost_system.a
121+ HINTS ${BOOST_PATH}
122+ )
123+ find_library (
124+ BOOST_THREAD
125+ libboost_thread.a
126+ HINTS ${BOOST_PATH}
127+ )
128+ find_library (Z libz.so )
129+ find_library (SSL libssl.so )
130+ find_library (CRYPTO libcrypto.so )
131+ find_library (BZ2 libbz2.so )
132+ find_library (LZMA liblzma.so )
133+ find_library (CURL libcurl.so )
134+
135+ set (EXTERNAL_LIBS
136+ ${HTSLIB}
137+ ${DEFLATE}
138+ ${BOOST_LOG_SETUP}
139+ ${BOOST_LOG}
140+ ${BOOST_PROGRAM_OPTIONS}
141+ ${BOOST_FILESYSTEM}
142+ ${BOOST_SYSTEM}
143+ ${BOOST_THREAD}
144+ ${PTHREAD}
145+ ${Z}
146+ ${SSL}
147+ ${CRYPTO}
148+ ${DL}
149+ ${BZ2}
150+ ${LZMA}
151+ ${CURL}
152+ )
153+
154+ target_link_libraries (remeta PUBLIC ${EXTERNAL_LIBS} )
155+
156+ add_custom_target (
157+ pgenlib.a
158+ COMMAND make
159+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} /lib/pgenlib
160+ )
161+ target_link_libraries (
162+ remeta PUBLIC
163+ ${CMAKE_SOURCE_DIR} /lib/pgenlib/pgenlib.a
164+ )
165+ target_include_directories (
166+ remeta PUBLIC
167+ ${CMAKE_SOURCE_DIR} /lib/pgenlib
168+ )
169+ add_dependencies (remeta pgenlib.a )
170+
171+ add_custom_target (
172+ faddeeva.a
173+ COMMAND make
174+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} /lib/faddeeva
175+ )
176+ target_link_libraries (
177+ remeta PUBLIC
178+ ${CMAKE_SOURCE_DIR} /lib/faddeeva/faddeeva.a
179+ )
180+ target_include_directories (
181+ remeta PUBLIC
182+ ${CMAKE_SOURCE_DIR} /lib/faddeeva
183+ )
184+ add_dependencies (remeta faddeeva.a )
185+
186+ add_custom_target (
187+ qfc.a
188+ COMMAND make
189+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} /lib/qfc
190+ )
191+ target_link_libraries (
192+ remeta PUBLIC
193+ ${CMAKE_SOURCE_DIR} /lib/qfc/qfc.a
194+ )
195+ target_include_directories (
196+ remeta PUBLIC
197+ ${CMAKE_SOURCE_DIR} /lib/qfc
198+ )
199+ add_dependencies (remeta qfc.a )
200+
201+ #####################################
202+ ### Link Linear Algebra Libraries ###
203+ #####################################
204+ # Intel MKL
205+ find_library (MKL libmkl_intel_lp64.a
206+ HINTS ${MKLROOT} $ENV{MKLROOT} /lib
207+ )
208+ find_library (MKL_GNU_THREAD libmkl_gnu_thread.a
209+ HINTS ${MKLROOT} $ENV{MKLROOT} /lib
210+ )
211+ find_library (MKL_CORE libmkl_core.a
212+ HINTS ${MKLROOT} $ENV{MKLROOT} /lib
213+ )
214+ find_library (GOMP libgomp.a HINTS /usr/lib/gcc/x86_64-linux-gnu/8/ )
215+ find_library (M NAMES m )
216+
217+ # Openblas
218+ find_library (LAPACK liblapack.a )
219+ find_library (LAPACKE liblapacke.a )
220+ find_library (OPENBLAS libopenblas.a )
221+
222+ if (MKL AND MKL_GNU_THREAD AND MKL_CORE)
223+ message ("Compiling with Intel MKL" )
224+ target_include_directories (remeta PRIVATE ${MKL_INCLUDE} )
225+ message ("\t ${MKL} " )
226+ message ("\t ${MKL_GNU_THREAD} " )
227+ message ("\t ${MKL_CORE} " )
228+ target_link_libraries (remeta PRIVATE
229+ "-Wl,--start-group"
230+ ${MKL} ${MKL_GNU_THREAD} ${MKL_CORE}
231+ "-Wl,--end-group"
232+ -lgomp
233+ ${M}
234+ -ldl )
235+ #set(MKL_LINK static)
236+ find_package (MKL CONFIG PATHS ${MKLROOT} $ENV{MKLROOT} } QUIET )
237+ target_include_directories (remeta PRIVATE ${MKL_INCLUDE} )
238+ target_compile_definitions (remeta PUBLIC "-DMKL_ILP64 -DWITH_MKL -DEIGEN_USE_BLAS -DEIGEN_USE_LAPACKE" )
239+ elseif (LAPACK AND LAPACKE AND OPENBLAS)
240+ message ("Compiling with OpenBLAS" )
241+ message ("\t ${LAPACK} " )
242+ message ("\t ${LAPACKE} " )
243+ message ("\t ${OPENBLAS} " )
244+ set (BLAS_LIBS ${LAPACK} ${LAPACKE} ${OPENBLAS} )
245+
246+ target_link_libraries (remeta PUBLIC ${BLAS_LIBS} )
247+ target_compile_definitions (remeta PUBLIC "-DWITH_OPENBLAS -DEIGEN_USE_BLAS -DEIGEN_USE_LAPACKE" )
248+ else ()
249+ message ("Missing libraries for Intel MKL and OpenBLAS" )
250+ message ("\t LAPACK ${LAPACK} " )
251+ message ("\t LAPACKE ${LAPACKE} " )
252+ message ("\t OPENBLAS ${OPENBLAS} " )
253+ message ("\t MKL ${MKL} " )
254+ message ("\t MKL_GNU_THREAD ${MKL_GNU_THREAD} " )
255+ message ("\t MKL_CORE ${MKL_CORE} " )
256+ endif ()
0 commit comments