First upload version 0.0.1

This commit is contained in:
Neyra
2026-02-05 15:27:49 +08:00
commit 8e9b7201ed
4182 changed files with 593136 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
function(addVariantSuffix originalTarget variantSuffix)
if (NOT TARGET ${originalTarget} OR ${variantSuffix} STREQUAL "")
return()
endif()
set(_name "${originalTarget}.${variantSuffix}")
set_target_properties(${originalTarget} PROPERTIES
OUTPUT_NAME "${_name}"
RUNTIME_OUTPUT_NAME "${_name}" # Windows .dll
LIBRARY_OUTPUT_NAME "${_name}" # Unix shared lib
ARCHIVE_OUTPUT_NAME "${_name}" # static / import lib
)
if (APPLE)
set_target_properties(${originalTarget} PROPERTIES
MACOSX_RPATH ON
INSTALL_NAME_DIR "@rpath"
)
endif()
endfunction()

View File

@@ -0,0 +1,68 @@
function(ensureNinjaPath)
if ((NOT DEFINED CMAKE_MAKE_PROGRAM OR NOT EXISTS "${CMAKE_MAKE_PROGRAM}" OR NOT CMAKE_MAKE_PROGRAM) AND (CMAKE_GENERATOR STREQUAL "Ninja" OR CMAKE_GENERATOR STREQUAL "Ninja Multi-Config"))
find_program(NINJA_EXECUTABLE ninja)
set(CMAKE_MAKE_PROGRAM "")
set(CMAKE_MAKE_PROGRAM "" PARENT_SCOPE)
if(NINJA_EXECUTABLE AND EXISTS "${NINJA_EXECUTABLE}")
set(CMAKE_MAKE_PROGRAM "${NINJA_EXECUTABLE}")
set(CMAKE_MAKE_PROGRAM "${NINJA_EXECUTABLE}" CACHE FILEPATH "Make program")
set(CMAKE_MAKE_PROGRAM "${NINJA_EXECUTABLE}" PARENT_SCOPE)
endif()
if (NOT CMAKE_MAKE_PROGRAM OR NOT EXISTS "${CMAKE_MAKE_PROGRAM}")
set(PROGRAMDATA_PATH "$ENV{ProgramData}")
file(TO_CMAKE_PATH "${PROGRAMDATA_PATH}" PROGRAMDATA_PATH)
if (PROGRAMDATA_PATH AND EXISTS "${PROGRAMDATA_PATH}")
file(GLOB_RECURSE FOUND_NINJA_EXE "${PROGRAMDATA_PATH}/chocolatey/bin/ninja.exe")
if(FOUND_NINJA_EXE)
list(GET FOUND_NINJA_EXE 0 FOUND_CMAKE_MAKE_PROGRAM)
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}")
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" CACHE FILEPATH "Make program")
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" PARENT_SCOPE)
endif()
endif()
endif()
if (NOT CMAKE_MAKE_PROGRAM OR NOT EXISTS "${CMAKE_MAKE_PROGRAM}")
set(LOCALAPPDATA_PATH "$ENV{LOCALAPPDATA}")
file(TO_CMAKE_PATH "${LOCALAPPDATA_PATH}" LOCALAPPDATA_PATH)
if (LOCALAPPDATA_PATH AND EXISTS "${LOCALAPPDATA_PATH}")
file(GLOB_RECURSE FOUND_NINJA_EXE "${LOCALAPPDATA_PATH}/Microsoft/WinGet/Packages/Ninja-build.Ninja_Microsoft.Winget.*/ninja.exe")
if(FOUND_NINJA_EXE)
list(GET FOUND_NINJA_EXE 0 FOUND_CMAKE_MAKE_PROGRAM)
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}")
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" CACHE FILEPATH "Make program")
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" PARENT_SCOPE)
endif()
endif()
endif()
if (NOT CMAKE_MAKE_PROGRAM OR NOT EXISTS "${CMAKE_MAKE_PROGRAM}")
foreach(PATH IN LISTS PROGRAMFILES_PATHS)
file(GLOB_RECURSE FOUND_NINJA_EXE
"${PATH}/Microsoft Visual Studio/*/CMake/Ninja/ninja.exe"
"${PATH}/Microsoft Visual Studio/**/*/CMake/Ninja/ninja.exe"
"${PATH}/Microsoft Visual Studio/*/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe"
"${PATH}/Microsoft Visual Studio/**/*/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe")
if(FOUND_NINJA_EXE)
list(GET FOUND_NINJA_EXE 0 FOUND_CMAKE_MAKE_PROGRAM)
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}")
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" CACHE FILEPATH "Make program")
set(CMAKE_MAKE_PROGRAM "${FOUND_CMAKE_MAKE_PROGRAM}" PARENT_SCOPE)
break()
endif()
endforeach()
endif()
if (NOT CMAKE_MAKE_PROGRAM OR NOT EXISTS "${CMAKE_MAKE_PROGRAM}")
message(FATAL_ERROR "Ninja build system not found. Please install Ninja or Visual Studio Build Tools.")
endif()
endif()
endfunction()

