vcpkg/ports/ngspice/portfile.cmake
Alexander Neumann de2e526fbc
[ngspice] msbuild (#33160)
* ngspice msbuild

* v db

* Update ports/ngspice/portfile.cmake

* fix install

* v db
2023-08-15 16:45:38 -07:00

90 lines
3.6 KiB
CMake

vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY)
# ngspice produces self-contained DLLs
set(VCPKG_CRT_LINKAGE static)
vcpkg_from_sourceforge(
OUT_SOURCE_PATH SOURCE_PATH
REPO ngspice/ng-spice-rework
REF ${VERSION}
FILENAME "ngspice-${VERSION}.tar.gz"
SHA512 724415cea3249d049d796360f5f59ec5e68edb1899e82b0fbd68455791863c274abe1a505b7148ef96adbb485bc677d38432fa4effe4069bbdfe284ff3e59921
PATCHES
use-winbison-sharedspice.patch
use-winbison-vngspice.patch
remove-post-build.patch
remove-64-in-codemodel-name.patch
Fix-C2065.patch
)
vcpkg_find_acquire_program(BISON)
get_filename_component(BISON_DIR "${BISON}" DIRECTORY)
vcpkg_add_to_path(PREPEND "${BISON_DIR}")
# Sadly, vcpkg globs .libs inside install_msbuild and whines that the 47 year old SPICE format isn't a MSVC lib ;)
# We need to kill them off first before the source tree is copied to a tmp location by install_msbuild
file(REMOVE_RECURSE "${SOURCE_PATH}/contrib")
file(REMOVE_RECURSE "${SOURCE_PATH}/examples")
file(REMOVE_RECURSE "${SOURCE_PATH}/man")
file(REMOVE_RECURSE "${SOURCE_PATH}/tests")
# this builds the main dll
vcpkg_msbuild_install(
SOURCE_PATH "${SOURCE_PATH}"
# install_msbuild swaps x86 for win32(bad) if we dont force our own setting
PLATFORM ${TRIPLET_SYSTEM_ARCH}
PROJECT_SUBPATH visualc/sharedspice.sln
TARGET Build
)
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING")
file(COPY "${SOURCE_PATH}/src/include/" DESTINATION "${CURRENT_PACKAGES_DIR}/include")
if("codemodels" IN_LIST FEATURES)
# vngspice generates "codemodels" to enhance simulation capabilities
# we cannot use install_msbuild as they output with ".cm" extensions on purpose
vcpkg_msbuild_install(
SOURCE_PATH "${SOURCE_PATH}"
PROJECT_SUBPATH visualc/vngspice.sln
# build_msbuild swaps x86 for win32(bad) if we dont force our own setting
PLATFORM ${TRIPLET_SYSTEM_ARCH}
TARGET Build
)
# ngspice oddly has solution configs of x64 and x86 but
# output folders of x64 and win32
if(VCPKG_TARGET_ARCHITECTURE STREQUAL x64)
set(OUT_ARCH x64)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL x86)
set(OUT_ARCH Win32)
else()
message(FATAL_ERROR "Unsupported target architecture")
endif()
#put the code models in the intended location
if(NOT VCPKG_BUILD_TYPE)
file(GLOB NGSPICE_CODEMODELS_DEBUG
"${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/visualc/codemodels/${OUT_ARCH}/Debug/*.cm"
)
file(COPY ${NGSPICE_CODEMODELS_DEBUG} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib/ngspice")
endif()
file(GLOB NGSPICE_CODEMODELS_RELEASE
"${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/visualc/codemodels/${OUT_ARCH}/Release/*.cm"
)
file(COPY ${NGSPICE_CODEMODELS_RELEASE} DESTINATION "${CURRENT_PACKAGES_DIR}/lib/ngspice")
# copy over spinit (spice init)
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/visualc/spinit_all" DESTINATION "${CURRENT_PACKAGES_DIR}/share/ngspice")
file(RENAME "${CURRENT_PACKAGES_DIR}/share/ngspice/spinit_all" "${CURRENT_PACKAGES_DIR}/share/ngspice/spinit")
endif()
# Unforunately install_msbuild isn't able to dual include directories that effectively layer
file(GLOB NGSPICE_INCLUDES "${SOURCE_PATH}/visualc/src/include/ngspice/*")
file(COPY ${NGSPICE_INCLUDES} DESTINATION "${CURRENT_PACKAGES_DIR}/include/ngspice")
# This gets copied by install_msbuild but should not be shared
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/cppduals")