forked from shader-slang/slang
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Dont require llvm for building generators (shader-slang#4895)
* Dont require llvm for building generators * Fetch slang-llvm.so from correct release (shader-slang#4847) * Fetch slang-llvm.so from correct release Closes shader-slang#4648 Should close shader-slang#4812 * Update docs * Correct documentation on cmake option * Neaten cmake script * Fix fetching on windows --------- Co-authored-by: Yong He <yonghe@outlook.com> * Be a bit more careful dealing with release list fetching failure * clarify error messages --------- Co-authored-by: Yong He <yonghe@outlook.com>
- Loading branch information
1 parent
19db4e9
commit f503a0b
Showing
4 changed files
with
129 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
function(check_release_and_get_latest owner repo version os arch out_var) | ||
# Construct the URL for the specified version's release API endpoint | ||
set(version_url "https://api.github.com/repos/${owner}/${repo}/releases/tags/v${version}") | ||
|
||
set(json_output_file "${CMAKE_CURRENT_BINARY_DIR}/${owner}_${repo}_release_info.json") | ||
|
||
function(check_assets_for_file json_content filename found_var) | ||
string(JSON asset_count LENGTH "${json_content}" "assets") | ||
set(found "FALSE") | ||
foreach(i RANGE 0 ${asset_count}) | ||
string(JSON asset_name GET "${json_content}" "assets" ${i} "name") | ||
if("${asset_name}" STREQUAL "${filename}") | ||
set(found "TRUE") | ||
break() | ||
endif() | ||
endforeach() | ||
set(${found_var} "${found}" PARENT_SCOPE) | ||
endfunction() | ||
|
||
# Download the specified release info from GitHub | ||
file(DOWNLOAD "${version_url}" "${json_output_file}" STATUS download_statuses) | ||
list(GET download_statuses 0 status_code) | ||
if(status_code EQUAL 0) | ||
file(READ "${json_output_file}" json_content) | ||
|
||
# Check if the specified version contains the expected ZIP file | ||
set(desired_zip "${repo}-${version}-${os}-${arch}.zip") | ||
check_assets_for_file("${json_content}" "${desired_zip}" file_found) | ||
|
||
if(file_found) | ||
set(${out_var} "${version}" PARENT_SCOPE) | ||
return() | ||
endif() | ||
message(WARNING "Failed to find ${desired_zip} in release assets for ${version} from ${version_url}\nFalling back to latest version if it differs") | ||
else() | ||
message(WARNING "Failed to download release info for version ${version} from ${version_url}\nFalling back to latest version if it differs") | ||
endif() | ||
|
||
|
||
# If not found, get the latest release tag | ||
set(latest_release_url "https://api.github.com/repos/${owner}/${repo}/releases/latest") | ||
file(DOWNLOAD "${latest_release_url}" "${json_output_file}" STATUS download_status) | ||
list(GET download_status 0 status_code) | ||
if(NOT status_code EQUAL 0) | ||
message(WARNING "Failed to download latest release info from ${latest_release_url}") | ||
return() | ||
endif() | ||
|
||
# Get the tag from this release json file | ||
file(READ "${json_output_file}" latest_json_content) | ||
string(JSON latest_release_tag GET "${latest_json_content}" "tag_name") | ||
string(REGEX REPLACE "^v" "" latest_version "${latest_release_tag}") | ||
|
||
if(latest_version EQUAL version) | ||
# The versions are the same | ||
message(WARNING "No release binary for ${os}-${arch} exists for ${version}") | ||
return() | ||
endif() | ||
|
||
# Check if the expected ZIP file is in the latest release | ||
set(desired_zip "${repo}-${latest_version}-${os}-${arch}.zip") | ||
check_assets_for_file("${latest_json_content}" "${desired_zip}" file_found_latest) | ||
|
||
if(file_found_latest) | ||
# If we got it, we found a good version | ||
set(${out_var} "${latest_version}" PARENT_SCOPE) | ||
else() | ||
message(WARNING "No release binary for ${os}-${arch} exists for ${version} or the latest version ${latest_version}") | ||
endif() | ||
endfunction() | ||
|
||
function(get_best_slang_binary_release_url out_var) | ||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") | ||
set(arch "x86_64") | ||
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|arm64") | ||
set(arch "aarch64") | ||
else() | ||
message(WARNING "Unsupported architecture for slang binary releases: ${CMAKE_SYSTEM_PROCESSOR}") | ||
return() | ||
endif() | ||
|
||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows") | ||
set(os "windows") | ||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | ||
set(os "macos") | ||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") | ||
set(os "linux") | ||
else() | ||
message(WARNING "Unsupported operating system for slang binary releases: ${CMAKE_SYSTEM_NAME}") | ||
return() | ||
endif() | ||
|
||
set(owner "shader-slang") | ||
set(repo "slang") | ||
|
||
check_release_and_get_latest(${owner} ${repo} ${SLANG_VERSION_NUMERIC} ${os} ${arch} release_version) | ||
if(DEFINED release_version) | ||
set(${out_var} "https://github.com/${owner}/${repo}/releases/download/v${release_version}/slang-${release_version}-${os}-${arch}.zip" PARENT_SCOPE) | ||
endif() | ||
endfunction() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters