Skip to content

Commit 1e9303f

Browse files
authored
Merge branch 'master' into feature/HS6986/extend-MixtureFinder
2 parents b42a4cc + 760433a commit 1e9303f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+4717
-579
lines changed

.github/workflows/ci.yaml

Lines changed: 192 additions & 91 deletions
Large diffs are not rendered by default.

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ tags
1414
test_scripts/iqtree_test_cmds.txt
1515
pllrepo/
1616
build/
17+
cmake-build-debug/
1718
/Default-clang
1819
.idea/
1920
.idea/codeStyleSettings.xml

CMakeLists.txt

Lines changed: 101 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ set(GCC_MIN_VERSION "9") # minimum GCC version that is tested in CI
8181
project(iqtree)
8282
add_definitions(-DIQ_TREE)
8383

84+
# Require position independent code for IQ-TREE to be used as a library
85+
if (BUILD_LIB)
86+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
87+
endif()
88+
8489
# Find Eigen3 library
8590
if (NOT EIGEN3_INCLUDE_DIR)
8691
find_package(Eigen3)
@@ -134,7 +139,7 @@ if (CMAKE_BUILD_TYPE STREQUAL "Release")
134139
message("Build mode : Release")
135140
endif()
136141

137-
if (BUILD_LIB STREQUAL "ON")
142+
if (BUILD_LIB)
138143
message("Build lib : ON")
139144
else()
140145
message("Build lib : OFF")
@@ -239,11 +244,19 @@ endif()
239244
##################################################################
240245
# Include the CMAPLE library
241246
##################################################################
247+
242248
if (NOT WIN32)
243249
# temporarily disable cmaple for Windows, next to fix for next release
244250
option(USE_CMAPLE "Integrate CMAPLE" ON)
245251
endif()
246252

253+
option(USE_CMAPLE_AA "Integrate CMAPLE-AA" OFF)
254+
255+
if (BUILD_LIB)
256+
set(USE_CMAPLE "OFF")
257+
set(USE_CMAPLE_AA "OFF")
258+
endif()
259+
247260
if (USE_CMAPLE STREQUAL "ON")
248261
message("Integrate CMAPLE: ON")
249262
add_definitions(-DUSE_CMAPLE)
@@ -256,7 +269,6 @@ else()
256269
set(TARGET_CMAPLE "")
257270
endif()
258271

259-
option(USE_CMAPLE_AA "Integrate CMAPLE-AA" OFF)
260272

261273
if (USE_CMAPLE_AA STREQUAL "ON")
262274
message("Integrate CMAPLE_AA: ON")
@@ -265,6 +277,18 @@ else()
265277
message("Integrate CMAPLE_AA: OFF")
266278
endif()
267279

280+
##################################################################
281+
# build IQTREE library
282+
##################################################################
283+
option(BUILD_LIB "Build IQTREE library" OFF)
284+
285+
if (BUILD_LIB)
286+
message("Build IQTREE library: ON")
287+
add_definitions(-DBUILD_LIB)
288+
else()
289+
message("Build IQTREE library: OFF")
290+
endif()
291+
268292
##################################################################
269293
# Detect target platforms
270294
##################################################################
@@ -425,6 +449,10 @@ if (__ARM_NEON AND APPLE)
425449
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Dthread_local=")
426450
endif()
427451

