diff --git a/biology/gcta/Makefile b/biology/gcta/Makefile index b6ef44ad30db..a381623be80e 100644 --- a/biology/gcta/Makefile +++ b/biology/gcta/Makefile @@ -1,52 +1,52 @@ PORTNAME= gcta DISTVERSIONPREFIX= v DISTVERSION= 1.94.1 -PORTREVISION= 5 +PORTREVISION= 6 CATEGORIES= biology MAINTAINER= jwb@FreeBSD.org COMMENT= Genome-wide Complex Trait Analysis WWW= https://cnsgenomics.com/software/gcta/index.html LICENSE= GPLv3 LICENSE_FILE= ${WRKSRC}/LICENSE BUILD_DEPENDS= boost-libs>0:devel/boost-libs \ spectra>0:math/spectra LIB_DEPENDS= libgsl.so:math/gsl \ libopenblas.so:math/openblas \ libsqlite3.so:databases/sqlite3 \ libzstd.so:archivers/zstd USES= cmake eigen:3 localbase:ldflags USE_GITHUB= yes GH_ACCOUNT= jianyangqt GH_TUPLE= zhilizheng:plink-ng:3744540:plink/submods/plink-ng CONFIGURE_ENV+= EIGEN3_INCLUDE_DIR=${LOCALBASE}/include/eigen3 \ BOOST_INCLUDE_DIR=${LOCALBASE}/include/boost \ OPENBLAS=${LOCALBASE} \ SPECTRA_INCLUDE_DIR=${LOCALBASE}/include/Spectra LDFLAGS+= -fopenmp PLIST_FILES= bin/gcta64 bin/gcta .include # Temporary hack for clang build errors: # /usr/ports/biology/gcta/work/gcta-1.94.1/submods/plink-ng/2.0/plink2_base.h:1008:23: error: argument to '__builtin_neon_vshrq_n_v' must be a constant integer # return R_CAST(VecW, _mm_srli_epi64(R_CAST(__m128i, vv), ct)); # /usr/lib/clang/14.0.5/include/arm_neon.h:25260:24: note: expanded from macro 'vshrq_n_u64' # __ret = (uint64x2_t) __builtin_neon_vshrq_n_v((int8x16_t)__s0, __p1, 51); .if ${ARCH} == aarch64 USE_GCC= yes .endif do-install: @${MKDIR} ${STAGEDIR}${PREFIX}/bin ${INSTALL_PROGRAM} ${BUILD_WRKSRC}/gcta64 ${STAGEDIR}${PREFIX}/bin ${RLN} ${STAGEDIR}${PREFIX}/bin/gcta64 ${STAGEDIR}${PREFIX}/bin/gcta .include diff --git a/biology/gcta/files/patch-CMakeLists.txt b/biology/gcta/files/patch-CMakeLists.txt index 886a9591c652..8063af48504b 100644 --- a/biology/gcta/files/patch-CMakeLists.txt +++ b/biology/gcta/files/patch-CMakeLists.txt @@ -1,98 +1,101 @@ --- CMakeLists.txt.orig 2022-08-03 06:01:52 UTC +++ CMakeLists.txt -@@ -3,7 +3,7 @@ SET(CMAKE_INCLUDE_CURRENT_DIR ON) +@@ -1,9 +1,9 @@ +-CMAKE_MINIMUM_REQUIRED(VERSION 3.1) ++CMAKE_MINIMUM_REQUIRED(VERSION 3.5) + SET(CMAKE_EXPORT_COMPILE_COMMANDS ON) SET(PROJECT_NAME_STR GCTA2) PROJECT(${PROJECT_NAME_STR} C CXX) SET(CMAKE_INCLUDE_CURRENT_DIR ON) -SET(CMAKE_CXX_STANDARD 11) +SET(CMAKE_CXX_STANDARD 14) SET(CMAKE_C_STANDARD 11) # get system architecture @@ -16,8 +16,8 @@ endif() MESSAGE(FATAL_ERROR "Use the Visual Studio project file which located in gcta_win64 directory") endif() -if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux" OR "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin") - MESSAGE("Linux and Mac are supported.") +if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD" OR "${CMAKE_SYSTEM_NAME}" MATCHES "Linux" OR "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin") + MESSAGE("FreeBSD, Linux and Mac are supported.") else() MESSAGE("Your system: ${CMAKE_SYSTEM_NAME}") MESSAGE(FATAL_ERROR "Only Linux and Mac are currently supported.") @@ -43,18 +43,18 @@ INCLUDE_DIRECTORIES("${EIGEN3_INCLUDE_DIR}") ENDIF() INCLUDE_DIRECTORIES("${EIGEN3_INCLUDE_DIR}") -SET(SPECTRA_LIB "$ENV{SPECTRA_LIB}") -IF(NOT SPECTRA_LIB) - MESSAGE(FATAL_ERROR "Specify environment variable SPECTRA_LIB to the location of Spectra package") +SET(SPECTRA_INCLUDE_DIR "$ENV{SPECTRA_INCLUDE_DIR}") +IF(NOT SPECTRA_INCLUDE_DIR) + MESSAGE(FATAL_ERROR "Specify environment variable SPECTRA_INCLUDE_DIR to the location of Spectra package") ENDIF() -INCLUDE_DIRECTORIES("${SPECTRA_LIB}") +INCLUDE_DIRECTORIES("${SPECTRA_INCLUDE_DIR}") -SET(BOOST_LIB "$ENV{BOOST_LIB}") -IF(NOT BOOST_LIB) - MESSAGE(FATAL_ERROR "Specify environment variable BOOST_LIB to the location of BOOST library") +SET(BOOST_INCLUDE_DIR "$ENV{BOOST_INCLUDE_DIR}") +IF(NOT BOOST_INCLUDE_DIR) + MESSAGE(FATAL_ERROR "Specify environment variable BOOST_INCLUDE_DIR to the location of BOOST headers") ENDIF() -INCLUDE_DIRECTORIES("${BOOST_LIB}") +INCLUDE_DIRECTORIES("${BOOST_INCLUDE_DIR}") # PLINK2.0 pgen library; @@ -63,13 +63,28 @@ message(STATUS "ARCHITECTURE:${CMAKE_LIBRARY_ARCHITECT message(STATUS "ARCHITECTURE:${CMAKE_LIBRARY_ARCHITECTURE}") -if(CMAKE_LIBRARY_ARCHITECTURE STREQUAL "aarch64") +if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD") SET(OPENBLAS "$ENV{OPENBLAS}") IF(NOT OPENBLAS) MESSAGE(FATAL_ERROR "Specify environment variable OPENBLAS to the location of OPENBLAS package") ENDIF() INCLUDE_DIRECTORIES("${OPENBLAS}/include") + find_library(lib_openblas NAMES openblas PATHS "${OPENBLAS}" "${LOCALBASE}/lib") + set(BLAS_LIB ${lib_openblas}) + + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g") + add_compile_options(-fopenmp) + +elseif(CMAKE_LIBRARY_ARCHITECTURE STREQUAL "aarch64") + SET(OPENBLAS "$ENV{OPENBLAS}") + IF(NOT OPENBLAS) + MESSAGE(FATAL_ERROR "Specify environment variable OPENBLAS to the location of OPENBLAS package") + ENDIF() + INCLUDE_DIRECTORIES("${OPENBLAS}/include") + find_library(lib_openblas NAMES openblas PATHS "${OPENBLAS}" "${OPENBLAS}/lib") set(BLAS_LIB ${lib_openblas}) @@ -169,6 +184,8 @@ if(APPLE) if(APPLE) link_directories(${MKLROOT}/lib) link_directories(/usr/local/lib) +elseif("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD") + link_directories(${LOCALBASE}/lib) else(CMAKE_CXX_COMPILER_ID MATCHES "Clang") #linux link_directories(${MKLROOT}/../../../lib/intel64) @@ -179,6 +196,9 @@ if(APPLE) if(APPLE) # iomp5 target_link_libraries(gcta64 ${libs_list} Pgenlib mainV1 z ${BLAS_LIB} sqlite3 zstd_s omp pthread m dl ) +elseif("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD") + # FIXME: Clean this up + target_link_libraries(gcta64 mainV1 ${libs_list} Pgenlib gsl z sqlite3 zstd -Wl,--start-group ${BLAS_LIB} -Wl,--end-group -Wl,--whole-archive -lpthread -Wl,--no-whole-archive m dl) else() if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") # error keeps only