mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
95 lines
3.0 KiB
CMake
95 lines
3.0 KiB
CMake
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|ARM64|aarch64|AARCH64")
|
|
set(DEFAULT_ZIG_ARCH "aarch64")
|
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|x64|AMD64")
|
|
set(DEFAULT_ZIG_ARCH "x86_64")
|
|
else()
|
|
unsupported(CMAKE_SYSTEM_PROCESSOR)
|
|
endif()
|
|
|
|
if(APPLE)
|
|
set(DEFAULT_ZIG_TARGET ${DEFAULT_ZIG_ARCH}-macos-none)
|
|
elseif(WIN32)
|
|
set(DEFAULT_ZIG_TARGET ${DEFAULT_ZIG_ARCH}-windows-msvc)
|
|
elseif(LINUX)
|
|
if(ABI STREQUAL "musl")
|
|
set(DEFAULT_ZIG_TARGET ${DEFAULT_ZIG_ARCH}-linux-musl)
|
|
else()
|
|
set(DEFAULT_ZIG_TARGET ${DEFAULT_ZIG_ARCH}-linux-gnu)
|
|
endif()
|
|
else()
|
|
unsupported(CMAKE_SYSTEM_NAME)
|
|
endif()
|
|
|
|
set(ZIG_COMMIT "c1423ff3fc7064635773a4a4616c5bf986eb00fe")
|
|
optionx(ZIG_TARGET STRING "The zig target to use" DEFAULT ${DEFAULT_ZIG_TARGET})
|
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
if(ENABLE_ASAN)
|
|
set(DEFAULT_ZIG_OPTIMIZE "ReleaseSafe")
|
|
else()
|
|
set(DEFAULT_ZIG_OPTIMIZE "ReleaseFast")
|
|
endif()
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
|
set(DEFAULT_ZIG_OPTIMIZE "ReleaseSafe")
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
|
|
set(DEFAULT_ZIG_OPTIMIZE "ReleaseSmall")
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
set(DEFAULT_ZIG_OPTIMIZE "Debug")
|
|
else()
|
|
unsupported(CMAKE_BUILD_TYPE)
|
|
endif()
|
|
|
|
# Since Bun 1.1, Windows has been built using ReleaseSafe.
|
|
# This is because it caught more crashes, but we can reconsider this in the future
|
|
if(WIN32 AND DEFAULT_ZIG_OPTIMIZE STREQUAL "ReleaseFast")
|
|
set(DEFAULT_ZIG_OPTIMIZE "ReleaseSafe")
|
|
endif()
|
|
|
|
optionx(ZIG_OPTIMIZE "ReleaseFast|ReleaseSafe|ReleaseSmall|Debug" "The Zig optimize level to use" DEFAULT ${DEFAULT_ZIG_OPTIMIZE})
|
|
|
|
# To use LLVM bitcode from Zig, more work needs to be done. Currently, an install of
|
|
# LLVM 18.1.7 does not compatible with what bitcode Zig 0.13 outputs (has LLVM 18.1.7)
|
|
# Change to "bc" to experiment, "Invalid record" means it is not valid output.
|
|
optionx(ZIG_OBJECT_FORMAT "obj|bc" "Output file format for Zig object files" DEFAULT obj)
|
|
|
|
optionx(ZIG_LOCAL_CACHE_DIR FILEPATH "The path to local the zig cache directory" DEFAULT ${CACHE_PATH}/zig/local)
|
|
optionx(ZIG_GLOBAL_CACHE_DIR FILEPATH "The path to the global zig cache directory" DEFAULT ${CACHE_PATH}/zig/global)
|
|
|
|
optionx(ZIG_COMPILER_SAFE BOOL "Download a ReleaseSafe build of the Zig compiler." DEFAULT ${CI})
|
|
|
|
setenv(ZIG_LOCAL_CACHE_DIR ${ZIG_LOCAL_CACHE_DIR})
|
|
setenv(ZIG_GLOBAL_CACHE_DIR ${ZIG_GLOBAL_CACHE_DIR})
|
|
|
|
setx(ZIG_PATH ${VENDOR_PATH}/zig)
|
|
|
|
if(WIN32)
|
|
setx(ZIG_EXECUTABLE ${ZIG_PATH}/zig.exe)
|
|
else()
|
|
setx(ZIG_EXECUTABLE ${ZIG_PATH}/zig)
|
|
endif()
|
|
|
|
set(CMAKE_ZIG_FLAGS
|
|
--cache-dir ${ZIG_LOCAL_CACHE_DIR}
|
|
--global-cache-dir ${ZIG_GLOBAL_CACHE_DIR}
|
|
--zig-lib-dir ${ZIG_PATH}/lib
|
|
)
|
|
|
|
register_command(
|
|
TARGET
|
|
clone-zig
|
|
COMMENT
|
|
"Downloading zig"
|
|
COMMAND
|
|
${CMAKE_COMMAND}
|
|
-DZIG_PATH=${ZIG_PATH}
|
|
-DZIG_COMMIT=${ZIG_COMMIT}
|
|
-DENABLE_ASAN=${ENABLE_ASAN}
|
|
-DENABLE_VALGRIND=${ENABLE_VALGRIND}
|
|
-DZIG_COMPILER_SAFE=${ZIG_COMPILER_SAFE}
|
|
-P ${CWD}/cmake/scripts/DownloadZig.cmake
|
|
SOURCES
|
|
${CWD}/cmake/scripts/DownloadZig.cmake
|
|
OUTPUTS
|
|
${ZIG_EXECUTABLE}
|
|
)
|