452+
# for list of libraries to combine with for building IQTREE3 static library
453+
SET(STATIC_LIBS "${PROJECT_BINARY_DIR}/libiqtree3.a")
454+
455+
428456
##################################################################
429457
# detect 32 or 64 bit binary
430458
##################################################################
@@ -502,15 +530,21 @@ if (NOT IQTREE_FLAGS MATCHES "single")
502530
if(CLANG AND APPLE)
503531
if(OSX_NATIVE_ARCHITECTURE STREQUAL "arm64")
504532
link_directories(${PROJECT_SOURCE_DIR}/libmac_m1)
533+
LIST(APPEND STATIC_LIBS "${PROJECT_SOURCE_DIR}/libmac_m1/libomp.a" "${PROJECT_SOURCE_DIR}/libmac_m1/libz.a")
505534
else()
506-
link_directories(${PROJECT_SOURCE_DIR}/libmac)
507-
endif()
535+
link_directories(${PROJECT_SOURCE_DIR}/libmac)
536+
LIST(APPEND STATIC_LIBS "${PROJECT_SOURCE_DIR}/libmac/libomp.a" "${PROJECT_SOURCE_DIR}/libmac/libz.a")
537+
endif()
508538
elseif (UNIX AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
509-
if (__ARM_NEON)
510-
link_directories(${PROJECT_SOURCE_DIR}/liblinux_arm)
511-
else()
512-
link_directories(${PROJECT_SOURCE_DIR}/lib)
513-
endif()
539+
if (__ARM_NEON)
540+
link_directories(${PROJECT_SOURCE_DIR}/liblinux_arm)
541+
LIST(APPEND STATIC_LIBS "${PROJECT_SOURCE_DIR}/liblinux_arm/libomp.a" "${PROJECT_SOURCE_DIR}/liblinux_arm/libz.a")
542+
elseif(BUILD_LIB)
543+
find_package(OpenMP)
544+
else()
545+
link_directories(${PROJECT_SOURCE_DIR}/lib)
546+
LIST(APPEND STATIC_LIBS "${PROJECT_SOURCE_DIR}/lib/libomp.a" "${PROJECT_SOURCE_DIR}/lib/libz.a")
547+
endif()
514548
elseif (WIN32)
515549
link_directories(${PROJECT_SOURCE_DIR}/lib)
516550
endif()
@@ -794,8 +828,6 @@ if (USE_CMAPLE STREQUAL "ON")
794828
add_subdirectory(cmaple)
795829
endif()
796830

797-
add_subdirectory(main)
798-
799831
# YAML library
800832
option(YAML_CPP_BUILD_TESTS "Enable testing" OFF)
801833
option(YAML_CPP_BUILD_TOOLS "Enable parse tools" OFF)
@@ -819,24 +851,25 @@ endif()
819851

820852
add_library(kernelsse tree/phylokernelsse.cpp)
821853

822-
if (NOT IQTREE_FLAGS MATCHES "novx")
823-
add_library(kernelavx tree/phylotreeavx.cpp)
824-
add_library(kernelfma tree/phylokernelfma.cpp)
854+
if (NOT BINARY32 AND NOT IQTREE_FLAGS MATCHES "novx")
855+
add_library(kernelavx tree/phylotreeavx.cpp)
856+
add_library(kernelfma tree/phylokernelfma.cpp)
825857
if (IQTREE_FLAGS MATCHES "KNL")
826858
add_library(kernelavx512 tree/phylokernelavx512.cpp)
827859
endif()
828860
endif()
829861

862+
add_subdirectory(main)
863+
830864
##################################################################
831865
# build lib file or main executable
832866
##################################################################
833-
option(BUILD_LIB "Build IQ-TREE2 library" OFF)
834-
835-
if (BUILD_LIB STREQUAL "ON")
867+
if (BUILD_LIB)
836868
add_library(iqtree3
837869
obsolete/parsmultistate.cpp
838870
obsolete/parsmultistate.h
839871
)
872+
840873
else()
841874
add_executable(iqtree3
842875
obsolete/parsmultistate.cpp
@@ -861,6 +894,7 @@ endif(Backtrace_FOUND)
861894

862895
if (USE_BOOSTER)
863896
target_link_libraries(iqtree3 booster)
897+
LIST(APPEND STATIC_LIBS "${PROJECT_BINARY_DIR}/booster/libbooster.a")
864898
if (USE_CMAPLE_AA STREQUAL "ON")
865899
target_link_libraries(iqtree3-aa booster)
866900
endif()
@@ -917,9 +951,18 @@ if (NOT IQTREE_FLAGS MATCHES "single")
917951
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LIBPATH:${PROJECT_SOURCE_DIR}/lib")
918952
set(THREAD_LIB "pthreadVC2")
919953
elseif(CLANG AND WIN32)
920-
target_link_libraries(iqtree3 ${PROJECT_SOURCE_DIR}/lib/libiomp5md.dll)
921-
if (USE_CMAPLE_AA STREQUAL "ON")
922-
target_link_libraries(iqtree3-aa ${PROJECT_SOURCE_DIR}/lib/libiomp5md.dll)
954+
if (BINARY32)
955+
target_link_libraries(iqtree3 ${PROJECT_SOURCE_DIR}/lib32/libiomp5md.dll)
956+
LIST(APPEND STATIC_LIBS "${PROJECT_SOURCE_DIR}/lib32/libiomp5md.dll")
957+
if (USE_CMAPLE_AA STREQUAL "ON")
958+
target_link_libraries(iqtree3-aa ${PROJECT_SOURCE_DIR}/lib32/libiomp5md.dll)
959+
endif()
960+
else()
961+
target_link_libraries(iqtree3 ${PROJECT_SOURCE_DIR}/lib/libiomp5md.dll)
962+
LIST(APPEND STATIC_LIBS "${PROJECT_SOURCE_DIR}/lib/libiomp5md.dll")
963+
if (USE_CMAPLE_AA STREQUAL "ON")
964+
target_link_libraries(iqtree3-aa ${PROJECT_SOURCE_DIR}/lib/libiomp5md.dll)
965+
endif()
923966
endif()
924967
endif()
925968
endif()
@@ -928,6 +971,8 @@ endif()
928971
target_link_libraries(iqtree3 pll ncl nclextra utils pda lbfgsb whtest sprng vectorclass model
929972
gsl alignment tree simulator terrace yaml-cpp phyloYAML main ${TARGET_CMAPLE} ${PLATFORM_LIB} ${STD_LIB} ${THREAD_LIB} ${ATOMIC_LIB})
930973

974+
LIST(APPEND STATIC_LIBS "${PROJECT_BINARY_DIR}/pll/libpll.a" "${PROJECT_BINARY_DIR}/ncl/libncl.a" "${PROJECT_BINARY_DIR}/nclextra/libnclextra.a" "${PROJECT_BINARY_DIR}/utils/libutils.a" "${PROJECT_BINARY_DIR}/pda/libpda.a" "${PROJECT_BINARY_DIR}/lbfgsb/liblbfgsb.a" "${PROJECT_BINARY_DIR}/whtest/libwhtest.a" "${PROJECT_BINARY_DIR}/sprng/libsprng.a" "${PROJECT_BINARY_DIR}/vectorclass/libvectorclass.a" "${PROJECT_BINARY_DIR}/model/libmodel.a" "${PROJECT_BINARY_DIR}/gsl/libgsl.a" "${PROJECT_BINARY_DIR}/alignment/libalignment.a" "${PROJECT_BINARY_DIR}/tree/libtree.a" "${PROJECT_BINARY_DIR}/simulator/libsimulator.a" "${PROJECT_BINARY_DIR}/terrace/libterrace.a" "${PROJECT_BINARY_DIR}/yaml-cpp/libyaml-cpp.a" "${PROJECT_BINARY_DIR}/phylo-yaml/libphyloYAML.a" "${PROJECT_BINARY_DIR}/main/libmain.a")
975+
931976
if (USE_CMAPLE_AA STREQUAL "ON")
932977
target_link_libraries(iqtree3-aa pll ncl nclextra utils pda lbfgsb whtest sprng vectorclass model
933978
gsl alignment tree simulator terrace yaml-cpp phyloYAML main-aa maple-aa ${PLATFORM_LIB} ${STD_LIB} ${THREAD_LIB} ${ATOMIC_LIB})
@@ -950,20 +995,23 @@ endif()
950995

951996
if (USE_TERRAPHAST)
952997
target_link_libraries(iqtree3 terracetphast)
998+
LIST(APPEND STATIC_LIBS "${PROJECT_BINARY_DIR}/terracetphast/libterracetphast.a" "${PROJECT_BINARY_DIR}/terraphast/libterraphast.a")
953999
if (USE_CMAPLE_AA STREQUAL "ON")
9541000
target_link_libraries(iqtree3-aa terracetphast)
9551001
endif()
9561002
endif()
9571003

9581004
if (USE_LSD2)
9591005
target_link_libraries(iqtree3 lsd2)
1006+
LIST(APPEND STATIC_LIBS "${PROJECT_BINARY_DIR}/lsd2/liblsd2.a")
9601007
if (USE_CMAPLE_AA STREQUAL "ON")
9611008
target_link_libraries(iqtree3-aa lsd2)
9621009
endif()
9631010
endif()
9641011

9651012
if (NOT IQTREE_FLAGS MATCHES "nosse")
9661013
target_link_libraries(iqtree3 kernelsse)
1014+
LIST(APPEND STATIC_LIBS "${PROJECT_BINARY_DIR}/libkernelsse.a")
9671015
if (USE_CMAPLE_AA STREQUAL "ON")
9681016
target_link_libraries(iqtree3-aa kernelsse)
9691017
endif()
@@ -982,11 +1030,13 @@ endif()
9821030
# SSE, AVX etc. libraries
9831031
if (NOT BINARY32 AND NOT IQTREE_FLAGS MATCHES "novx")
9841032
target_link_libraries(iqtree3 pllavx kernelavx kernelfma)
1033+
LIST(APPEND STATIC_LIBS "${PROJECT_BINARY_DIR}/pll/libpllavx.a" "${PROJECT_BINARY_DIR}/libkernelavx.a" "${PROJECT_BINARY_DIR}/libkernelfma.a")
9851034
if (USE_CMAPLE_AA STREQUAL "ON")
9861035
target_link_libraries(iqtree3-aa pllavx kernelavx kernelfma)
9871036
endif()
9881037
if (IQTREE_FLAGS MATCHES "KNL")
9891038
target_link_libraries(iqtree3 kernelavx512)
1039+
LIST(APPEND STATIC_LIBS "${PROJECT_BINARY_DIR}/libkernelavx512.a")
9901040
if (USE_CMAPLE_AA STREQUAL "ON")
9911041
target_link_libraries(iqtree3-aa kernelavx512)
9921042
endif()
@@ -1021,7 +1071,7 @@ else()
10211071
set (BINARY_DIR "${PROJECT_BINARY_DIR}")
10221072
endif()
10231073

1024-
if (WIN32)
1074+
if (NOT BUILD_LIB AND WIN32)
10251075
if (MSVC)
10261076
if (CLANG_UNDER_VS)
10271077
ADD_CUSTOM_COMMAND(TARGET iqtree3 POST_BUILD COMMAND copy "iqtree3${EXE_SUFFIX}.exe" "iqtree3${EXE_SUFFIX}-click.exe")
@@ -1042,6 +1092,36 @@ if (WIN32)
10421092
endif()
10431093
endif()
10441094

1095+
##############################################################
1096+
# CREATE A STATIC LIBRARY
1097+
##############################################################
1098+
1099+
if (BUILD_LIB)
1100+
if(APPLE)
1101+
add_custom_command(
1102+
TARGET iqtree3 POST_BUILD
1103+
COMMAND libtool -static -o libiqtree.a ${STATIC_LIBS}
1104+
COMMAND rm libiqtree3.a
1105+
VERBATIM)
1106+
elseif(UNIX)
1107+
add_custom_command(
1108+
TARGET iqtree3 POST_BUILD
1109+
COMMAND mkdir all_libs
1110+
COMMAND ln -s ${STATIC_LIBS} all_libs
1111+
COMMAND ${PROJECT_SOURCE_DIR}/test_scripts/unify-static-libs.sh libiqtree.a all_libs
1112+
COMMAND rm -rf all_libs
1113+
COMMAND rm libiqtree3.a
1114+
VERBATIM)
1115+
elseif(WIN32)
1116+
add_custom_command(
1117+
TARGET iqtree3 POST_BUILD
1118+
COMMAND ${PROJECT_SOURCE_DIR}/test_scripts/unify-static-libs.bat ${STATIC_LIBS}
1119+
COMMAND ${CMAKE_COMMAND} -E rm -f libiqtree3.a
1120+
COMMAND ${PROJECT_SOURCE_DIR}/test_scripts/make-dll-lib.bat ${PROJECT_SOURCE_DIR}/test_scripts/bridge.cpp
1121+
VERBATIM)
1122+
endif()
1123+
endif()
1124+
10451125
##############################################################
10461126
# add the install targets
10471127
##############################################################

0 commit comments

Comments
 (0)