mirror of https://github.com/mamba-org/mamba.git
Only full shared or full static build (#2342)
This commit is contained in:
parent
2811c25d75
commit
b38377a479
|
@ -23,7 +23,7 @@ jobs:
|
|||
- name: create build environment
|
||||
uses: mamba-org/provision-with-micromamba@main
|
||||
with:
|
||||
environment-file: ./libmamba/environment-dev.yml
|
||||
environment-file: ./libmamba/environment-static-dev.yml
|
||||
environment-name: build_env
|
||||
cache-env: true
|
||||
- uses: hendrikmuhs/ccache-action@main
|
||||
|
@ -283,9 +283,53 @@ jobs:
|
|||
- name: create build environment
|
||||
uses: mamba-org/provision-with-micromamba@main
|
||||
with:
|
||||
environment-file: ./libmamba/environment-dev.yml
|
||||
environment-file: ./libmamba/environment-static-dev-win.yml
|
||||
environment-name: build_env
|
||||
cache-env: true
|
||||
- name: fix up vcpkg recipes
|
||||
shell: python
|
||||
run: |
|
||||
# See https://github.com/microsoft/vcpkg/pull/28919
|
||||
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
vcpkg_root = Path(os.environ["MAMBA_ROOT_PREFIX"]) / "envs" / "build_env" / "Library" / "share" / "vcpkg"
|
||||
f = vcpkg_root / "scripts" / "cmake" / "vcpkg_acquire_msys.cmake"
|
||||
|
||||
text = f.read_text()
|
||||
|
||||
text = text.replace("b309799e5a9d248ef66eaf11a0bd21bf4e8b9bd5c677c627ec83fa760ce9f0b54ddf1b62cbb436e641fbbde71e3b61cb71ff541d866f8ca7717a3a0dbeb00ebf",
|
||||
"a202ddaefa93d8a4b15431dc514e3a6200c47275c5a0027c09cc32b28bc079b1b9a93d5ef65adafdc9aba5f76a42f3303b1492106ddf72e67f1801ebfe6d02cc")
|
||||
text = text.replace("https://repo.msys2.org/msys/x86_64/libtool-2.4.6-9-x86_64.pkg.tar.xz", "https://repo.msys2.org/msys/x86_64/libtool-2.4.7-3-x86_64.pkg.tar.zst")
|
||||
|
||||
f.write_text(text)
|
||||
- name: build static windows dependencies with vcpkg
|
||||
shell: cmd /C CALL {0}
|
||||
run: |
|
||||
call micromamba activate build_env
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
mkdir build
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
cd build
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
git clone https://github.com/conda-forge/micromamba-feedstock.git
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
ROBOCOPY micromamba-feedstock/recipe/libsolv %VCPKG_ROOT%/ports/libsolv
|
||||
@rem ROBOCOPY has 0 and 1 as successfull exit codes
|
||||
if %errorlevel% neq 0 if %errorlevel% neq 1 exit /b %errorlevel%
|
||||
SET VCPKG_BUILD_TYPE=release && vcpkg install libsolv[conda] --triplet x64-windows-static
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
vcpkg install "libarchive[bzip2,lz4,lzma,lzo,openssl,zstd]" --triplet x64-windows-static
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
vcpkg install curl --triplet x64-windows-static
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
vcpkg install yaml-cpp --triplet x64-windows-static
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
vcpkg install reproc --triplet x64-windows-static
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
set CMAKE_PREFIX_PATH=%VCPKG_ROOT%\installed\x64-windows-static\;%CMAKE_PREFIX_PATH%
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
- uses: hendrikmuhs/ccache-action@main
|
||||
with:
|
||||
variant: sccache
|
||||
|
@ -295,8 +339,6 @@ jobs:
|
|||
run: |
|
||||
call micromamba activate build_env
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
mkdir build
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
cd build
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX%\Library ^
|
||||
|
@ -499,9 +541,8 @@ jobs:
|
|||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX%\Library ^
|
||||
-DBUILD_MICROMAMBA=ON ^
|
||||
-DMICROMAMBA_LINKAGE=STATIC ^
|
||||
-DBUILD_LIBMAMBA=ON ^
|
||||
-DBUILD_STATIC=ON ^
|
||||
-DBUILD_SHARED=ON ^
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache ^
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=sccache ^
|
||||
-GNinja
|
||||
|
@ -515,7 +556,10 @@ jobs:
|
|||
- name: build cache statistics
|
||||
run: sccache --show-stats
|
||||
- name: tar micromamba artifact
|
||||
run: tar -cvf umamba.tar build/micromamba/micromamba.exe
|
||||
shell: cmd /C call {0}
|
||||
run: |
|
||||
cp build/libmamba/libmamba.dll build/micromamba/
|
||||
tar -cvf umamba.tar build/micromamba/micromamba.exe build/micromamba/libmamba.dll
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: _internal_micromamba_binary
|
||||
|
|
|
@ -160,9 +160,8 @@ jobs:
|
|||
-D CMAKE_C_COMPILER_LAUNCHER=sccache ^
|
||||
-D CMAKE_BUILD_TYPE="Release" ^
|
||||
-D BUILD_LIBMAMBA=ON ^
|
||||
-D BUILD_STATIC_DEPS=ON ^
|
||||
-D BUILD_STATIC=ON ^
|
||||
-D BUILD_MICROMAMBA=ON ^
|
||||
-D MICROMAMBA_LINKAGE=FULL_STATIC ^
|
||||
-G "Ninja"
|
||||
if %errorlevel% neq 0 exit /b %errorlevel%
|
||||
ninja install
|
||||
|
|
|
@ -4,14 +4,9 @@
|
|||
#
|
||||
# The full license is in the file LICENSE, distributed with this software.
|
||||
|
||||
cmake_minimum_required (VERSION 3.2)
|
||||
if(POLICY CMP0025)
|
||||
cmake_policy(SET CMP0025 NEW)
|
||||
endif()
|
||||
cmake_policy(SET CMP0077 NEW)
|
||||
#if(POLICY CMP0028)
|
||||
# cmake_policy(SET CMP0028 NEW)
|
||||
#endif()
|
||||
cmake_minimum_required (VERSION 3.16)
|
||||
cmake_policy(SET CMP0025 NEW) # Introduced in cmake 3.0
|
||||
cmake_policy(SET CMP0077 NEW) # Introduced in cmake 3.13
|
||||
|
||||
project(mamba)
|
||||
|
||||
|
|
|
@ -81,34 +81,18 @@ Static library
|
|||
cmake --build build/
|
||||
|
||||
.. note::
|
||||
``libmamba-static`` ``cmake`` target represents the static library without any dependency linkage
|
||||
|
||||
Fully static library
|
||||
********************
|
||||
|
||||
``BUILD_STATIC_DEPS`` option needs to be activated:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
cmake -B build/ \
|
||||
-DBUILD_LIBMAMBA=ON \
|
||||
-DBUILD_STATIC_DEPS=ON
|
||||
cmake --build build/
|
||||
|
||||
.. note::
|
||||
``libmamba-full-static`` ``cmake`` target represents the static library with static dependencies linkage
|
||||
``libmamba-static`` ``cmake`` target represents the static library with static dependencies linkage
|
||||
|
||||
.. note::
|
||||
The ``libmamba`` static library does not embed the dependencies but the ``cmake`` target will expose those dependencies to any executable linking on it
|
||||
|
||||
.. note::
|
||||
The fully statically lib still has few symbols required from system shared libraries (``glibc`` for instance)
|
||||
The ``libmamba`` static lib still has few symbols required from system shared libraries (``glibc`` for instance)
|
||||
|
||||
.. warning::
|
||||
This version of the library has a small difference versus the static and shared ones, on the way the SSL backend of cURL is set
|
||||
This version of the library has a small difference versus the shared one, on the way the SSL backend of cURL is set
|
||||
See `libmamba/src/core/fetch.cpp` for more information
|
||||
|
||||
|
||||
Tests
|
||||
*****
|
||||
|
||||
|
@ -215,7 +199,7 @@ To build ``micromamba``, activate the ``BUILD_MICROMAMBA`` flag in ``cmake`` com
|
|||
|
||||
cmake -B build/ \
|
||||
-DBUILD_MICROMAMBA=ON \
|
||||
-DMICROMAMBA_LINKAGE=DYNAMIC
|
||||
-DBULD_SHARED=ON
|
||||
cmake --build build/
|
||||
|
||||
or rebuild ``libmamba`` in the same time:
|
||||
|
@ -227,8 +211,7 @@ or rebuild ``libmamba`` in the same time:
|
|||
-DBUILD_SHARED=ON \
|
||||
-DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX \
|
||||
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
|
||||
-DBUILD_MICROMAMBA=ON \
|
||||
-DMICROMAMBA_LINKAGE=DYNAMIC
|
||||
-DBUILD_MICROMAMBA=ON
|
||||
cmake --build build/
|
||||
|
||||
.. note::
|
||||
|
@ -251,13 +234,21 @@ or rebuild ``libmamba`` in the same time:
|
|||
Statically linked
|
||||
*****************
|
||||
|
||||
You can also build ``micromamba`` statically linked against ``libmamba``:
|
||||
You can also build ``micromamba`` as a fully statically linked executable. For that, you need to install extra requirements:
|
||||
|
||||
.. code::
|
||||
|
||||
micromamba install --name <env_name> --file ./libmamba/environment-static-dev.yml
|
||||
|
||||
It will install the development version of dependencies, including static libraries.
|
||||
|
||||
Now you can run ``cmake``:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
cmake -B build/ \
|
||||
-DBUILD_MICROMAMBA=ON \
|
||||
-DMICROMAMBA_LINKAGE=STATIC
|
||||
-DBUILD_STATIC=ON
|
||||
cmake --build build/
|
||||
|
||||
or with ``libmamba``:
|
||||
|
@ -269,46 +260,12 @@ or with ``libmamba``:
|
|||
-DBUILD_STATIC=ON \
|
||||
-DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX \
|
||||
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
|
||||
-DBUILD_MICROMAMBA=ON \
|
||||
-DMICROMAMBA_LINKAGE=STATIC
|
||||
-DBUILD_MICROMAMBA=ON
|
||||
cmake --build build/
|
||||
|
||||
.. note::
|
||||
``MICROMAMBA_LINKAGE`` default value is ``DYNAMIC``
|
||||
|
||||
.. note::
|
||||
``micromamba`` will be then statically linked against ``libmamba`` but still dynamically linked against all its dependencies (``libsolv``, ``libarchive``, etc.)
|
||||
|
||||
Fully statically linked
|
||||
***********************
|
||||
|
||||
``micromamba`` can be built as a fully statically linked executable. For that, you need to install extra requirements:
|
||||
|
||||
.. code::
|
||||
|
||||
micromamba install --name <env_name> --file ./libmamba/environment-static-dev.yml
|
||||
|
||||
It will install the development version of dependencies, including static libraries.
|
||||
|
||||
Now you can run ``cmake`` with the additional flag ``MICROMAMBA_STATIC_DEPS`` turned on:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
cmake -B build/ \
|
||||
-DBUILD_MICROMAMBA=ON \
|
||||
-DMICROMAMBA_LINKAGE=FULL_STATIC
|
||||
cmake --build build/
|
||||
|
||||
or with ``libmamba``:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
cmake -B build/ \
|
||||
-DBUILD_LIBMAMBA=ON \
|
||||
-DBUILD_STATIC_DEPS=ON \
|
||||
-DBUILD_MICROMAMBA=ON \
|
||||
-DMICROMAMBA_LINKAGE=FULL_STATIC
|
||||
cmake --build build/
|
||||
If you decide to build both the static and shared libraries, ``micromamba`` will link with the shared one. To link
|
||||
with the static library, pass the additional build option ``-DMICROMAMBA_LINKAGE=STATIC``
|
||||
|
||||
Tests
|
||||
*****
|
||||
|
|
|
@ -4,10 +4,9 @@
|
|||
#
|
||||
# The full license is in the file LICENSE, distributed with this software.
|
||||
|
||||
cmake_minimum_required(VERSION 3.18.2)
|
||||
cmake_policy(SET CMP0025 NEW)
|
||||
cmake_policy(SET CMP0077 NEW)
|
||||
|
||||
cmake_minimum_required (VERSION 3.16)
|
||||
cmake_policy(SET CMP0025 NEW) # Introduced in cmake 3.0
|
||||
cmake_policy(SET CMP0077 NEW) # Introduced in cmake 3.13
|
||||
project(libmamba)
|
||||
|
||||
set(LIBMAMBA_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||
|
@ -48,19 +47,15 @@ message(STATUS "libmamba binary version: v${LIBMAMBA_BINARY_VERSION}")
|
|||
|
||||
option(BUILD_TESTS "Build libmamba C++ tests" OFF)
|
||||
option(BUILD_SHARED "Build shared libmamba library" OFF)
|
||||
option(BUILD_STATIC "Build static libmamba library" OFF)
|
||||
option(BUILD_STATIC_DEPS "Build static libmamba library with static linkage to its dependencies" OFF)
|
||||
option(BUILD_STATIC "Build static libmamba library with static linkage to its dependencies" OFF)
|
||||
set(BUILD_LOG_LEVEL "TRACE" CACHE STRING "Logger active level at compile time")
|
||||
|
||||
if (NOT ${BUILD_LOG_LEVEL} MATCHES "^(TRACE|DEBUG|INFO|WARN|ERROR|CRITICAL|OFF)$")
|
||||
message(FATAL_ERROR "Invalid log level: ${BUILD_LOG_LEVEL}, should be one of { TRACE, DEBUG, INFO, WARN, ERROR, CRITICAL, OFF }")
|
||||
endif ()
|
||||
|
||||
if (BUILD_STATIC_DEPS)
|
||||
if (BUILD_STATIC)
|
||||
add_definitions("-DSPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_${BUILD_LOG_LEVEL}")
|
||||
endif ()
|
||||
|
||||
if (BUILD_STATIC_DEPS)
|
||||
add_definitions(-DLIBMAMBA_STATIC_DEPS)
|
||||
endif ()
|
||||
|
||||
|
@ -264,17 +259,12 @@ set(LIBMAMBA_PRIVATE_HEADERS
|
|||
# Targets and link
|
||||
# ================
|
||||
|
||||
macro(libmamba_create_target target_name linkage deps_linkage output_name)
|
||||
macro(libmamba_create_target target_name linkage output_name)
|
||||
string(TOUPPER "${linkage}" linkage_upper)
|
||||
if (NOT ${linkage_upper} MATCHES "^(SHARED|STATIC)$")
|
||||
message(FATAL_ERROR "Invalid library linkage: ${linkage}")
|
||||
endif ()
|
||||
|
||||
string(TOUPPER "${deps_linkage}" deps_linkage_upper)
|
||||
if (NOT ${deps_linkage_upper} MATCHES "^(SHARED|STATIC)$")
|
||||
message(FATAL_ERROR "Invalid library dependencies linkage: ${deps_linkage_upper}")
|
||||
endif ()
|
||||
|
||||
# Output
|
||||
# ======
|
||||
add_library(
|
||||
|
@ -289,7 +279,7 @@ macro(libmamba_create_target target_name linkage deps_linkage output_name)
|
|||
WARNING_AS_ERROR ${MAMBA_WARNING_AS_ERROR}
|
||||
)
|
||||
|
||||
if (${deps_linkage_upper} STREQUAL "STATIC")
|
||||
if (${linkage_upper} STREQUAL "STATIC")
|
||||
message(" -> Statically linking against libmamba (static) dependencies")
|
||||
if (UNIX)
|
||||
|
||||
|
@ -357,18 +347,19 @@ macro(libmamba_create_target target_name linkage deps_linkage output_name)
|
|||
|
||||
if (APPLE)
|
||||
set (MAMBA_FORCE_DYNAMIC_LIBS resolv c++abi)
|
||||
target_link_options(libmamba-full-static PRIVATE -static-libstdc++)
|
||||
target_link_options(${target_name} PRIVATE -static-libstdc++)
|
||||
elseif (UNIX)
|
||||
set(MAMBA_FORCE_DYNAMIC_LIBS rt dl resolv)
|
||||
target_link_options(libmamba-full-static PUBLIC -static-libstdc++ -static-libgcc)
|
||||
target_link_options(${target_name} PUBLIC -static-libstdc++ -static-libgcc)
|
||||
endif()
|
||||
|
||||
find_package(fmt REQUIRED)
|
||||
find_package(spdlog CONFIG REQUIRED)
|
||||
find_package(tl-expected REQUIRED)
|
||||
|
||||
add_compile_definitions(SPDLOG_FMT_EXTERNAL)
|
||||
target_link_libraries(
|
||||
libmamba-full-static
|
||||
${target_name}
|
||||
PUBLIC
|
||||
${STATIC_DEPS}
|
||||
${MAMBA_FORCE_DYNAMIC_LIBS}
|
||||
|
@ -379,6 +370,7 @@ macro(libmamba_create_target target_name linkage deps_linkage output_name)
|
|||
elseif (WIN32)
|
||||
|
||||
set(CMAKE_PREFIX_PATH "$ENV{VCPKG_ROOT}/installed/x64-windows-static/")
|
||||
set_target_properties(${target_name} PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||
|
||||
# For Windows we have a vcpkg based build system right now.
|
||||
find_package(LibArchive REQUIRED)
|
||||
|
@ -437,7 +429,6 @@ macro(libmamba_create_target target_name linkage deps_linkage output_name)
|
|||
CURL_STATICLIB
|
||||
SOLV_BUILD_STATIC
|
||||
)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
|
||||
include_directories($ENV{CONDA_PREFIX}/Library/include/)
|
||||
include_directories($ENV{VCPKG_ROOT}/installed/x64-windows-static/include/)
|
||||
endif()
|
||||
|
@ -508,7 +499,7 @@ macro(libmamba_create_target target_name linkage deps_linkage output_name)
|
|||
set_target_properties(
|
||||
${target_name}
|
||||
PROPERTIES
|
||||
PUBLIC_HEADER "${LIBMAMBA_PUBLIC_HEADERS}"
|
||||
#PUBLIC_HEADER "${LIBMAMBA_PUBLIC_HEADERS}"
|
||||
COMPILE_DEFINITIONS "LIBMAMBA_EXPORTS"
|
||||
PREFIX ""
|
||||
VERSION "${LIBMAMBA_BINARY_COMPATIBLE}.${LIBMAMBA_BINARY_REVISION}.${LIBMAMBA_BINARY_AGE}"
|
||||
|
@ -519,7 +510,7 @@ macro(libmamba_create_target target_name linkage deps_linkage output_name)
|
|||
set_target_properties(
|
||||
${target_name}
|
||||
PROPERTIES
|
||||
PUBLIC_HEADER "${LIBMAMBA_PUBLIC_HEADERS}"
|
||||
#PUBLIC_HEADER "${LIBMAMBA_PUBLIC_HEADERS}"
|
||||
COMPILE_DEFINITIONS "LIBMAMBA_EXPORTS"
|
||||
PREFIX ""
|
||||
VERSION ${LIBMAMBA_BINARY_VERSION}
|
||||
|
@ -546,7 +537,7 @@ set(libmamba_targets "")
|
|||
|
||||
if (BUILD_SHARED)
|
||||
message(STATUS "Adding shared libmamba target")
|
||||
libmamba_create_target(libmamba SHARED SHARED libmamba)
|
||||
libmamba_create_target(libmamba SHARED libmamba)
|
||||
endif ()
|
||||
|
||||
if (BUILD_STATIC)
|
||||
|
@ -555,23 +546,13 @@ if (BUILD_STATIC)
|
|||
# On Windows, a static library should use a different output name
|
||||
# to avoid the conflict with the import library of a shared one.
|
||||
if (CMAKE_HOST_WIN32)
|
||||
libmamba_create_target(libmamba-static STATIC SHARED libmamba_static)
|
||||
libmamba_create_target(libmamba-static STATIC libmamba_static)
|
||||
else ()
|
||||
libmamba_create_target(libmamba-static STATIC SHARED libmamba)
|
||||
libmamba_create_target(libmamba-static STATIC libmamba)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (BUILD_STATIC_DEPS)
|
||||
message(STATUS "Adding full-static libmamba target")
|
||||
|
||||
if (CMAKE_HOST_WIN32)
|
||||
libmamba_create_target(libmamba-full-static STATIC STATIC libmamba_full_static)
|
||||
else ()
|
||||
libmamba_create_target(libmamba-full-static STATIC STATIC libmamba_full_static)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (NOT (BUILD_SHARED OR BUILD_STATIC OR BUILD_STATIC_DEPS))
|
||||
if (NOT (BUILD_SHARED OR BUILD_STATIC))
|
||||
message(FATAL_ERROR "Select at least a build variant for libmamba")
|
||||
endif ()
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@ name: mamba-dev
|
|||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- cxx-compiler
|
||||
- cmake
|
||||
- ninja
|
||||
- yaml-cpp-static
|
||||
- spdlog
|
||||
- fmt
|
||||
|
@ -20,3 +23,5 @@ dependencies:
|
|||
- reproc-cpp-static
|
||||
- openssl
|
||||
- libopenssl-static
|
||||
- nlohmann_json
|
||||
- cpp-expected
|
||||
|
|
|
@ -30,24 +30,16 @@ find_dependency(tl-expected)
|
|||
find_dependency(zstd)
|
||||
find_dependency(BZip2)
|
||||
|
||||
if(NOT (TARGET libmamba OR TARGET libmamba-static OR TARGET libmamba-full-static))
|
||||
if(NOT (TARGET libmamba OR TARGET libmamba-static))
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
|
||||
|
||||
if (TARGET libmamba-static)
|
||||
get_target_property(@PROJECT_NAME@_INCLUDE_DIR libmamba-static INTERFACE_INCLUDE_DIRECTORIES)
|
||||
get_target_property(@PROJECT_NAME@_STATIC_LIBRARY libmamba-static LOCATION)
|
||||
endif ()
|
||||
if (TARGET libmamba-full-static)
|
||||
get_target_property(@PROJECT_NAME@_FULL_STATIC_LIBRARY libmamba-full-static LOCATION)
|
||||
endif ()
|
||||
|
||||
if (TARGET libmamba)
|
||||
get_target_property(@PROJECT_NAME@_INCLUDE_DIR libmamba INTERFACE_INCLUDE_DIRECTORIES)
|
||||
get_target_property(@PROJECT_NAME@_LIBRARY libmamba LOCATION)
|
||||
elseif (TARGET libmamba-static)
|
||||
get_target_property(@PROJECT_NAME@_INCLUDE_DIR libmamba-static INTERFACE_INCLUDE_DIRECTORIES)
|
||||
set(@PROJECT_NAME@_LIBRARY ${@PROJECT_NAME@_STATIC_LIBRARY})
|
||||
elseif (TARGET libmamba-full-static)
|
||||
get_target_property(@PROJECT_NAME@_INCLUDE_DIR libmamba-full-static INTERFACE_INCLUDE_DIRECTORIES)
|
||||
set(@PROJECT_NAME@_LIBRARY ${@PROJECT_NAME@_STATIC_LIBRARY})
|
||||
endif ()
|
||||
endif()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
cmake_minimum_required(VERSION 3.1)
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
|
||||
add_executable(testing_libmamba_lock testing/lock.cpp)
|
||||
|
|
|
@ -4,24 +4,22 @@
|
|||
#
|
||||
# The full license is in the file LICENSE, distributed with this software.
|
||||
|
||||
cmake_minimum_required (VERSION 3.2)
|
||||
if(POLICY CMP0025)
|
||||
cmake_policy(SET CMP0025 NEW)
|
||||
endif()
|
||||
cmake_policy(SET CMP0077 NEW)
|
||||
cmake_minimum_required (VERSION 3.16)
|
||||
cmake_policy(SET CMP0025 NEW) # Introduced in cmake 3.0
|
||||
cmake_policy(SET CMP0077 NEW) # Introduced in cmake 3.13
|
||||
|
||||
project(mamba-package)
|
||||
|
||||
# Build options
|
||||
# =============
|
||||
|
||||
set(MAMBA_PACKAGE_LINKAGE "DYNAMIC" CACHE STRING "mamba-package linkage against libraries")
|
||||
|
||||
string(TOUPPER "${MAMBA_PACKAGE_LINKAGE}" linkage_upper)
|
||||
if (NOT ${linkage_upper} MATCHES "^(DYNAMIC|STATIC|FULL_STATIC)$")
|
||||
message(FATAL_ERROR "Invalid executable linkage: ${MAMBA_PACKAGE_LINKAGE}, should be one of { DYNAMIC, STATIC, FULL_STATIC }")
|
||||
if (BUILD_STATIC AND NOT BUILD_SHARED)
|
||||
set(MAMBA_PACKAGE_LINKAGE "STATIC" CACHE STRING "mamba-package linkage against libraries")
|
||||
else ()
|
||||
set(MAMBA_PACKAGE_LINKAGE "DYNAMIC" CACHE STRING "mamba-package linkage against libraries")
|
||||
endif ()
|
||||
|
||||
string(TOUPPER "${MAMBA_PACKAGE_LINKAGE}" linkage_upper)
|
||||
message(STATUS "'mamba-package' linkage: ${MAMBA_PACKAGE_LINKAGE}")
|
||||
|
||||
# Source files
|
||||
|
@ -39,7 +37,7 @@ set(MAMBA_PACKAGE_HEADERS
|
|||
# Dependencies
|
||||
# ============
|
||||
|
||||
if(NOT (TARGET libmamba OR TARGET libmamba-static OR TARGET libmamba-full-static))
|
||||
if(NOT (TARGET libmamba OR TARGET libmamba-static))
|
||||
find_package(libmamba REQUIRED)
|
||||
endif ()
|
||||
|
||||
|
@ -49,10 +47,11 @@ endif ()
|
|||
add_executable(mamba-package ${MAMBA_PACKAGE_SRCS} ${MAMBA_PACKAGE_HEADERS})
|
||||
mamba_target_add_compile_warnings(mamba-package WARNING_AS_ERROR ${MAMBA_WARNING_AS_ERROR})
|
||||
|
||||
if (${MAMBA_PACKAGE_LINKAGE} STREQUAL "FULL_STATIC")
|
||||
target_link_libraries(mamba-package PRIVATE libmamba-full-static)
|
||||
elseif (${MAMBA_PACKAGE_LINKAGE} STREQUAL "STATIC")
|
||||
if (${MAMBA_PACKAGE_LINKAGE} STREQUAL "STATIC")
|
||||
target_link_libraries(mamba-package PRIVATE libmamba-static)
|
||||
if (WIN32)
|
||||
set_target_properties(mamba-package PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||
endif ()
|
||||
else ()
|
||||
target_link_libraries(mamba-package PRIVATE libmamba)
|
||||
endif ()
|
||||
|
|
|
@ -4,18 +4,19 @@
|
|||
#
|
||||
# The full license is in the file LICENSE, distributed with this software.
|
||||
|
||||
cmake_minimum_required (VERSION 3.2)
|
||||
if(POLICY CMP0025)
|
||||
cmake_policy(SET CMP0025 NEW)
|
||||
endif()
|
||||
cmake_policy(SET CMP0077 NEW)
|
||||
|
||||
cmake_minimum_required (VERSION 3.16)
|
||||
cmake_policy(SET CMP0025 NEW) # Introduced in cmake 3.0
|
||||
cmake_policy(SET CMP0077 NEW) # Introduced in cmake 3.13
|
||||
project(micromamba)
|
||||
|
||||
# Build options
|
||||
# =============
|
||||
|
||||
set(MICROMAMBA_LINKAGE "DYNAMIC" CACHE STRING "micromamba linkage against libraries")
|
||||
if (BUILD_STATIC AND NOT BUILD_SHARED)
|
||||
set(MICROMAMBA_LINKAGE "STATIC" CACHE STRING "micromamba linkage against libraries")
|
||||
else ()
|
||||
set(MICROMAMBA_LINKAGE "DYNAMIC" CACHE STRING "micromamba linkage against libraries")
|
||||
endif ()
|
||||
|
||||
# Source files
|
||||
# ============
|
||||
|
@ -55,27 +56,21 @@ add_executable(micromamba ${MICROMAMBA_SRCS} ${MICROMAMBA_HEADERS})
|
|||
|
||||
mamba_target_add_compile_warnings(micromamba WARNING_AS_ERROR ${MAMBA_WARNING_AS_ERROR})
|
||||
|
||||
if(NOT (TARGET libmamba OR TARGET libmamba-static OR TARGET libmamba-full-static))
|
||||
if(NOT (TARGET libmamba OR TARGET libmamba-static))
|
||||
find_package(libmamba REQUIRED)
|
||||
endif ()
|
||||
|
||||
string(TOUPPER "${MICROMAMBA_LINKAGE}" linkage_upper)
|
||||
if (NOT ${linkage_upper} MATCHES "^(DYNAMIC|STATIC|FULL_STATIC)$")
|
||||
message(FATAL_ERROR "Invalid executable linkage: ${MICROMAMBA_LINKAGE}, should be one of { DYNAMIC, STATIC, FULL_STATIC }")
|
||||
endif ()
|
||||
|
||||
message(STATUS "Micromamba linkage: ${MICROMAMBA_LINKAGE}")
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(micromamba PRIVATE Threads::Threads)
|
||||
|
||||
if (${MICROMAMBA_LINKAGE} STREQUAL "FULL_STATIC")
|
||||
target_link_libraries(micromamba PRIVATE libmamba-full-static)
|
||||
if (WIN32)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
|
||||
endif ()
|
||||
elseif (${MICROMAMBA_LINKAGE} STREQUAL "STATIC")
|
||||
string(TOUPPER "${MICROMAMBA_LINKAGE}" linkage_upper)
|
||||
message(STATUS "Micromamba linkage: ${MICROMAMBA_LINKAGE}")
|
||||
|
||||
if (${MICROMAMBA_LINKAGE} STREQUAL "STATIC")
|
||||
target_link_libraries(micromamba PRIVATE libmamba-static)
|
||||
if (WIN32)
|
||||
set_target_properties(micromamba PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||
endif ()
|
||||
else ()
|
||||
target_link_libraries(micromamba PRIVATE libmamba)
|
||||
endif ()
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
# Conda's binary relocation can result in string changing which can result in errors like
|
||||
# > warning: command substitution: ignored null byte in input
|
||||
# https://github.com/mamba-org/mamba/issues/1517
|
||||
export CXXFLAGS="${CXXFLAGS} -fno-merge-constants"
|
||||
export CFLAGS="${CFLAGS} -fno-merge-constants"
|
||||
export CXXFLAGS="${CXXFLAGS} -D_LIBCPP_DISABLE_AVAILABILITY=1"
|
||||
|
||||
cmake -B build \
|
||||
-G Ninja \
|
||||
${CMAKE_ARGS} \
|
||||
-D CMAKE_INSTALL_PREFIX=${PREFIX} \
|
||||
-D CMAKE_BUILD_TYPE="Release" \
|
||||
-D BUILD_LIBMAMBA=ON \
|
||||
-D BUILD_STATIC=ON \
|
||||
-D BUILD_MICROMAMBA=ON
|
||||
cmake --build build/ --parallel ${CPU_COUNT}
|
||||
cmake --install build/
|
||||
|
||||
# remove everything related to `libmamba`
|
||||
rm -rf $PREFIX/lib/libmamba*
|
||||
rm -rf $PREFIX/include/mamba
|
||||
rm -rf $PREFIX/lib/cmake/libmamba
|
||||
|
||||
${STRIP:-strip} ${PREFIX}/bin/micromamba
|
||||
|
||||
if [[ "$target_platform" == "osx-"* ]]; then
|
||||
OTOOL_OUTPUT=$(${OTOOL:-otool} -L ${PREFIX}/bin/micromamba)
|
||||
if [[ "$OTOOL_OUTPUT" == *libc++.1.dylib* ]]; then
|
||||
echo "micromamba is linked to libc++.1.dlyb"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
Loading…
Reference in New Issue