Added mamba as dynamic build of micromamba (#3060)

This commit is contained in:
Johan Mabille 2023-12-14 14:22:31 +01:00 committed by GitHub
parent 7709425155
commit 4f2d1ebd43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 85 additions and 61 deletions

View File

@ -105,8 +105,8 @@ jobs:
run: | run: |
python -m pytest libmambapy/tests/ ${{ runner.debug == 'true' && '-v' || '--exitfirst' }} python -m pytest libmambapy/tests/ ${{ runner.debug == 'true' && '-v' || '--exitfirst' }}
umamba_integration_tests_unix: mamba_integration_tests_unix:
name: Test integration micromamba name: Test integration mamba
needs: ["build_shared_unix"] needs: ["build_shared_unix"]
runs-on: ${{ inputs.os }} runs-on: ${{ inputs.os }}
steps: steps:
@ -131,9 +131,9 @@ jobs:
if: startsWith(inputs.os, 'macos') if: startsWith(inputs.os, 'macos')
run: | run: |
brew install fish xonsh brew install fish xonsh
- name: micromamba python based tests - name: mamba python based tests
run: | run: |
export TEST_MAMBA_EXE=$(pwd)/build/micromamba/micromamba export TEST_MAMBA_EXE=$(pwd)/build/micromamba/mamba
unset CONDARC # Interferes with tests unset CONDARC # Interferes with tests
python -m pytest micromamba/tests/ \ python -m pytest micromamba/tests/ \
${{ runner.debug == 'true' && '-v --capture=tee-sys' || '--exitfirst' }} ${{ runner.debug == 'true' && '-v --capture=tee-sys' || '--exitfirst' }}

View File

@ -113,8 +113,8 @@ jobs:
run: | run: |
python -m pytest libmambapy/tests/ ${{ runner.debug == 'true' && '-v' || '--exitfirst' }} python -m pytest libmambapy/tests/ ${{ runner.debug == 'true' && '-v' || '--exitfirst' }}
umamba_integration_tests_win: mamba_integration_tests_win:
name: Test integration micromamba name: Test integration mamba
needs: ["build_shared_win"] needs: ["build_shared_win"]
runs-on: ${{ inputs.os }} runs-on: ${{ inputs.os }}
steps: steps:
@ -132,16 +132,16 @@ jobs:
environment-file: ./build/environment.lock environment-file: ./build/environment.lock
environment-name: build_env environment-name: build_env
init-shell: bash cmd.exe powershell init-shell: bash cmd.exe powershell
- name: Install micromamba - name: Install mamba
shell: bash -elo pipefail {0} shell: bash -elo pipefail {0}
run: | run: |
cmake --install build/ --prefix local/ cmake --install build/ --prefix local/
- name: micromamba python based tests with pwsh - name: mamba python based tests with pwsh
shell: pwsh shell: pwsh
run: | run: |
$env:PYTHONIOENCODING='UTF-8' $env:PYTHONIOENCODING='UTF-8'
$env:MAMBA_ROOT_PREFIX = Join-Path -Path $pwd -ChildPath 'mambaroot' $env:MAMBA_ROOT_PREFIX = Join-Path -Path $pwd -ChildPath 'mambaroot'
$env:TEST_MAMBA_EXE = Join-Path -Path $pwd -ChildPath 'local\bin\micromamba.exe' $env:TEST_MAMBA_EXE = Join-Path -Path $pwd -ChildPath 'local\bin\mamba.exe'
$env:MAMBA_TEST_SHELL_TYPE='powershell' $env:MAMBA_TEST_SHELL_TYPE='powershell'
Remove-Item -Path "env:CONDARC" Remove-Item -Path "env:CONDARC"
python -m pytest micromamba/tests/ ` python -m pytest micromamba/tests/ `

View File

@ -13,9 +13,12 @@ project(mamba)
# Build options # Build options
# ============= # =============
option(BUILD_SHARED "Build shared libmamba library" OFF)
option(BUILD_STATIC "Build static libmamba library with static linkage to its dependencies" OFF)
option(BUILD_LIBMAMBA "Build libmamba library" OFF) option(BUILD_LIBMAMBA "Build libmamba library" OFF)
option(BUILD_LIBMAMBAPY "Build libmamba Python bindings" OFF) option(BUILD_LIBMAMBAPY "Build libmamba Python bindings" OFF)
option(BUILD_LIBMAMBA_TESTS "Build libmamba C++ tests" OFF) option(BUILD_LIBMAMBA_TESTS "Build libmamba C++ tests" OFF)
option(BUILD_MAMBA "Build mamba" OFF)
option(BUILD_MICROMAMBA "Build micromamba" OFF) option(BUILD_MICROMAMBA "Build micromamba" OFF)
option(BUILD_MAMBA_PACKAGE "Build mamba package utility" OFF) option(BUILD_MAMBA_PACKAGE "Build mamba package utility" OFF)
option(MAMBA_WARNING_AS_ERROR "Treat compiler warnings as errors" OFF) option(MAMBA_WARNING_AS_ERROR "Treat compiler warnings as errors" OFF)
@ -59,6 +62,16 @@ endif()
# Variants # Variants
# ======== # ========
# mamba is a dynamic build of micromamba
if(BUILD_MAMBA)
set(BUILD_SHARED ON)
endif()
# micromamba requires static linkage
if(BUILD_MICROMAMBA)
set(BUILD_STATIC ON)
endif()
# libmamba library and tests # libmamba library and tests
if(BUILD_LIBMAMBA) if(BUILD_LIBMAMBA)
add_subdirectory(libmamba) add_subdirectory(libmamba)
@ -70,7 +83,7 @@ if(BUILD_LIBMAMBAPY)
endif() endif()
# micromamba # micromamba
if(BUILD_MICROMAMBA) if(BUILD_MICROMAMBA OR BUILD_MAMBA)
add_subdirectory(micromamba) add_subdirectory(micromamba)
endif() endif()

View File

@ -4,7 +4,7 @@
"displayName": "Mamba Unix Shared Debug", "displayName": "Mamba Unix Shared Debug",
"inherits": [ "inherits": [
"conda-unix", "conda-unix",
"mamba-all", "libmamba-all",
"mamba-shared", "mamba-shared",
"mamba-debug" "mamba-debug"
], ],
@ -14,7 +14,7 @@
"displayName": "Mamba Unix Shared Release", "displayName": "Mamba Unix Shared Release",
"inherits": [ "inherits": [
"conda-unix", "conda-unix",
"mamba-all", "libmamba-all",
"mamba-shared", "mamba-shared",
"mamba-release" "mamba-release"
], ],
@ -31,7 +31,7 @@
{ {
"displayName": "Mamba Win Shared Release", "displayName": "Mamba Win Shared Release",
"inherits": [ "inherits": [
"mamba-all", "libmamba-all",
"mamba-shared", "mamba-shared",
"mamba-release" "mamba-release"
], ],

View File

@ -5,17 +5,16 @@
"BUILD_LIBMAMBA": "ON", "BUILD_LIBMAMBA": "ON",
"BUILD_LIBMAMBAPY": "ON", "BUILD_LIBMAMBAPY": "ON",
"BUILD_LIBMAMBA_TESTS": "ON", "BUILD_LIBMAMBA_TESTS": "ON",
"BUILD_MAMBA_PACKAGE": "ON", "BUILD_MAMBA_PACKAGE": "ON"
"BUILD_MICROMAMBA": "ON",
"BUILD_MICROMAMBA_SERVER": "ON"
}, },
"description": "Base profile for building everything in Mamba", "description": "Base profile for building libmamba and related",
"displayName": "Mamba All", "displayName": "libmamba All",
"hidden": true, "hidden": true,
"name": "mamba-all" "name": "libmamba-all"
}, },
{ {
"cacheVariables": { "cacheVariables": {
"BUILD_MAMBA": "ON",
"BUILD_SHARED": "ON" "BUILD_SHARED": "ON"
}, },
"hidden": true, "hidden": true,
@ -23,6 +22,8 @@
}, },
{ {
"cacheVariables": { "cacheVariables": {
"BUILD_MICROMAMBA": "ON",
"BUILD_MICROMAMBA_SERVER": "ON",
"BUILD_STATIC": "ON" "BUILD_STATIC": "ON"
}, },
"hidden": true, "hidden": true,

View File

@ -58,9 +58,6 @@ message(STATUS "libmamba binary version: v${LIBMAMBA_BINARY_VERSION}")
# Build options # Build options
# ============= # =============
option(BUILD_TESTS "Build libmamba C++ tests" OFF)
option(BUILD_SHARED "Build shared libmamba library" OFF)
option(BUILD_STATIC "Build static libmamba library with static linkage to its dependencies" OFF)
set( set(
BUILD_LOG_LEVEL BUILD_LOG_LEVEL
"TRACE" "TRACE"
@ -74,6 +71,7 @@ if(NOT ${BUILD_LOG_LEVEL} MATCHES "^(TRACE|DEBUG|INFO|WARN|ERROR|CRITICAL|OFF)$"
) )
endif() endif()
# TODO: move this into the mamba_create_target macro
if(BUILD_STATIC) if(BUILD_STATIC)
add_definitions("-DSPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_${BUILD_LOG_LEVEL}") add_definitions("-DSPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_${BUILD_LOG_LEVEL}")
add_definitions(-DLIBMAMBA_STATIC_DEPS) add_definitions(-DLIBMAMBA_STATIC_DEPS)

View File

@ -9,24 +9,6 @@ cmake_policy(SET CMP0025 NEW) # Introduced in cmake 3.0
cmake_policy(SET CMP0077 NEW) # Introduced in cmake 3.13 cmake_policy(SET CMP0077 NEW) # Introduced in cmake 3.13
project(micromamba) project(micromamba)
# Build options
# =============
option(BUILD_MICROMAMBA_SERVER "Build the micromamba server" OFF)
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 # Source files
# ============ # ============
@ -68,30 +50,60 @@ if(UNIX AND BUILD_MICROMAMBA_SERVER)
add_definitions(-DMICROMAMBA_SERVER) add_definitions(-DMICROMAMBA_SERVER)
endif() endif()
add_executable(micromamba ${MICROMAMBA_SRCS} ${MICROMAMBA_HEADERS}) # Targets and link
# ================
mamba_target_add_compile_warnings(micromamba WARNING_AS_ERROR ${MAMBA_WARNING_AS_ERROR})
mamba_target_set_lto(micromamba MODE ${MAMBA_LTO})
if(NOT (TARGET mamba::libmamba-dyn OR TARGET mamba::libmamba-static))
find_package(libmamba REQUIRED)
endif()
string(TOUPPER "${MICROMAMBA_LINKAGE}" linkage_upper)
message(STATUS "Micromamba linkage: ${MICROMAMBA_LINKAGE}")
if(${MICROMAMBA_LINKAGE} STREQUAL "STATIC")
set(libmamba_target mamba::libmamba-static)
else()
set(libmamba_target mamba::libmamba-dyn)
endif()
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
find_package(reproc REQUIRED) find_package(reproc REQUIRED)
find_package(reproc++ REQUIRED) find_package(reproc++ REQUIRED)
target_link_libraries(micromamba PRIVATE ${libmamba_target} Threads::Threads reproc reproc++) macro(mambaexe_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()
set_property(TARGET micromamba PROPERTY CXX_STANDARD 17) # Output
# ======
add_executable(${target_name} ${MICROMAMBA_SRCS} ${MICROMAMBA_HEADERS})
mamba_target_add_compile_warnings(${target_name} WARNING_AS_ERROR ${MAMBA_WARNING_AS_ERROR})
mamba_target_set_lto(${target_name} MODE ${MAMBA_LTO})
set_property(TARGET ${target_name} PROPERTY CXX_STANDARD 17)
install(TARGETS micromamba) target_link_libraries(${target_name} PRIVATE Threads::Threads reproc reproc++)
# Static build
# ============
if(${linkage_upper} STREQUAL "STATIC")
if(NOT (TARGET mamba::libmamba-static))
find_package(libmamba REQUIRED)
endif()
target_link_libraries(${target_name} PRIVATE mamba::libmamba-static)
# Dynamic build
# =============
else()
if(NOT (TARGET mamba::libmamba-dyn))
find_package(libmamba REQUIRED)
endif()
target_link_libraries(${target_name} PRIVATE mamba::libmamba-dyn)
endif()
list(APPEND mambaexe_targets ${target_name})
endmacro()
set(mambaexe_targets "")
if(BUILD_SHARED)
message(STATUS "Adding executable mamba")
mambaexe_create_target(mamba SHARED mamba)
endif()
if(BUILD_STATIC)
message(STATUS "Adding executable micromamba")
mambaexe_create_target(micromamba STATIC micromamba)
endif()
# Installation
# ============
install(TARGETS ${mambaexe_targets})

View File

@ -329,7 +329,7 @@ def test_shell_init(
path = Path(paths[plat][interpreter]).expanduser() path = Path(paths[plat][interpreter]).expanduser()
with open(path) as fi: with open(path) as fi:
x = fi.read() x = fi.read()
assert "micromamba" in x assert "mamba" in x
assert find_path_in_str(tmp_root_prefix, x) assert find_path_in_str(tmp_root_prefix, x)
prev_text = x prev_text = x