diff --git a/.patch/boost/0001-clang-cl.patch b/.patch/boost/0001-clang-cl.patch index 506db5292c..b4a2062dce 100644 --- a/.patch/boost/0001-clang-cl.patch +++ b/.patch/boost/0001-clang-cl.patch @@ -1,24 +1,26 @@ -diff -ruN a/libs/cobalt/include/boost/cobalt/concepts.hpp b/libs/cobalt/include/boost/cobalt/concepts.hpp ---- a/libs/cobalt/include/boost/cobalt/concepts.hpp 2025-04-12 18:25:53.791233755 +0200 -+++ b/libs/cobalt/include/boost/cobalt/concepts.hpp 2025-04-12 18:29:50.304496166 +0200 -@@ -62,7 +62,7 @@ - template - concept with_get_executor = requires (T& t) - { -- {t.get_executor()} -> asio::execution::executor; -+ t.get_executor(); - }; - - -diff -ruN a/libs/context/CMakeLists.txt b/libs/context/CMakeLists.txt ---- a/libs/context/CMakeLists.txt 2025-04-12 18:25:53.847233801 +0200 -+++ b/libs/context/CMakeLists.txt 2025-04-12 18:29:33.436479899 +0200 -@@ -189,7 +189,7 @@ - - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set_property(SOURCE ${ASM_SOURCES} APPEND PROPERTY COMPILE_OPTIONS "-x" "assembler-with-cpp") -- elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") -+ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT MSVC) - set_property(SOURCE ${ASM_SOURCES} APPEND PROPERTY COMPILE_OPTIONS "-Wno-unused-command-line-argument") - endif() - \ No newline at end of file +diff --git a/libs/cobalt/include/boost/cobalt/concepts.hpp b/libs/cobalt/include/boost/cobalt/concepts.hpp +index d49f2ec..a9bdb80 100644 +--- a/libs/cobalt/include/boost/cobalt/concepts.hpp ++++ b/libs/cobalt/include/boost/cobalt/concepts.hpp +@@ -62,7 +62,7 @@ struct enable_awaitables + template + concept with_get_executor = requires (T& t) + { +- {t.get_executor()} -> asio::execution::executor; ++ t.get_executor(); + }; + + +diff --git a/libs/context/CMakeLists.txt b/libs/context/CMakeLists.txt +index 5870537..f8c3e61 100644 +--- a/libs/context/CMakeLists.txt ++++ b/libs/context/CMakeLists.txt +@@ -189,7 +189,7 @@ if(BOOST_CONTEXT_IMPLEMENTATION STREQUAL "fcontext") + + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set_property(SOURCE ${ASM_SOURCES} APPEND PROPERTY COMPILE_OPTIONS "-x" "assembler-with-cpp") +- elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") ++ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT MSVC) + set_property(SOURCE ${ASM_SOURCES} APPEND PROPERTY COMPILE_OPTIONS "-Wno-unused-command-line-argument") + endif() + diff --git a/CMakeLists.txt b/CMakeLists.txt index 542fc71224..3929d1ab8c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -748,46 +748,24 @@ if (MSVC AND CMAKE_GENERATOR STREQUAL "Ninja") ) endif() -# Adjustments for Clang-cl -if (MSVC AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND ARCHITECTURE STREQUAL "x86_64") - set(LLVM_MINGW_VERSION 20250402) - # Set download URL and library path within the ZIP - set(ZIP_URL "https://github.com/mstorsjo/llvm-mingw/releases/download/${LLVM_MINGW_VERSION}/llvm-mingw-${LLVM_MINGW_VERSION}-ucrt-x86_64.zip") - set(LIB_PATH "llvm-mingw-${LLVM_MINGW_VERSION}-ucrt-x86_64/lib/clang/20/lib/windows/libclang_rt.builtins-x86_64.a") - # Set paths for download and extraction - set(DOWNLOAD_DIR "${CMAKE_BINARY_DIR}/llvm-mingw-download") - set(ZIP_FILE "${DOWNLOAD_DIR}/llvm-mingw.zip") - set(EXTRACTED_LIB "${DOWNLOAD_DIR}/${LIB_PATH}") - # Create download directory if it doesn't exist - file(MAKE_DIRECTORY "${DOWNLOAD_DIR}") - # Download and extract if the library doesn't exist - if(NOT EXISTS "${EXTRACTED_LIB}") - message(STATUS "Downloading llvm-mingw runtime libraries...") - # Download the ZIP file - file(DOWNLOAD - ${ZIP_URL} - ${ZIP_FILE} - SHOW_PROGRESS - # Uncomment and add EXPECTED_HASH if you know the SHA256 checksum - EXPECTED_HASH SHA256=4edc13d878b4ec49c2f1a6e9161abb093bbaefc8b7d129f3b3f57a22a4a41d38 - ) - message(STATUS "Extracting compiler-rt builtins library...") - # Extract the specific file from the ZIP - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar xvf "${ZIP_FILE}" "${LIB_PATH}" - WORKING_DIRECTORY "${DOWNLOAD_DIR}" - RESULT_VARIABLE extraction_result - ) - if(NOT extraction_result EQUAL 0) - message(FATAL_ERROR "Failed to extract library: ${extraction_result}") - endif() +# Adjustments for clang-cl +if (MSVC AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + if (ARCHITECTURE_x86_64) + set(FILE_ARCH x86_64) + elseif (ARCHITECTURE_arm64) + set(FILE_ARCH aarch64) + else() + message(FATAL_ERROR "clang-cl: Unsupported architecture ${ARCHITECTURE}") endif() - # Create imported target for the library + + AddJsonPackage(llvm-mingw) + set(LIB_PATH "${llvm-mingw_SOURCE_DIR}/libclang_rt.builtins-${FILE_ARCH}.a") + add_library(llvm-mingw-runtime STATIC IMPORTED) set_target_properties(llvm-mingw-runtime PROPERTIES IMPORTED_LOCATION "${EXTRACTED_LIB}" ) - # Link the library to all executables in the project + link_libraries(llvm-mingw-runtime) endif() diff --git a/CMakeModules/CPM.cmake b/CMakeModules/CPM.cmake index 3636ee5da0..eb35d3ef4c 100644 --- a/CMakeModules/CPM.cmake +++ b/CMakeModules/CPM.cmake @@ -592,7 +592,8 @@ function(cpm_add_patches) list(APPEND temp_list "&&") endif() # Add the patch command to the list - list(APPEND temp_list "${PATCH_EXECUTABLE}" "-p1" "<" "${PATCH_FILE}") + # use binary because DOS SUCKS + list(APPEND temp_list "${PATCH_EXECUTABLE}" "--binary" "-p1" "<" "${PATCH_FILE}") endforeach() # Move temp out into parent scope. diff --git a/CMakeModules/CPMUtil.cmake b/CMakeModules/CPMUtil.cmake index db9cce4c66..80397b507f 100644 --- a/CMakeModules/CPMUtil.cmake +++ b/CMakeModules/CPMUtil.cmake @@ -146,7 +146,7 @@ function(AddJsonPackage) get_json_element("${object}" url url "") get_json_element("${object}" key key "") get_json_element("${object}" tag tag "") - get_json_element("${object}" artifact artifact "") + get_json_element("${object}" raw_artifact artifact "") get_json_element("${object}" git_version git_version "") get_json_element("${object}" git_host git_host "") get_json_element("${object}" source_subdir source_subdir "") diff --git a/cpmfile.json b/cpmfile.json index c08ef38e11..8b3b48230a 100644 --- a/cpmfile.json +++ b/cpmfile.json @@ -11,12 +11,14 @@ "package": "Boost", "repo": "boostorg/boost", "tag": "boost-%VERSION%", - "artifact": "%TAG%-cmake.7z", - "hash": "e5b049e5b61964480ca816395f63f95621e66cb9bcf616a8b10e441e0e69f129e22443acb11e77bc1e8170f8e4171b9b7719891efc43699782bfcd4b3a365f01", - "git_version": "1.88.0", + "artifact": "%TAG%-cmake.tar.xz", + "hash": "4fb7f6fde92762305aad8754d7643cd918dd1f3f67e104e9ab385b18c73178d72a17321354eb203b790b6702f2cf6d725a5d6e2dfbc63b1e35f9eb59fb42ece9", + "git_version": "1.89.0", "version": "1.57", "patches": [ - "0001-clang-cl.patch" + "0001-clang-cl.patch", + "0002-use-marmasm.patch", + "0003-armasm-options.patch" ] }, "fmt": { @@ -146,5 +148,12 @@ "version": "2.32.8", "min_version": "2.26.4", "cmake_filename": "sdl2" + }, + "llvm-mingw": { + "repo": "crueter/llvm-mingw", + "tag": "20250828", + "version": "20250828", + "artifact": "clang-rt-builtins.tar.zst", + "hash": "d902392caf94e84f223766e2cc51ca5fab6cae36ab8dc6ef9ef6a683ab1c483bfcfe291ef0bd38ab16a4ecc4078344fa8af72da2f225ab4c378dee23f6186181" } } diff --git a/tools/cpm-fetch.sh b/tools/cpm-fetch.sh index 648bbae1c8..e3bb2d887a 100755 --- a/tools/cpm-fetch.sh +++ b/tools/cpm-fetch.sh @@ -59,7 +59,7 @@ download_package() { if grep -e "patches" <<< "$JSON" > /dev/null; then PATCHES=$(jq -r '.patches | join(" ")' <<< "$JSON") for patch in $PATCHES; do - patch -p1 < "$ROOTDIR"/.patch/$package/$patch + patch --binary -p1 < "$ROOTDIR"/.patch/$package/$patch done fi @@ -173,7 +173,7 @@ do # key parsing KEY=$(jq -r ".key" <<< "$JSON") - if [ "$KEY" == null ]; then + if [ "$KEY" == null ]; then if [ "$SHA" != null ]; then KEY=$(cut -c1-4 - <<< "$SHA") elif [ "$GIT_VERSION" != null ]; then