From 64435f505fa3a08a048e5232afc04d54139cae05 Mon Sep 17 00:00:00 2001 From: Emily Date: Sun, 21 Jul 2024 13:58:10 +0100 Subject: [PATCH] febio: 3.6 -> 4.7 --- pkgs/by-name/fe/febio/fix-cmake.patch | 77 +++++++++++++++++++----- pkgs/by-name/fe/febio/package.nix | 84 +++++++++++++-------------- 2 files changed, 102 insertions(+), 59 deletions(-) diff --git a/pkgs/by-name/fe/febio/fix-cmake.patch b/pkgs/by-name/fe/febio/fix-cmake.patch index 456179ca8364..f3c0ddbd9409 100644 --- a/pkgs/by-name/fe/febio/fix-cmake.patch +++ b/pkgs/by-name/fe/febio/fix-cmake.patch @@ -1,6 +1,16 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index c1bc953edf..f6aaf92fb5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -47,7 +47,7 @@ function(findLib libName libDir libOut) +@@ -2,6 +2,7 @@ + set(CMAKE_CXX_STANDARD 14) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + mark_as_advanced(FORCE CMAKE_INSTALL_PREFIX) ++include(GNUInstallDirs) + + project(FEBio) + set(FEBIO_LIBS FEBioFluid FEBioLib FEBioMech FEBioMix FEBioOpt FECore NumCore FEAMR FEBioRVE FEImgLib) +@@ -51,7 +52,7 @@ find_library(TEMP NAMES ${libName}.lib ${ARGV3}.lib ${ARGV4}.lib ${ARGV5}.lib ${ARGV6}.lib PATHS ${${libDir}} NO_DEFAULT_PATH) else() @@ -9,18 +19,53 @@ PATHS ${${libDir}} NO_DEFAULT_PATH) endif() -diff --git a/FindDependencies.cmake b/FindDependencies.cmake -index 2d644005f..7261ba923 100644 ---- a/FindDependencies.cmake -+++ b/FindDependencies.cmake -@@ -46,8 +46,8 @@ if(MKLROOT) - NO_DEFAULT_PATH) - - find_library(MKL_OMP_LIB -- NAMES iomp5 iomp5md libiomp5md.lib -- PATHS ${MKLROOT}/../lib ${MKLROOT}/../compiler/lib -+ NAMES libiomp5@so@ libiomp5 iomp5 iomp5md libiomp5md.lib -+ PATHS ${MKLROOT}/lib ${MKLROOT}/../lib ${MKLROOT}/../compiler/lib - PATH_SUFFIXES "intel64" "intel32" - NO_DEFAULT_PATH - DOC "MKL OMP Library") +@@ -154,7 +155,7 @@ + ##### Find Source Files ##### + + macro(findHdrSrc name) +- file(GLOB HDR_${name} "${name}/*.h") ++ file(GLOB HDR_${name} "${name}/*.h" "${name}/*.hpp") + file(GLOB SRC_${name} "${name}/*.cpp") + endmacro() + +@@ -171,8 +172,9 @@ + + macro(addLib name TYPE) + string(TOLOWER ${name} lname) +- add_library(${lname} ${TYPE} ${HDR_${name}} ${SRC_${name}}) ++ add_library(${lname} ${TYPE} ${SRC_${name}}) + set_property(TARGET ${lname} PROPERTY AUTOGEN_BUILD_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/AutoGen/${name}_autogen) ++ target_sources(${lname} PUBLIC FILE_SET HEADERS TYPE HEADERS FILES ${HDR_${name}}) + + if(NOT WIN32) + set_property(TARGET ${lname} PROPERTY POSITION_INDEPENDENT_CODE ON) +@@ -181,6 +183,8 @@ + if(APPLE) + target_link_libraries(${lname} PRIVATE "-undefined dynamic_lookup") + endif() ++ ++ install(TARGETS ${lname} FILE_SET HEADERS) + endmacro() + + foreach(name IN LISTS FEBIO_LIBS) +@@ -194,6 +198,7 @@ + ##### Set up executable compilation ##### + file(GLOB SOURCES "FEBio/*.cpp") + add_executable (febio4 ${SOURCES}) ++install(TARGETS febio4) + + if(WIN32) + target_compile_options(febio4 PRIVATE /openmp) +@@ -269,7 +274,6 @@ + mark_as_advanced(EXTRA_INC) + + ##### Setup includes, defnitions, and linking options ##### +-include_directories(${PROJECT_SOURCE_DIR}) + + # Link LEVMAR + if(USE_LEVMAR) +@@ -438,3 +442,4 @@ + file(WRITE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/febio.xml "${filedata}") + endif() + ++install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/febio.xml TYPE BIN) diff --git a/pkgs/by-name/fe/febio/package.nix b/pkgs/by-name/fe/febio/package.nix index 4e37ebd76495..01897ae76036 100644 --- a/pkgs/by-name/fe/febio/package.nix +++ b/pkgs/by-name/fe/febio/package.nix @@ -1,68 +1,66 @@ { lib, stdenv, + overrideSDK, fetchFromGitHub, + fetchpatch2, + substituteAll, cmake, - boost, - eigen, - libxml2, - mpi, - python3, + ninja, + zlib, + darwin, mklSupport ? true, mkl, - substituteAll, }: -stdenv.mkDerivation rec { +let + stdenv' = if stdenv.isDarwin then overrideSDK stdenv "11.0" else stdenv; +in + +stdenv'.mkDerivation (finalAttrs: { pname = "FEBio"; - version = "3.6"; + version = "4.7"; src = fetchFromGitHub { owner = "febiosoftware"; - repo = pname; - rev = "v${version}"; - sha256 = "187s4lyzr806xla3smq3lsvj3f6wxlhfkban89w0fnyfmfb8w9am"; + repo = "FEBio"; + rev = "v${finalAttrs.version}"; + hash = "sha256-RRdIOyXg4jYW76ABfJdMfVtCYMLYFdvyOI98nHXCof8="; }; patches = [ + # Fix library searching and installation (substituteAll { - src = ./fix-cmake.patch; # cannot find mkl libraries without this + src = ./fix-cmake.patch; so = stdenv.hostPlatform.extensions.sharedLibrary; }) + + # Fixed missing header include for strcpy + # https://github.com/febiosoftware/FEBio/pull/92 + (fetchpatch2 { + url = "https://github.com/febiosoftware/FEBio/commit/ad9e80e2aa8737828855458a703822f578db2fd3.patch?full_index=1"; + hash = "sha256-/uLnJB/oAwLQnsZtJnUlaAEpyZVLG6o2riRwwMCH8rI="; + }) ]; - cmakeFlags = lib.optional mklSupport "-DUSE_MKL=On" ++ lib.optional mklSupport "-DMKLROOT=${mkl}"; + cmakeFlags = lib.optionals mklSupport [ + (lib.cmakeBool "USE_MKL" true) + (lib.cmakeFeature "MKLROOT" "${mkl}") + ]; - env.CXXFLAGS = lib.optionalString stdenv.isLinux "-include cstring"; + nativeBuildInputs = [ + cmake + ninja + ]; - installPhase = '' - runHook preInstall - - mkdir -p $out/include - cp -R lib bin $out/ - cp -R ../FECore \ - ../FEBioFluid \ - ../FEBioLib \ - ../FEBioMech \ - ../FEBioMix \ - ../FEBioOpt \ - ../FEBioPlot \ - ../FEBioXML \ - ../NumCore \ - $out/include - - runHook postInstall - ''; - - nativeBuildInputs = [ cmake ]; - buildInputs = [ - boost - eigen - libxml2 - mpi - python3 - python3.pkgs.numpy - ] ++ lib.optional mklSupport mkl; + buildInputs = + [ zlib ] + ++ lib.optionals mklSupport [ mkl ] + ++ lib.optionals stdenv.isDarwin [ + darwin.apple_sdk.frameworks.CoreGraphics + darwin.apple_sdk.frameworks.CoreVideo + darwin.apple_sdk.frameworks.Accelerate + ]; meta = { description = "FEBio Suite Solver"; @@ -71,4 +69,4 @@ stdenv.mkDerivation rec { platforms = lib.platforms.unix; maintainers = with lib.maintainers; [ Scriptkiddi ]; }; -} +})