diff --git a/CMakeLists.txt b/CMakeLists.txt index 54d974a26..d3df54878 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,17 @@ cmake_minimum_required(VERSION 3.25) -project(mlx LANGUAGES C CXX) +if(NOT MLX_VERSION) + set(MLX_VERSION 0.23.1) + set(MLX_PROJECT_VERSION ${MLX_VERSION}) +else() + string(REGEX REPLACE "^([0-9]+\.[0-9]+\.[0-9]+).*" "\\1" MLX_PROJECT_VERSION + ${MLX_VERSION}) +endif() + +project( + mlx + LANGUAGES C CXX + VERSION ${MLX_PROJECT_VERSION}) # ----------------------------- Setup ----------------------------- set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") @@ -24,10 +35,17 @@ option(MLX_BUILD_BLAS_FROM_SOURCE "Build OpenBLAS from source code" OFF) option(MLX_METAL_JIT "Use JIT compilation for Metal kernels" OFF) option(BUILD_SHARED_LIBS "Build mlx as a shared library" OFF) -if(NOT MLX_VERSION) - set(MLX_VERSION 0.23.1) -endif() -add_compile_definitions("MLX_VERSION=${MLX_VERSION}") +math( + EXPR + MLX_VERSION_NUMERIC + "1000000 * ${PROJECT_VERSION_MAJOR} + 1000 * ${PROJECT_VERSION_MINOR} + ${PROJECT_VERSION_PATCH}" + OUTPUT_FORMAT DECIMAL) +add_compile_definitions( + "MLX_VERSION=${MLX_VERSION}" + "MLX_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}" + "MLX_VERSION_MINOR=${PROJECT_VERSION_MINOR}" + "MLX_VERSION_PATCH=${PROJECT_VERSION_PATCH}" + "MLX_VERSION_NUMERIC=${MLX_VERSION_NUMERIC}") # --------------------- Processor tests ------------------------- message( diff --git a/mlx/export.cpp b/mlx/export.cpp index 935c87142..361d73f66 100644 --- a/mlx/export.cpp +++ b/mlx/export.cpp @@ -4,9 +4,7 @@ #include "mlx/fast_primitives.h" #include "mlx/primitives.h" #include "mlx/utils.h" - -#define STRINGIFY(x) #x -#define TOSTRING(x) STRINGIFY(x) +#include "mlx/version.h" // clang-format off #define SERIALIZE_PRIMITIVE(primitive, ...) \ @@ -379,7 +377,7 @@ struct PrimitiveFactory { }; void write_header(Writer& os, int count, bool shapeless) { - serialize(os, std::string(TOSTRING(MLX_VERSION))); + serialize(os, std::string(version())); serialize(os, count); serialize(os, shapeless); } diff --git a/mlx/mlx.h b/mlx/mlx.h index 36acb5e30..0fc657ca4 100644 --- a/mlx/mlx.h +++ b/mlx/mlx.h @@ -19,3 +19,4 @@ #include "mlx/stream.h" #include "mlx/transforms.h" #include "mlx/utils.h" +#include "mlx/version.h" diff --git a/mlx/version.h b/mlx/version.h new file mode 100644 index 000000000..218d44731 --- /dev/null +++ b/mlx/version.h @@ -0,0 +1,32 @@ +// Copyright © 2023-2024 Apple Inc. + +#pragma once + +#include + +#define STRINGIFY(x) #x +#define TOSTRING(x) STRINGIFY(x) + +namespace mlx::core { + +constexpr const char* version() { + return TOSTRING(MLX_VERSION); +} + +constexpr int version_major() { + return MLX_VERSION_MAJOR; +} + +constexpr int version_minor() { + return MLX_VERSION_MINOR; +} + +constexpr int version_patch() { + return MLX_VERSION_PATCH; +} + +constexpr int version_numeric() { + return MLX_VERSION_NUMERIC; +} + +} // namespace mlx::core