View File

@@ -0,0 +1,34 @@
function(ensureNodeLib HOST_ARCH TARGET_ARCH)
if (CMAKE_JS_NODELIB_DEF AND CMAKE_JS_NODELIB_TARGET)
if (NOT DEFINED NODE_LIB_CMAKE_AR)
foreach(PATH IN LISTS PROGRAMFILES_PATHS)
if(NODE_LIB_CMAKE_AR)
break()
endif()
file(GLOB_RECURSE FOUND_LIB_EXE
"${PATH}/Microsoft Visual Studio/*/VC/Tools/MSVC/*/bin/Host${HOST_ARCH}/${TARGET_ARCH}/lib.exe"
"${PATH}/Microsoft Visual Studio/**/*/VC/Tools/MSVC/*/bin/Host${HOST_ARCH}/${TARGET_ARCH}/lib.exe")
if(FOUND_LIB_EXE)
list(GET FOUND_LIB_EXE 0 NODE_LIB_CMAKE_AR)
break()
endif()
endforeach()
endif()
set(NODE_LIB_CMAKE_AR_MACHINE_FLAG "")
if (TARGET_ARCH STREQUAL "x64")
set(NODE_LIB_CMAKE_AR_MACHINE_FLAG "/MACHINE:X64")
elseif (TARGET_ARCH STREQUAL "arm64")
set(NODE_LIB_CMAKE_AR_MACHINE_FLAG "/MACHINE:ARM64")
endif()
if (EXISTS "${NODE_LIB_CMAKE_AR}")
# Generate node.lib
execute_process(COMMAND ${NODE_LIB_CMAKE_AR} /def:${CMAKE_JS_NODELIB_DEF} /out:${CMAKE_JS_NODELIB_TARGET} ${CMAKE_STATIC_LINKER_FLAGS} ${NODE_LIB_CMAKE_AR_MACHINE_FLAG} /nologo)
else()
message(FATAL_ERROR "Windows Resource Compiler (lib.exe) not found. Please install Visual Studio Build Tools.")
endif()
endif()
endfunction()

View File

@@ -0,0 +1,12 @@
function(llvmApplyGnuModeAdaptations)
# adapt cmake-js to work with llvm in GNU mode
if (NOT CMAKE_SHARED_LINKER_FLAGS MATCHES "-Xlinker /DELAYLOAD:NODE.EXE")
string(REPLACE "/DELAYLOAD:NODE.EXE" "-Xlinker /DELAYLOAD:NODE.EXE -Xlinker /defaultlib:delayimp"
UPDATED_CMAKE_SHARED_LINKER_FLAGS
"${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "${UPDATED_CMAKE_SHARED_LINKER_FLAGS}" PARENT_SCOPE)
endif()
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Xclang --dependent-lib=msvcrt" PARENT_SCOPE)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Xclang --dependent-lib=msvcrt" PARENT_SCOPE)
endfunction()

View File

