mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
bun run zig-format (#14152)
This commit is contained in:
61
.github/workflows/format.yml
vendored
61
.github/workflows/format.yml
vendored
@@ -1,61 +0,0 @@
|
||||
name: Format
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: format-${{ github.workflow }}-${{ github.event_name == 'workflow_dispatch' && inputs.run-id || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
run-id:
|
||||
type: string
|
||||
description: The workflow ID to download artifacts (skips the build step)
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
format:
|
||||
name: Format
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
sparse-checkout: |
|
||||
.prettierrc-ci
|
||||
.github
|
||||
.vscode
|
||||
src
|
||||
scripts
|
||||
packages
|
||||
test
|
||||
bench
|
||||
package.json
|
||||
bun.lockb
|
||||
.clang-format
|
||||
- name: Setup Bun
|
||||
uses: ./.github/actions/setup-bun
|
||||
with:
|
||||
bun-version: "1.1.25"
|
||||
- name: Setup Zig
|
||||
uses: mlugg/setup-zig@v1
|
||||
with:
|
||||
version: 0.13.0
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
bun install
|
||||
- name: Format
|
||||
run: |
|
||||
bun fmt
|
||||
- name: Format Zig
|
||||
run: |
|
||||
bun fmt:zig
|
||||
- name: Format Cpp
|
||||
run: |
|
||||
bun fmt:cpp
|
||||
- name: Commit
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: Apply formatting changes
|
||||
53
.github/workflows/run-format.yml
vendored
53
.github/workflows/run-format.yml
vendored
@@ -1,53 +0,0 @@
|
||||
name: Format
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
zig-version:
|
||||
type: string
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
format:
|
||||
name: Format
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
sparse-checkout: |
|
||||
.prettierrc-ci
|
||||
.github
|
||||
.vscode
|
||||
src
|
||||
scripts
|
||||
packages
|
||||
test
|
||||
bench
|
||||
package.json
|
||||
bun.lockb
|
||||
.clang-format
|
||||
- name: Setup Bun
|
||||
uses: ./.github/actions/setup-bun
|
||||
with:
|
||||
bun-version: "1.1.25"
|
||||
- name: Setup Zig
|
||||
uses: mlugg/setup-zig@v1
|
||||
with:
|
||||
version: ${{ inputs.zig-version }}
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
bun install
|
||||
- name: Format
|
||||
run: |
|
||||
bun fmt
|
||||
- name: Format Zig
|
||||
run: |
|
||||
bun fmt:zig
|
||||
- name: Commit
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: Apply formatting changes
|
||||
45
.github/workflows/zig-format.yml
vendored
Normal file
45
.github/workflows/zig-format.yml
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
name: zig-format
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
paths:
|
||||
- ".github/workflows/zig-format.yml"
|
||||
- "package.json"
|
||||
- "scripts/**"
|
||||
- "cmake/**"
|
||||
- "src/**/*.zig"
|
||||
|
||||
env:
|
||||
BUN_VERSION: "1.1.27"
|
||||
|
||||
jobs:
|
||||
zig-format:
|
||||
name: zig-format
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
sparse-checkout: |
|
||||
.github
|
||||
package.json
|
||||
scripts
|
||||
cmake
|
||||
src
|
||||
packages
|
||||
- name: Setup Bun
|
||||
uses: ./.github/actions/setup-bun
|
||||
with:
|
||||
bun-version: ${{ env.BUN_VERSION }}
|
||||
- name: Zig Format
|
||||
run: |
|
||||
bun run zig-format -DENABLE_CCACHE=OFF -DSKIP_LLVM=ON
|
||||
- name: Commit
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: "`bun run zig-format`"
|
||||
@@ -43,3 +43,4 @@ include(BuildBun)
|
||||
# --- Analysis ---
|
||||
|
||||
include(RunClangFormat)
|
||||
include(RunZigFormat)
|
||||
|
||||
@@ -575,14 +575,6 @@ function(register_repository)
|
||||
set(GIT_PATH ${VENDOR_PATH}/${GIT_NAME})
|
||||
endif()
|
||||
|
||||
if(GIT_COMMIT)
|
||||
set(GIT_REF ${GIT_COMMIT})
|
||||
elseif(GIT_TAG)
|
||||
set(GIT_REF refs/tags/${GIT_TAG})
|
||||
else()
|
||||
set(GIT_REF refs/heads/${GIT_BRANCH})
|
||||
endif()
|
||||
|
||||
set(GIT_EFFECTIVE_OUTPUTS)
|
||||
foreach(output ${GIT_OUTPUTS})
|
||||
list(APPEND GIT_EFFECTIVE_OUTPUTS ${GIT_PATH}/${output})
|
||||
@@ -597,8 +589,10 @@ function(register_repository)
|
||||
${CMAKE_COMMAND}
|
||||
-DGIT_PATH=${GIT_PATH}
|
||||
-DGIT_REPOSITORY=${GIT_REPOSITORY}
|
||||
-DGIT_REF=${GIT_REF}
|
||||
-DGIT_NAME=${GIT_NAME}
|
||||
-DGIT_COMMIT=${GIT_COMMIT}
|
||||
-DGIT_TAG=${GIT_TAG}
|
||||
-DGIT_BRANCH=${GIT_BRANCH}
|
||||
-P ${CWD}/cmake/scripts/GitClone.cmake
|
||||
OUTPUTS
|
||||
${GIT_PATH}
|
||||
|
||||
26
cmake/analysis/RunZigFormat.cmake
Normal file
26
cmake/analysis/RunZigFormat.cmake
Normal file
@@ -0,0 +1,26 @@
|
||||
set(ZIG_FORMAT_SOURCES ${BUN_ZIG_SOURCES})
|
||||
|
||||
register_command(
|
||||
TARGET
|
||||
zig-format-check
|
||||
COMMENT
|
||||
"Checking zig fmt"
|
||||
COMMAND
|
||||
${ZIG_EXECUTABLE}
|
||||
fmt
|
||||
--check
|
||||
${ZIG_FORMAT_SOURCES}
|
||||
ALWAYS_RUN
|
||||
)
|
||||
|
||||
register_command(
|
||||
TARGET
|
||||
zig-format
|
||||
COMMENT
|
||||
"Running zig fmt"
|
||||
COMMAND
|
||||
${ZIG_EXECUTABLE}
|
||||
fmt
|
||||
${ZIG_FORMAT_SOURCES}
|
||||
ALWAYS_RUN
|
||||
)
|
||||
131
cmake/scripts/DownloadUrl.cmake
Normal file
131
cmake/scripts/DownloadUrl.cmake
Normal file
@@ -0,0 +1,131 @@
|
||||
get_filename_component(SCRIPT_NAME ${CMAKE_CURRENT_LIST_FILE} NAME)
|
||||
message(STATUS "Running script: ${SCRIPT_NAME}")
|
||||
|
||||
if(NOT DOWNLOAD_URL OR NOT DOWNLOAD_PATH)
|
||||
message(FATAL_ERROR "DOWNLOAD_URL and DOWNLOAD_PATH are required")
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
set(TMP_PATH $ENV{TEMP})
|
||||
else()
|
||||
set(TMP_PATH $ENV{TMPDIR})
|
||||
endif()
|
||||
|
||||
if(NOT TMP_PATH)
|
||||
set(TMP_PATH ${CMAKE_BINARY_DIR}/tmp)
|
||||
endif()
|
||||
|
||||
string(REGEX REPLACE "/+$" "" TMP_PATH ${TMP_PATH})
|
||||
string(REGEX REPLACE "[^a-zA-Z0-9]" "-" DOWNLOAD_ID ${DOWNLOAD_URL})
|
||||
string(RANDOM LENGTH 8 RANDOM_ID)
|
||||
|
||||
set(DOWNLOAD_TMP_PATH ${TMP_PATH}/${DOWNLOAD_ID}-${RANDOM_ID})
|
||||
set(DOWNLOAD_TMP_FILE ${DOWNLOAD_TMP_PATH}/tmp)
|
||||
|
||||
file(REMOVE_RECURSE ${DOWNLOAD_TMP_PATH})
|
||||
|
||||
if(DOWNLOAD_ACCEPT_HEADER)
|
||||
set(DOWNLOAD_ACCEPT_HEADER "Accept: ${DOWNLOAD_ACCEPT_HEADER}")
|
||||
else()
|
||||
set(DOWNLOAD_ACCEPT_HEADER "Accept: */*")
|
||||
endif()
|
||||
|
||||
foreach(i RANGE 10)
|
||||
set(DOWNLOAD_TMP_FILE_${i} ${DOWNLOAD_TMP_FILE}.${i})
|
||||
|
||||
if(i EQUAL 0)
|
||||
message(STATUS "Downloading ${DOWNLOAD_URL}...")
|
||||
else()
|
||||
message(STATUS "Downloading ${DOWNLOAD_URL}... (retry ${i})")
|
||||
endif()
|
||||
|
||||
file(DOWNLOAD
|
||||
${DOWNLOAD_URL}
|
||||
${DOWNLOAD_TMP_FILE_${i}}
|
||||
HTTPHEADER "User-Agent: cmake/${CMAKE_VERSION}"
|
||||
HTTPHEADER ${DOWNLOAD_ACCEPT_HEADER}
|
||||
STATUS DOWNLOAD_STATUS
|
||||
INACTIVITY_TIMEOUT 60
|
||||
TIMEOUT 180
|
||||
SHOW_PROGRESS
|
||||
)
|
||||
|
||||
list(GET DOWNLOAD_STATUS 0 DOWNLOAD_STATUS_CODE)
|
||||
if(DOWNLOAD_STATUS_CODE EQUAL 0)
|
||||
if(NOT EXISTS ${DOWNLOAD_TMP_FILE_${i}})
|
||||
message(WARNING "Download failed: result is ok, but file does not exist: ${DOWNLOAD_TMP_FILE_${i}}")
|
||||
continue()
|
||||
endif()
|
||||
|
||||
file(RENAME ${DOWNLOAD_TMP_FILE_${i}} ${DOWNLOAD_TMP_FILE})
|
||||
break()
|
||||
endif()
|
||||
|
||||
list(GET DOWNLOAD_STATUS 1 DOWNLOAD_STATUS_TEXT)
|
||||
file(REMOVE ${DOWNLOAD_TMP_FILE_${i}})
|
||||
message(WARNING "Download failed: ${DOWNLOAD_STATUS_CODE} ${DOWNLOAD_STATUS_TEXT}")
|
||||
endforeach()
|
||||
|
||||
if(NOT EXISTS ${DOWNLOAD_TMP_FILE})
|
||||
file(REMOVE_RECURSE ${DOWNLOAD_TMP_PATH})
|
||||
message(FATAL_ERROR "Download failed after too many attempts: ${DOWNLOAD_URL}")
|
||||
endif()
|
||||
|
||||
get_filename_component(DOWNLOAD_FILENAME ${DOWNLOAD_URL} NAME)
|
||||
if(DOWNLOAD_FILENAME MATCHES "\\.(zip|tar|gz|xz)$")
|
||||
message(STATUS "Extracting ${DOWNLOAD_FILENAME}...")
|
||||
|
||||
set(DOWNLOAD_TMP_EXTRACT ${DOWNLOAD_TMP_PATH}/extract)
|
||||
file(ARCHIVE_EXTRACT
|
||||
INPUT ${DOWNLOAD_TMP_FILE}
|
||||
DESTINATION ${DOWNLOAD_TMP_EXTRACT}
|
||||
TOUCH
|
||||
)
|
||||
|
||||
file(REMOVE ${DOWNLOAD_TMP_FILE})
|
||||
|
||||
if(DOWNLOAD_FILTERS)
|
||||
list(TRANSFORM DOWNLOAD_FILTERS PREPEND ${DOWNLOAD_TMP_EXTRACT}/ OUTPUT_VARIABLE DOWNLOAD_GLOBS)
|
||||
else()
|
||||
set(DOWNLOAD_GLOBS ${DOWNLOAD_TMP_EXTRACT}/*)
|
||||
endif()
|
||||
|
||||
file(GLOB DOWNLOAD_TMP_EXTRACT_PATHS LIST_DIRECTORIES ON ${DOWNLOAD_GLOBS})
|
||||
list(LENGTH DOWNLOAD_TMP_EXTRACT_PATHS DOWNLOAD_COUNT)
|
||||
|
||||
if(DOWNLOAD_COUNT EQUAL 0)
|
||||
file(REMOVE_RECURSE ${DOWNLOAD_TMP_PATH})
|
||||
|
||||
if(DOWNLOAD_FILTERS)
|
||||
message(FATAL_ERROR "Extract failed: No files found matching ${DOWNLOAD_FILTERS}")
|
||||
else()
|
||||
message(FATAL_ERROR "Extract failed: No files found")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(DOWNLOAD_FILTERS)
|
||||
set(DOWNLOAD_TMP_FILE ${DOWNLOAD_TMP_EXTRACT_PATHS})
|
||||
elseif(DOWNLOAD_COUNT EQUAL 1)
|
||||
list(GET DOWNLOAD_TMP_EXTRACT_PATHS 0 DOWNLOAD_TMP_FILE)
|
||||
get_filename_component(DOWNLOAD_FILENAME ${DOWNLOAD_TMP_FILE} NAME)
|
||||
message(STATUS "Hoisting ${DOWNLOAD_FILENAME}...")
|
||||
else()
|
||||
set(DOWNLOAD_TMP_FILE ${DOWNLOAD_TMP_EXTRACT})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(DOWNLOAD_FILTERS)
|
||||
foreach(file ${DOWNLOAD_TMP_FILE})
|
||||
file(RENAME ${file} ${DOWNLOAD_PATH})
|
||||
endforeach()
|
||||
else()
|
||||
file(REMOVE_RECURSE ${DOWNLOAD_PATH})
|
||||
get_filename_component(DOWNLOAD_PARENT_PATH ${DOWNLOAD_PATH} DIRECTORY)
|
||||
file(MAKE_DIRECTORY ${DOWNLOAD_PARENT_PATH})
|
||||
file(RENAME ${DOWNLOAD_TMP_FILE} ${DOWNLOAD_PATH})
|
||||
endif()
|
||||
|
||||
get_filename_component(DOWNLOAD_FILENAME ${DOWNLOAD_PATH} NAME)
|
||||
message(STATUS "Saved ${DOWNLOAD_FILENAME}")
|
||||
|
||||
file(REMOVE_RECURSE ${DOWNLOAD_TMP_PATH})
|
||||
111
cmake/scripts/DownloadZig.cmake
Normal file
111
cmake/scripts/DownloadZig.cmake
Normal file
@@ -0,0 +1,111 @@
|
||||
get_filename_component(SCRIPT_NAME ${CMAKE_CURRENT_LIST_FILE} NAME)
|
||||
message(STATUS "Running script: ${SCRIPT_NAME}")
|
||||
|
||||
if(NOT ZIG_PATH)
|
||||
message(FATAL_ERROR "ZIG_PATH is required")
|
||||
endif()
|
||||
|
||||
if(ZIG_REPOSITORY)
|
||||
if(NOT ZIG_COMMIT)
|
||||
message(FATAL_ERROR "ZIG_COMMIT is required when ZIG_REPOSITORY is set")
|
||||
endif()
|
||||
elseif(NOT ZIG_COMMIT)
|
||||
set(ZIG_REPOSITORY "oven-sh/zig")
|
||||
set(ZIG_COMMIT "131a009ba2eb127a3447d05b9e12f710429aa5ee")
|
||||
endif()
|
||||
|
||||
if(NOT ZIG_VERSION)
|
||||
set(ZIG_VERSION "0.13.0")
|
||||
endif()
|
||||
|
||||
if(CMAKE_HOST_APPLE)
|
||||
set(ZIG_OS "macos")
|
||||
elseif(CMAKE_HOST_WIN32)
|
||||
set(ZIG_OS "windows")
|
||||
elseif(CMAKE_HOST_UNIX)
|
||||
set(ZIG_OS "linux")
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported operating system: ${CMAKE_HOST_SYSTEM_NAME}")
|
||||
endif()
|
||||
|
||||
# In script mode, using -P, this variable is not set
|
||||
if(NOT DEFINED CMAKE_HOST_SYSTEM_PROCESSOR)
|
||||
cmake_host_system_information(RESULT CMAKE_HOST_SYSTEM_PROCESSOR QUERY OS_PLATFORM)
|
||||
endif()
|
||||
|
||||
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm64|ARM64|aarch64|AARCH64")
|
||||
set(ZIG_ARCH "aarch64")
|
||||
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64|AMD64|x86_64|X86_64|x64|X64")
|
||||
set(ZIG_ARCH "x86_64")
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported architecture: ${CMAKE_HOST_SYSTEM_PROCESSOR}")
|
||||
endif()
|
||||
|
||||
set(ZIG_NAME zig-${ZIG_OS}-${ZIG_ARCH}-${ZIG_VERSION})
|
||||
|
||||
if(CMAKE_HOST_WIN32)
|
||||
set(ZIG_EXE "zig.exe")
|
||||
set(ZIG_FILENAME ${ZIG_NAME}.zip)
|
||||
else()
|
||||
set(ZIG_EXE "zig")
|
||||
set(ZIG_FILENAME ${ZIG_NAME}.tar.xz)
|
||||
endif()
|
||||
|
||||
message(STATUS "Downloading ${ZIG_EXE} ${ZIG_VERSION} on ${ZIG_OS} ${ZIG_ARCH}...")
|
||||
set(ZIG_DOWNLOAD_URL https://ziglang.org/download/${ZIG_VERSION}/${ZIG_FILENAME})
|
||||
|
||||
execute_process(
|
||||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-DDOWNLOAD_URL=${ZIG_DOWNLOAD_URL}
|
||||
-DDOWNLOAD_PATH=${ZIG_PATH}
|
||||
-P ${CMAKE_CURRENT_LIST_DIR}/DownloadUrl.cmake
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_VARIABLE
|
||||
ZIG_DOWNLOAD_ERROR
|
||||
RESULT_VARIABLE
|
||||
ZIG_DOWNLOAD_RESULT
|
||||
)
|
||||
|
||||
if(NOT ZIG_DOWNLOAD_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Download failed: ${ZIG_DOWNLOAD_ERROR}")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS ${ZIG_PATH}/${ZIG_EXE})
|
||||
message(FATAL_ERROR "Download failed: executable not found: \"${ZIG_PATH}/${ZIG_EXE}\"")
|
||||
endif()
|
||||
|
||||
# Tools like VSCode need a stable path to the zig executable, on both Unix and Windows
|
||||
# To workaround this, we create a `bun.exe` symlink on Unix.
|
||||
if(NOT WIN32)
|
||||
file(CREATE_LINK ${ZIG_PATH}/${ZIG_EXE} ${ZIG_PATH}/zig.exe SYMBOLIC)
|
||||
endif()
|
||||
|
||||
if(ZIG_REPOSITORY AND ZIG_COMMIT)
|
||||
message(STATUS "Downloading zig library from ${ZIG_REPOSITORY} at ${ZIG_COMMIT}...")
|
||||
|
||||
execute_process(
|
||||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-DGIT_PATH=${ZIG_PATH}/tmp
|
||||
-DGIT_REPOSITORY=${ZIG_REPOSITORY}
|
||||
-DGIT_COMMIT=${ZIG_COMMIT}
|
||||
-P ${CMAKE_CURRENT_LIST_DIR}/GitClone.cmake
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_VARIABLE
|
||||
ZIG_REPOSITORY_ERROR
|
||||
RESULT_VARIABLE
|
||||
ZIG_REPOSITORY_RESULT
|
||||
)
|
||||
|
||||
if(NOT ZIG_REPOSITORY_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Download failed: ${ZIG_REPOSITORY_ERROR}")
|
||||
endif()
|
||||
|
||||
file(REMOVE_RECURSE ${ZIG_PATH}/lib)
|
||||
file(RENAME ${ZIG_PATH}/tmp/lib ${ZIG_PATH}/lib)
|
||||
file(REMOVE_RECURSE ${ZIG_PATH}/tmp)
|
||||
message(STATUS "Saved ${ZIG_PATH}/lib")
|
||||
endif()
|
||||
|
||||
message(STATUS "Saved ${ZIG_EXE}")
|
||||
@@ -1,74 +1,85 @@
|
||||
include(cmake/Globals.cmake)
|
||||
get_filename_component(SCRIPT_NAME ${CMAKE_CURRENT_LIST_FILE} NAME)
|
||||
message(STATUS "Running script: ${SCRIPT_NAME}")
|
||||
|
||||
if(NOT GIT_PATH OR NOT GIT_REPOSITORY OR NOT GIT_REF)
|
||||
message(FATAL_ERROR "git_clone: GIT_PATH, GIT_REPOSITORY, and GIT_REF are required")
|
||||
if(NOT GIT_PATH OR NOT GIT_REPOSITORY)
|
||||
message(FATAL_ERROR "GIT_PATH and GIT_REPOSITORY are required")
|
||||
endif()
|
||||
|
||||
setx(GIT_PATH ${GIT_PATH})
|
||||
setx(GIT_REPOSITORY ${GIT_REPOSITORY})
|
||||
setx(GIT_REF ${GIT_REF})
|
||||
if(GIT_COMMIT)
|
||||
set(GIT_REF ${GIT_COMMIT})
|
||||
elseif(GIT_TAG)
|
||||
set(GIT_REF refs/tags/${GIT_TAG})
|
||||
elseif(GIT_BRANCH)
|
||||
set(GIT_REF refs/heads/${GIT_BRANCH})
|
||||
else()
|
||||
message(FATAL_ERROR "GIT_COMMIT, GIT_TAG, or GIT_BRANCH are required")
|
||||
endif()
|
||||
|
||||
string(REGEX MATCH "([^/]+)$" GIT_ORIGINAL_NAME ${GIT_REPOSITORY})
|
||||
|
||||
if(NOT GIT_NAME)
|
||||
setx(GIT_NAME ${GIT_ORIGINAL_NAME})
|
||||
set(GIT_NAME ${GIT_ORIGINAL_NAME})
|
||||
endif()
|
||||
|
||||
set(GIT_REF_PATH ${GIT_PATH}/.ref)
|
||||
set(GIT_DOWNLOAD_URL https://github.com/${GIT_REPOSITORY}/archive/${GIT_REF}.tar.gz)
|
||||
|
||||
if(EXISTS ${GIT_REF_PATH})
|
||||
file(READ ${GIT_REF_PATH} GIT_CACHED_REF)
|
||||
if(GIT_CACHED_REF STREQUAL GIT_REF)
|
||||
return()
|
||||
endif()
|
||||
message(STATUS "Cloning ${GIT_REPOSITORY} at ${GIT_REF}...")
|
||||
execute_process(
|
||||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-DDOWNLOAD_URL=${GIT_DOWNLOAD_URL}
|
||||
-DDOWNLOAD_PATH=${GIT_PATH}
|
||||
-DDOWNLOAD_FILTERS=${GIT_FILTERS}
|
||||
-P ${CMAKE_CURRENT_LIST_DIR}/DownloadUrl.cmake
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_VARIABLE
|
||||
GIT_ERROR
|
||||
RESULT_VARIABLE
|
||||
GIT_RESULT
|
||||
)
|
||||
|
||||
if(NOT GIT_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Clone failed: ${GIT_ERROR}")
|
||||
endif()
|
||||
|
||||
setx(GIT_DOWNLOAD_PATH ${GIT_PATH}.tar.gz)
|
||||
setx(GIT_DOWNLOAD_URL https://github.com/${GIT_REPOSITORY}/archive/${GIT_REF}.tar.gz)
|
||||
|
||||
foreach(i RANGE 10)
|
||||
set(GIT_DOWNLOAD_TMP_PATH ${GIT_PATH}.tmp.${i})
|
||||
file(DOWNLOAD
|
||||
${GIT_DOWNLOAD_URL}
|
||||
${GIT_DOWNLOAD_TMP_PATH}
|
||||
TIMEOUT 120
|
||||
STATUS GIT_DOWNLOAD_STATUS
|
||||
SHOW_PROGRESS
|
||||
)
|
||||
if(GIT_DOWNLOAD_STATUS MATCHES "^0" AND EXISTS ${GIT_DOWNLOAD_TMP_PATH})
|
||||
file(RENAME ${GIT_DOWNLOAD_TMP_PATH} ${GIT_DOWNLOAD_PATH})
|
||||
break()
|
||||
endif()
|
||||
message(WARNING "git_clone: ${GIT_DOWNLOAD_STATUS}: ${GIT_DOWNLOAD_URL}")
|
||||
file(REMOVE ${GIT_DOWNLOAD_TMP_PATH})
|
||||
endforeach()
|
||||
|
||||
if(NOT EXISTS ${GIT_DOWNLOAD_PATH})
|
||||
message(FATAL_ERROR "git_clone: failed to download ${GIT_DOWNLOAD_URL}")
|
||||
endif()
|
||||
|
||||
file(REMOVE_RECURSE ${GIT_PATH})
|
||||
get_filename_component(GIT_PARENT_PATH ${GIT_PATH} DIRECTORY)
|
||||
file(ARCHIVE_EXTRACT INPUT ${GIT_DOWNLOAD_PATH} DESTINATION ${GIT_PARENT_PATH}/tmp-${GIT_ORIGINAL_NAME} TOUCH)
|
||||
file(GLOB GIT_TMP_PATH LIST_DIRECTORIES ON ${GIT_PARENT_PATH}/tmp-${GIT_ORIGINAL_NAME}/${GIT_ORIGINAL_NAME}-*)
|
||||
file(RENAME ${GIT_TMP_PATH} ${GIT_PATH})
|
||||
file(REMOVE_RECURSE ${GIT_PARENT_PATH}/tmp-${GIT_ORIGINAL_NAME})
|
||||
file(REMOVE ${GIT_DOWNLOAD_PATH})
|
||||
|
||||
file(GLOB_RECURSE GIT_PATCH_PATHS ${CMAKE_SOURCE_DIR}/patches/${GIT_NAME}/*)
|
||||
foreach(GIT_PATCH_PATH ${GIT_PATCH_PATHS})
|
||||
if(GIT_PATCH_PATH MATCHES "\\.patch$")
|
||||
execute_process(
|
||||
COMMAND git apply --ignore-whitespace --ignore-space-change --no-index --verbose ${GIT_PATCH_PATH}
|
||||
WORKING_DIRECTORY ${GIT_PATH}
|
||||
RESULT_VARIABLE GIT_PATCH_RESULT
|
||||
)
|
||||
if(NOT GIT_PATCH_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "git_clone: failed to apply patch: ${GIT_PATCH_PATH}")
|
||||
endif()
|
||||
else()
|
||||
file(COPY ${GIT_PATCH_PATH} DESTINATION ${GIT_PATH})
|
||||
endif()
|
||||
endforeach()
|
||||
list(LENGTH GIT_PATCH_PATHS GIT_PATCH_COUNT)
|
||||
|
||||
file(WRITE ${GIT_REF_PATH} ${GIT_REF})
|
||||
if(GIT_PATCH_COUNT GREATER 0)
|
||||
find_program(GIT_PROGRAM git REQUIRED)
|
||||
|
||||
foreach(GIT_PATCH ${GIT_PATCH_PATHS})
|
||||
get_filename_component(GIT_PATCH_NAME ${GIT_PATCH} NAME)
|
||||
|
||||
if(GIT_PATCH_NAME MATCHES "\\.patch$")
|
||||
message(STATUS "Applying patch ${GIT_PATCH_NAME}...")
|
||||
execute_process(
|
||||
COMMAND
|
||||
${GIT_PROGRAM}
|
||||
apply
|
||||
--ignore-whitespace
|
||||
--ignore-space-change
|
||||
--no-index
|
||||
--verbose
|
||||
${GIT_PATCH}
|
||||
WORKING_DIRECTORY
|
||||
${GIT_PATH}
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_VARIABLE
|
||||
GIT_PATCH_ERROR
|
||||
RESULT_VARIABLE
|
||||
GIT_PATCH_RESULT
|
||||
)
|
||||
|
||||
if(NOT GIT_PATCH_RESULT EQUAL 0 AND NOT GIT_PATCH_ERROR MATCHES "cleanly")
|
||||
file(REMOVE_RECURSE ${GIT_PATH})
|
||||
message(FATAL_ERROR "Failed to apply patch: ${GIT_PATCH_ERROR}")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Copying file ${GIT_PATCH_NAME}...")
|
||||
file(COPY ${GIT_PATCH} DESTINATION ${GIT_PATH})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
file(WRITE ${GIT_PATH}/.ref ${GIT_REF})
|
||||
message(STATUS "Cloned ${GIT_REPOSITORY}")
|
||||
|
||||
@@ -54,7 +54,7 @@ register_command(
|
||||
COMMENT
|
||||
"Generating src/js_lexer/*.blob"
|
||||
COMMAND
|
||||
${CMAKE_ZIG_COMPILER}
|
||||
${ZIG_EXECUTABLE}
|
||||
run
|
||||
${CMAKE_ZIG_FLAGS}
|
||||
${BUN_ZIG_IDENTIFIER_SCRIPT}
|
||||
@@ -62,8 +62,6 @@ register_command(
|
||||
${BUN_ZIG_IDENTIFIER_SOURCES}
|
||||
OUTPUTS
|
||||
${BUN_ZIG_IDENTIFIER_OUTPUTS}
|
||||
TARGETS
|
||||
clone-zig
|
||||
)
|
||||
|
||||
set(BUN_ERROR_SOURCE ${CWD}/packages/bun-error)
|
||||
@@ -484,6 +482,9 @@ list(APPEND BUN_ZIG_SOURCES
|
||||
${CWD}/build.zig
|
||||
${CWD}/root.zig
|
||||
${CWD}/root_wasm.zig
|
||||
)
|
||||
|
||||
set(BUN_ZIG_GENERATED_SOURCES
|
||||
${BUN_ZIG_IDENTIFIER_OUTPUTS}
|
||||
${BUN_ERROR_OUTPUTS}
|
||||
${BUN_FALLBACK_DECODER_OUTPUT}
|
||||
@@ -496,9 +497,9 @@ list(APPEND BUN_ZIG_SOURCES
|
||||
|
||||
# In debug builds, these are not embedded, but rather referenced at runtime.
|
||||
if (DEBUG)
|
||||
list(APPEND BUN_ZIG_SOURCES ${CODEGEN_PATH}/kit_empty_file)
|
||||
list(APPEND BUN_ZIG_GENERATED_SOURCES ${CODEGEN_PATH}/kit_empty_file)
|
||||
else()
|
||||
list(APPEND BUN_ZIG_SOURCES ${BUN_KIT_RUNTIME_OUTPUTS})
|
||||
list(APPEND BUN_ZIG_GENERATED_SOURCES ${BUN_KIT_RUNTIME_OUTPUTS})
|
||||
endif()
|
||||
|
||||
set(BUN_ZIG_OUTPUT ${BUILD_PATH}/bun-zig.o)
|
||||
@@ -527,7 +528,7 @@ register_command(
|
||||
COMMENT
|
||||
"Building src/*.zig for ${ZIG_TARGET}"
|
||||
COMMAND
|
||||
${CMAKE_ZIG_COMPILER}
|
||||
${ZIG_EXECUTABLE}
|
||||
build obj
|
||||
${CMAKE_ZIG_FLAGS}
|
||||
--prefix ${BUILD_PATH}
|
||||
@@ -545,8 +546,7 @@ register_command(
|
||||
${BUN_ZIG_OUTPUT}
|
||||
SOURCES
|
||||
${BUN_ZIG_SOURCES}
|
||||
TARGETS
|
||||
clone-zig
|
||||
${BUN_ZIG_GENERATED_SOURCES}
|
||||
)
|
||||
|
||||
set_property(TARGET bun-zig PROPERTY JOB_POOL compile_pool)
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
if(SKIP_LLVM)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(CMAKE_HOST_WIN32 OR CMAKE_HOST_APPLE)
|
||||
set(DEFAULT_LLVM_VERSION "18.1.8")
|
||||
else()
|
||||
|
||||
@@ -43,101 +43,33 @@ optionx(ZIG_OPTIMIZE "ReleaseFast|ReleaseSafe|ReleaseSmall|Debug" "The Zig optim
|
||||
# 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_VERSION STRING "The version of zig to use" DEFAULT "0.13.0")
|
||||
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)
|
||||
|
||||
setx(ZIG_REPOSITORY_PATH ${VENDOR_PATH}/zig)
|
||||
setx(ZIG_PATH ${CACHE_PATH}/zig/bin)
|
||||
|
||||
register_repository(
|
||||
NAME
|
||||
zig
|
||||
REPOSITORY
|
||||
oven-sh/zig
|
||||
COMMIT
|
||||
131a009ba2eb127a3447d05b9e12f710429aa5ee
|
||||
PATH
|
||||
${ZIG_REPOSITORY_PATH}
|
||||
)
|
||||
|
||||
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_REPOSITORY_PATH}/lib
|
||||
--zig-lib-dir ${ZIG_PATH}/lib
|
||||
)
|
||||
|
||||
find_command(
|
||||
VARIABLE
|
||||
CMAKE_ZIG_COMPILER
|
||||
COMMAND
|
||||
zig
|
||||
zig.exe
|
||||
PATHS
|
||||
${ZIG_PATH}
|
||||
VERSION
|
||||
${ZIG_VERSION}
|
||||
REQUIRED
|
||||
OFF
|
||||
)
|
||||
|
||||
if(CMAKE_ZIG_COMPILER)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm64|aarch64")
|
||||
set(ZIG_HOST_ARCH "aarch64")
|
||||
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|x64|AMD64")
|
||||
set(ZIG_HOST_ARCH "x86_64")
|
||||
else()
|
||||
unsupported(CMAKE_HOST_SYSTEM_PROCESSOR)
|
||||
endif()
|
||||
|
||||
if(CMAKE_HOST_APPLE)
|
||||
set(ZIG_HOST_OS "macos")
|
||||
elseif(CMAKE_HOST_WIN32)
|
||||
set(ZIG_HOST_OS "windows")
|
||||
elseif(CMAKE_HOST_UNIX)
|
||||
set(ZIG_HOST_OS "linux")
|
||||
else()
|
||||
unsupported(CMAKE_HOST_SYSTEM_NAME)
|
||||
endif()
|
||||
|
||||
set(ZIG_NAME zig-${ZIG_HOST_OS}-${ZIG_HOST_ARCH}-${ZIG_VERSION})
|
||||
|
||||
if(CMAKE_HOST_WIN32)
|
||||
set(ZIG_EXE "zig.exe")
|
||||
set(ZIG_FILENAME ${ZIG_NAME}.zip)
|
||||
else()
|
||||
set(ZIG_EXE "zig")
|
||||
set(ZIG_FILENAME ${ZIG_NAME}.tar.xz)
|
||||
endif()
|
||||
|
||||
setx(ZIG_DOWNLOAD_URL https://ziglang.org/download/${ZIG_VERSION}/${ZIG_FILENAME})
|
||||
file(DOWNLOAD ${ZIG_DOWNLOAD_URL} ${TMP_PATH}/${ZIG_FILENAME} SHOW_PROGRESS)
|
||||
file(ARCHIVE_EXTRACT INPUT ${TMP_PATH}/${ZIG_FILENAME} DESTINATION ${TMP_PATH} TOUCH)
|
||||
file(REMOVE ${TMP_PATH}/${ZIG_FILENAME})
|
||||
file(COPY ${TMP_PATH}/${ZIG_NAME}/${ZIG_EXE} DESTINATION ${ZIG_PATH})
|
||||
file(CHMOD ${ZIG_PATH}/${ZIG_EXE} PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE)
|
||||
setx(CMAKE_ZIG_COMPILER ${ZIG_PATH}/${ZIG_EXE})
|
||||
|
||||
if(NOT WIN32)
|
||||
file(CREATE_LINK ${ZIG_PATH}/${ZIG_EXE} ${ZIG_PATH}/zig.exe SYMBOLIC)
|
||||
endif()
|
||||
|
||||
# Some zig commands need the executable to be in the same directory as the zig repository
|
||||
register_command(
|
||||
COMMENT
|
||||
"Creating symlink for zig"
|
||||
"Downloading zig"
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy ${ZIG_PATH}/${ZIG_EXE} ${ZIG_REPOSITORY_PATH}/${ZIG_EXE}
|
||||
&& ${CMAKE_COMMAND} -E create_symlink ${ZIG_REPOSITORY_PATH}/${ZIG_EXE} ${ZIG_REPOSITORY_PATH}/zig.exe
|
||||
${CMAKE_COMMAND}
|
||||
-DZIG_PATH=${ZIG_PATH}
|
||||
-P ${CWD}/cmake/scripts/DownloadZig.cmake
|
||||
OUTPUTS
|
||||
${ZIG_REPOSITORY_PATH}/${ZIG_EXE}
|
||||
${ZIG_REPOSITORY_PATH}/zig.exe
|
||||
TARGETS
|
||||
clone-zig
|
||||
${ZIG_EXECUTABLE}
|
||||
)
|
||||
|
||||
@@ -55,7 +55,10 @@
|
||||
"zig:check": "bun run zig build check --summary new",
|
||||
"zig:check-all": "bun run zig build check-all --summary new",
|
||||
"zig:check-windows": "bun run zig build check-windows --summary new",
|
||||
"clang-format": "bun run build --target clang-format",
|
||||
"clang-format:check": "bun run build --target clang-format-check"
|
||||
"cmake": "bun ./scripts/build.mjs -DCMAKE_BUILD_TYPE=Debug -B build/debug",
|
||||
"clang-format": "bun run cmake --target clang-format",
|
||||
"clang-format:check": "bun run cmake --target clang-format-check",
|
||||
"zig-format": "bun run cmake --target zig-format",
|
||||
"zig-format:check": "bun run cmake --target zig-format-check"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user