@@ -0,0 +1,37 @@
function(llvmEnsureCmakeAr CURRENT_ARCH)
set (LLVM_DIR_ARCH_NAME "")
if (CURRENT_ARCH STREQUAL "x64")
set (LLVM_DIR_ARCH_NAME "x64")
elseif (CURRENT_ARCH STREQUAL "arm64")
set (LLVM_DIR_ARCH_NAME "ARM64")
endif()
if (NOT DEFINED CMAKE_AR OR NOT EXISTS "${CMAKE_AR}")
set(LLVM_INSTALL_PATHS "")
foreach(PATH IN LISTS PROGRAMFILES_PATHS)
list(APPEND LLVM_INSTALL_PATHS "${PATH}/LLVM")
file(GLOB_RECURSE FOUND_LLVM_ROOT LIST_DIRECTORIES true
"${PATH}/Microsoft Visual Studio/*/VC/Tools/Llvm/${LLVM_DIR_ARCH_NAME}"
"${PATH}/Microsoft Visual Studio/**/*/VC/Tools/Llvm/${LLVM_DIR_ARCH_NAME}")
list(FILTER FOUND_LLVM_ROOT INCLUDE REGEX "VC/Tools/Llvm/${LLVM_DIR_ARCH_NAME}$")
if(FOUND_LLVM_ROOT)
list(APPEND LLVM_INSTALL_PATHS ${FOUND_LLVM_ROOT})
endif()
endforeach()
if(DEFINED LLVM_ROOT AND EXISTS "${LLVM_ROOT}")
list(INSERT LLVM_INSTALL_PATHS 0 "${LLVM_ROOT}")
endif()
list(REMOVE_DUPLICATES LLVM_INSTALL_PATHS)
foreach(PATH IN LISTS LLVM_INSTALL_PATHS)
if(EXISTS "${PATH}/bin/llvm-ar.exe" AND EXISTS "${PATH}/bin/llvm-ar.exe")
set(CMAKE_AR "${PATH}/bin/llvm-ar.exe" PARENT_SCOPE)
break()
endif()
endforeach()
endif()
endfunction()

View File

@@ -0,0 +1,87 @@
function(llvmUseGnuModeCompilers CURRENT_ARCH)
set(LLVM_INSTALLATION_URL "https://github.com/llvm/llvm-project/releases/tag/llvmorg-19.1.5")
set(CMAKE_C_COMPILER clang)
set(CMAKE_C_COMPILER clang PARENT_SCOPE)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_CXX_COMPILER clang++ PARENT_SCOPE)
set(CMAKE_RC_COMPILER llvm-rc)
set(CMAKE_RC_COMPILER llvm-rc PARENT_SCOPE)
set (LLVM_DIR_ARCH_NAME "")
if (CURRENT_ARCH STREQUAL "x64")
set (LLVM_DIR_ARCH_NAME "x64")
elseif (CURRENT_ARCH STREQUAL "arm64")
set (LLVM_DIR_ARCH_NAME "ARM64")
endif()
set(LLVM_INSTALL_PATHS "")
foreach(PATH IN LISTS PROGRAMFILES_PATHS)
list(APPEND LLVM_INSTALL_PATHS "${PATH}/LLVM")
file(GLOB_RECURSE FOUND_LLVM_ROOT LIST_DIRECTORIES true
"${PATH}/Microsoft Visual Studio/*/VC/Tools/Llvm/${LLVM_DIR_ARCH_NAME}"
"${PATH}/Microsoft Visual Studio/**/*/VC/Tools/Llvm/${LLVM_DIR_ARCH_NAME}")
list(FILTER FOUND_LLVM_ROOT INCLUDE REGEX "VC/Tools/Llvm/${LLVM_DIR_ARCH_NAME}$")
if(FOUND_LLVM_ROOT)
list(APPEND LLVM_INSTALL_PATHS ${FOUND_LLVM_ROOT})
endif()
endforeach()
if(DEFINED LLVM_ROOT AND EXISTS "${LLVM_ROOT}")
list(INSERT LLVM_INSTALL_PATHS 0 "${LLVM_ROOT}")
endif()
list(REMOVE_DUPLICATES LLVM_INSTALL_PATHS)
set(LLVM_ROOT "")
set(LLVM_ROOT "" PARENT_SCOPE)
foreach(PATH IN LISTS LLVM_INSTALL_PATHS)
if(EXISTS "${PATH}/bin/clang.exe" AND EXISTS "${PATH}/bin/clang++.exe" AND EXISTS "${PATH}/bin/llvm-rc.exe")
set(LLVM_ROOT "${PATH}")
set(LLVM_ROOT "${PATH}" PARENT_SCOPE)
break()
endif()
endforeach()
if(LLVM_ROOT STREQUAL "")
if (CURRENT_ARCH STREQUAL "arm64")
message(FATAL_ERROR "LLVM installation was not found. Please install LLVM for WoA (Windows on Arm): ${LLVM_INSTALLATION_URL}")
else()
message(FATAL_ERROR "LLVM installation was not found. Please install LLVM: ${LLVM_INSTALLATION_URL}")
endif()
endif()
if (NOT EXISTS "${CMAKE_C_COMPILER}" OR NOT EXISTS "${CMAKE_CXX_COMPILER}" OR NOT EXISTS "${CMAKE_RC_COMPILER}")
set(CMAKE_C_COMPILER "${LLVM_ROOT}/bin/clang.exe")
set(CMAKE_C_COMPILER "${LLVM_ROOT}/bin/clang.exe" PARENT_SCOPE)
set(CMAKE_CXX_COMPILER "${LLVM_ROOT}/bin/clang++.exe")
set(CMAKE_CXX_COMPILER "${LLVM_ROOT}/bin/clang++.exe" PARENT_SCOPE)
set(CMAKE_RC_COMPILER "${LLVM_ROOT}/bin/llvm-rc.exe")
set(CMAKE_RC_COMPILER "${LLVM_ROOT}/bin/llvm-rc.exe" PARENT_SCOPE)
endif()
if (NOT EXISTS "${CMAKE_C_COMPILER}")
if (CURRENT_ARCH STREQUAL "arm64")
message(FATAL_ERROR "Clang compiler not found at ${CMAKE_C_COMPILER}. Please reinstall LLVM for WoA (Windows on Arm): ${LLVM_INSTALLATION_URL}")
else()
message(FATAL_ERROR "Clang compiler not found at ${CMAKE_C_COMPILER}. Please reinstall LLVM: ${LLVM_INSTALLATION_URL}")
endif()
endif()
if (NOT EXISTS "${CMAKE_CXX_COMPILER}")
if (CURRENT_ARCH STREQUAL "arm64")
message(FATAL_ERROR "Clang++ compiler not found at ${CMAKE_CXX_COMPILER}. Please reinstall LLVM for WoA (Windows on Arm): ${LLVM_INSTALLATION_URL}")
else()
message(FATAL_ERROR "Clang++ compiler not found at ${CMAKE_CXX_COMPILER}. Please reinstall LLVM: ${LLVM_INSTALLATION_URL}")
endif()
endif()
if (NOT EXISTS "${CMAKE_RC_COMPILER}")
if (CURRENT_ARCH STREQUAL "arm64")
message(FATAL_ERROR "LLVM Resource Compiler not found at ${CMAKE_RC_COMPILER}. Please reinstall LLVM for WoA (Windows on Arm): ${LLVM_INSTALLATION_URL}")
else()
message(FATAL_ERROR "LLVM Resource Compiler not found at ${CMAKE_RC_COMPILER}. Please reinstall LLVM: ${LLVM_INSTALLATION_URL}")
endif()
endif()
endfunction()

View File

@@ -0,0 +1,35 @@
function(setProgramFilesPaths CURRENT_ARCH)
set(PROGRAMFILES_X86_ENV_NAME "ProgramFiles(x86)")
set(PROGRAMFILES "$ENV{ProgramFiles}")
set(PROGRAMFILES_X86 "$ENV{${PROGRAMFILES_X86_ENV_NAME}}")
file(TO_CMAKE_PATH "${PROGRAMFILES}" PROGRAMFILES)
file(TO_CMAKE_PATH "${PROGRAMFILES_X86}" PROGRAMFILES_X86)
if(CURRENT_ARCH STREQUAL "arm64")
set(PROGRAMFILES_ARM64_ENV_NAME "ProgramFiles(Arm)")
set(PROGRAMFILES_ARM64 "$ENV{${PROGRAMFILES_ARM64_ENV_NAME}}")
file(TO_CMAKE_PATH "${PROGRAMFILES_ARM64}" PROGRAMFILES_ARM64)
set(PROGRAMFILES_PATHS_LIST
"${PROGRAMFILES_ARM64}"
"${PROGRAMFILES}"
"${PROGRAMFILES_X86}"
"C:/Program Files (Arm)"
"C:/Program Files"
"C:/Program Files (x86)"
)
list(REMOVE_DUPLICATES PROGRAMFILES_PATHS_LIST)
set(PROGRAMFILES_PATHS ${PROGRAMFILES_PATHS_LIST} PARENT_SCOPE)
else()
set(PROGRAMFILES_PATHS_LIST
"${PROGRAMFILES}"
"${PROGRAMFILES_X86}"
"C:/Program Files"
"C:/Program Files (x86)"
)
list(REMOVE_DUPLICATES PROGRAMFILES_PATHS_LIST)
set(PROGRAMFILES_PATHS ${PROGRAMFILES_PATHS_LIST} PARENT_SCOPE)
endif()
endfunction()