diff --git a/ports/blas/portfile.cmake b/ports/blas/portfile.cmake index f70aa46eabd3fb..f95e36215b547a 100644 --- a/ports/blas/portfile.cmake +++ b/ports/blas/portfile.cmake @@ -1,5 +1,32 @@ SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) +list(APPEND FEATURES openblas) # change in Build-Depends and here for overlay + +if("generic" IN_LIST FEATURES) + set(BLA_VENDOR Generic) +elseif("mkl" IN_LIST FEATURES) + if(VCPKG_TARGET_ARCHITECTURE STREQUAL x64) + set(BLA_VENDOR Intel10_64lp) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL x86) + set(BLA_VENDOR Intel10_32) + else() + message(FATAL_ERROR "Unsupported target architecture for Intel MKL!") + endif() +elseif("openblas" IN_LIST FEATURES) + set(BLA_VENDOR OpenBLAS) +elseif("apple" IN_LIST FEATURES) + set(BLA_VENDOR Apple) +endif() + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + set(BLA_STATIC ON) +else() + set(BLA_STATIC OFF) +endif() + +configure_file("${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake.in" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY) # Make sure BLAS can be found vcpkg_configure_cmake(SOURCE_PATH ${CURRENT_PORT_DIR} - OPTIONS -DCMAKE_PREFIX_PATH="${CURRENT_PACKAGES_DIR}") + OPTIONS -DCMAKE_PREFIX_PATH="${CURRENT_PACKAGES_DIR}" + -DBLA_VENDOR=${BLA_VENDOR} + -DBLA_STATIC=${BLA_STATIC}) diff --git a/ports/blas/vcpkg-cmake-wrapper.cmake.in b/ports/blas/vcpkg-cmake-wrapper.cmake.in new file mode 100644 index 00000000000000..bda7ab98d8f5ff --- /dev/null +++ b/ports/blas/vcpkg-cmake-wrapper.cmake.in @@ -0,0 +1,5 @@ +set(BLA_VENDOR @BLA_VENDOR@) +set(BLA_STATIC @BLA_STATIC@) +_find_package(${ARGS}) +unset(BLA_VENDOR) +unset(BLA_STATIC) \ No newline at end of file diff --git a/ports/lapack-reference/4c09cda6943f3c893fb20ed6a490e1ba485148dd.patch b/ports/lapack-reference/4c09cda6943f3c893fb20ed6a490e1ba485148dd.patch new file mode 100644 index 00000000000000..f9bd0cf5fc5adc --- /dev/null +++ b/ports/lapack-reference/4c09cda6943f3c893fb20ed6a490e1ba485148dd.patch @@ -0,0 +1,21 @@ +diff --git a/SRC/sorhr_col.f b/SRC/sorhr_col.f +index 38976245c..600c19fbb 100644 +--- a/SRC/sorhr_col.f ++++ b/SRC/sorhr_col.f +@@ -282,7 +282,8 @@ SUBROUTINE SORHR_COL( M, N, NB, A, LDA, T, LDT, D, INFO ) + $ NPLUSONE + * .. + * .. External Subroutines .. +- EXTERNAL SCOPY, SLAORHR_COL_GETRFNP, SSCAL, STRSM, XERBLA ++ EXTERNAL SCOPY, SLAORHR_COL_GETRFNP, SSCAL, STRSM, ++ $ XERBLA + * .. + * .. Intrinsic Functions .. + INTRINSIC MAX, MIN +@@ -436,4 +437,4 @@ SUBROUTINE SORHR_COL( M, N, NB, A, LDA, T, LDT, D, INFO ) + * + * End of SORHR_COL + * +- END +\ No newline at end of file ++ END diff --git a/ports/lapack-reference/intel.patch b/ports/lapack-reference/intel.patch new file mode 100644 index 00000000000000..42585cabe4a77c --- /dev/null +++ b/ports/lapack-reference/intel.patch @@ -0,0 +1,28 @@ +diff --git a/INSTALL/dsecnd_EXT_ETIME.f b/INSTALL/dsecnd_EXT_ETIME.f +index 35377643b..f98aad7a9 100644 +--- a/INSTALL/dsecnd_EXT_ETIME.f ++++ b/INSTALL/dsecnd_EXT_ETIME.f +@@ -34,6 +34,9 @@ + * + * ===================================================================== + DOUBLE PRECISION FUNCTION DSECND( ) ++#if defined(__INTEL_COMPILER) ++ USE IFPORT ++#endif + * + * -- LAPACK auxiliary routine (version 3.7.0) -- + * -- LAPACK is a software package provided by Univ. of Tennessee, -- +diff --git a/INSTALL/second_EXT_ETIME.f b/INSTALL/second_EXT_ETIME.f +index 43044cda7..0e2a9a331 100644 +--- a/INSTALL/second_EXT_ETIME.f ++++ b/INSTALL/second_EXT_ETIME.f +@@ -34,6 +34,9 @@ + * + * ===================================================================== + REAL FUNCTION SECOND( ) ++#if defined(__INTEL_COMPILER) ++ USE IFPORT ++#endif + * + * -- LAPACK auxiliary routine (version 3.7.0) -- + * -- LAPACK is a software package provided by Univ. of Tennessee, -- diff --git a/ports/lapack/portfile.cmake b/ports/lapack/portfile.cmake index 2a59fa7267d7c2..a9b34d2279985f 100644 --- a/ports/lapack/portfile.cmake +++ b/ports/lapack/portfile.cmake @@ -1,5 +1,17 @@ SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) +set(BLA_VENDOR Generic) +configure_file("${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake.in" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + set(BLA_STATIC ON) +else() + set(BLA_STATIC OFF) +endif() + # Make sure LAPACK can be found vcpkg_configure_cmake(SOURCE_PATH ${CURRENT_PORT_DIR} - OPTIONS -DCMAKE_PREFIX_PATH="${CURRENT_PACKAGES_DIR}") + OPTIONS -DCMAKE_PREFIX_PATH="${CURRENT_PACKAGES_DIR}" + -DBLA_VENDOR=${BLA_VENDOR} + -DBLA_STATIC=${BLA_STATIC}) + diff --git a/ports/lapack/vcpkg-cmake-wrapper.cmake.in b/ports/lapack/vcpkg-cmake-wrapper.cmake.in new file mode 100644 index 00000000000000..bda7ab98d8f5ff --- /dev/null +++ b/ports/lapack/vcpkg-cmake-wrapper.cmake.in @@ -0,0 +1,5 @@ +set(BLA_VENDOR @BLA_VENDOR@) +set(BLA_STATIC @BLA_STATIC@) +_find_package(${ARGS}) +unset(BLA_VENDOR) +unset(BLA_STATIC) \ No newline at end of file diff --git a/scripts/azure-pipelines/azure-pipelines.yml b/scripts/azure-pipelines/azure-pipelines.yml index be5120ad4f71f5..30b11f09926b35 100644 --- a/scripts/azure-pipelines/azure-pipelines.yml +++ b/scripts/azure-pipelines/azure-pipelines.yml @@ -16,58 +16,58 @@ jobs: - template: windows/azure-pipelines.yml parameters: triplet: x86-windows - jobName: x86_windows + jobName: x64_windows_ifort poolName: $(windows-pool) vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - template: windows/azure-pipelines.yml parameters: triplet: x64-windows - jobName: x64_windows + jobName: x64_windows_intel poolName: $(windows-pool) vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - template: windows/azure-pipelines.yml parameters: triplet: x64-windows-static - jobName: x64_windows_static + jobName: x64_windows_intel_llvm poolName: $(windows-pool) vcpkgToolSha: ${{ parameters.vcpkgToolSha }} -- template: windows/azure-pipelines.yml - parameters: - triplet: x64-windows-static-md - jobName: x64_windows_static_md - poolName: $(windows-pool) - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} +# - template: windows/azure-pipelines.yml + # parameters: + # triplet: x64-windows-static-md + # jobName: x64_windows_static_md + # poolName: $(windows-pool) + # vcpkgToolSha: ${{ parameters.vcpkgToolSha }} -- template: windows/azure-pipelines.yml - parameters: - triplet: x64-uwp - jobName: x64_uwp - poolName: $(windows-pool) - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} +# - template: windows/azure-pipelines.yml + # parameters: + # triplet: x64-uwp + # jobName: x64_uwp + # poolName: $(windows-pool) + # vcpkgToolSha: ${{ parameters.vcpkgToolSha }} -- template: windows/azure-pipelines.yml - parameters: - triplet: arm64-windows - jobName: arm64_windows - poolName: $(windows-pool) - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} +# - template: windows/azure-pipelines.yml + # parameters: + # triplet: arm64-windows + # jobName: arm64_windows + # poolName: $(windows-pool) + # vcpkgToolSha: ${{ parameters.vcpkgToolSha }} -- template: windows/azure-pipelines.yml - parameters: - triplet: arm-uwp - jobName: arm_uwp - poolName: $(windows-pool) - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} +# - template: windows/azure-pipelines.yml + # parameters: + # triplet: arm-uwp + # jobName: arm_uwp + # poolName: $(windows-pool) + # vcpkgToolSha: ${{ parameters.vcpkgToolSha }} -- template: osx/azure-pipelines.yml - parameters: - poolName: $(osx-pool) - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} +# - template: osx/azure-pipelines.yml + # parameters: + # poolName: $(osx-pool) + # vcpkgToolSha: ${{ parameters.vcpkgToolSha }} -- template: linux/azure-pipelines.yml - parameters: - poolName: $(linux-pool) - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} +# - template: linux/azure-pipelines.yml + # parameters: + # poolName: $(linux-pool) + # vcpkgToolSha: ${{ parameters.vcpkgToolSha }} diff --git a/scripts/cmake/vcpkg_configure_make.cmake b/scripts/cmake/vcpkg_configure_make.cmake index 17a6d456c82664..4608cb7f794484 100644 --- a/scripts/cmake/vcpkg_configure_make.cmake +++ b/scripts/cmake/vcpkg_configure_make.cmake @@ -229,15 +229,31 @@ function(vcpkg_configure_make) debug_message("Using make triplet: ${arg_BUILD_TRIPLET}") endif() if(CMAKE_HOST_WIN32) - set(append_env) + set(append_env "") if(arg_USE_WRAPPERS) - set(append_env ";${MSYS_ROOT}/usr/share/automake-1.16") - string(APPEND append_env ";${SCRIPTS}/buildsystems/make_wrapper") # Other required wrappers are also located there + set(append_env "${MSYS_ROOT}/usr/share/automake-1.16") + list(APPEND append_env "${SCRIPTS}/buildsystems/make_wrapper") # Other required wrappers are also located there endif() - # This inserts msys before system32 (which masks sort.exe and find.exe) but after MSVC (which avoids masking link.exe) - string(REPLACE ";$ENV{SystemRoot}\\System32;" "${append_env};${MSYS_ROOT}/usr/bin;$ENV{SystemRoot}\\System32;" NEWPATH "$ENV{PATH}") - string(REPLACE ";$ENV{SystemRoot}\\system32;" "${append_env};${MSYS_ROOT}/usr/bin;$ENV{SystemRoot}\\system32;" NEWPATH "$ENV{PATH}") - set(ENV{PATH} "${NEWPATH}") + + debug_message(STATUS "PATH BEFORE:$ENV{PATH}") + cmake_path(CONVERT "$ENV{PATH}" TO_CMAKE_PATH_LIST PATH_LIST NORMALIZE) + cmake_path(CONVERT "$ENV{SystemRoot}" TO_CMAKE_PATH_LIST SYSTEM_ROOT) + debug_message(STATUS "PATH_LIST:${PATH_LIST}") + list(FIND PATH_LIST "${SYSTEM_ROOT}/system32/" index) + if(index EQUAL "-1") + list(FIND PATH_LIST "${SYSTEM_ROOT}/System32/" index) + endif() + if(index GREATER_EQUAL "0") + list(INSERT PATH_LIST "${index}" ${append_env} "${MSYS_ROOT}/usr/bin") + else() + message(WARNING "Unable to find system32 in the PATH variable to insert additional paths! Appending msys paths!") + list(APPEND PATH_LIST "${index}" ${append_env} "${MSYS_ROOT}/usr/bin") + endif() + + cmake_path(CONVERT "${PATH_LIST}" TO_NATIVE_PATH_LIST NATIVE_PATH_LIST) + set(ENV{PATH} "${NATIVE_PATH_LIST}") + debug_message(STATUS "PATH AFTER:${NATIVE_PATH_LIST}") + set(bash_executable "${MSYS_ROOT}/usr/bin/bash.exe") endif() diff --git a/scripts/cmake/vcpkg_load_environment_from_batch.cmake b/scripts/cmake/vcpkg_load_environment_from_batch.cmake new file mode 100644 index 00000000000000..1fa973f501e744 --- /dev/null +++ b/scripts/cmake/vcpkg_load_environment_from_batch.cmake @@ -0,0 +1,69 @@ +include(vcpkg_execute_in_download_mode) +include(vcpkg_execute_required_process) +function(vcpkg_load_environment_from_batch) + cmake_parse_arguments(_lefb "" "BATCH_FILE_PATH" "ARGUMENTS" ${ARGN}) + + #message(STATUS "LOADING ENV") + # Get original environment + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" "-E" "environment" + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR} + LOGNAME environment-initial + ) + file(READ ${CURRENT_BUILDTREES_DIR}/environment-initial-out.log ENVIRONMENT_INITIAL) + + # Get modified envirnoment + string (REPLACE ";" " " SPACE_SEPARATED_ARGUMENTS "${_lefb_ARGUMENTS}") + file(WRITE ${CURRENT_BUILDTREES_DIR}/get-modified-environment.bat "call \"${_lefb_BATCH_FILE_PATH}\" ${SPACE_SEPARATED_ARGUMENTS}\n\"${CMAKE_COMMAND}\" -E environment") + vcpkg_execute_required_process( + COMMAND "cmd" "/c" "${CURRENT_BUILDTREES_DIR}/get-modified-environment.bat" + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR} + LOGNAME environment-after + ) + file(READ ${CURRENT_BUILDTREES_DIR}/environment-after-out.log ENVIRONMENT_AFTER) + + # Escape characters that have a special meaning in CMake strings. + string(REPLACE "\\" "/" ENVIRONMENT_INITIAL "${ENVIRONMENT_INITIAL}") + string(REPLACE ";" "\\\\;" ENVIRONMENT_INITIAL "${ENVIRONMENT_INITIAL}") + string(REPLACE "\n" ";" ENVIRONMENT_INITIAL "${ENVIRONMENT_INITIAL}") + + string(REPLACE "\\" "/" ENVIRONMENT_AFTER "${ENVIRONMENT_AFTER}") + string(REPLACE ";" "\\\\;" ENVIRONMENT_AFTER "${ENVIRONMENT_AFTER}") + string(REPLACE "\n" ";" ENVIRONMENT_AFTER "${ENVIRONMENT_AFTER}") + + # Apply the environment changes to the current CMake environment + foreach(AFTER_LINE ${ENVIRONMENT_AFTER}) + if("${AFTER_LINE}" MATCHES "^([^=]+)=(.+)$") + set(AFTER_VAR_NAME "${CMAKE_MATCH_1}") + set(AFTER_VAR_VALUE "${CMAKE_MATCH_2}") + + set(FOUND "FALSE") + foreach(INITIAL_LINE ${ENVIRONMENT_INITIAL}) + if("${INITIAL_LINE}" MATCHES "^([^=]+)=(.+)$") + set(INITIAL_VAR_NAME "${CMAKE_MATCH_1}") + set(INITIAL_VAR_VALUE "${CMAKE_MATCH_2}") + + if("${AFTER_VAR_NAME}" STREQUAL "${INITIAL_VAR_NAME}") + set(FOUND "TRUE") + if(NOT "${AFTER_VAR_VALUE}" STREQUAL "${INITIAL_VAR_VALUE}") + + # Variable has been modified + # NOTE: we do not revert the escape changes that have previously been applied + # since the only change that should be visible in a single environment variable + # should be a conversion from `\` to `/` and this should not have any effect on + # windows paths. + #message(STATUS "MODIFIED ${AFTER_VAR_NAME}=${AFTER_VAR_VALUE}") + set(ENV{${AFTER_VAR_NAME}} ${AFTER_VAR_VALUE}) + endif() + endif() + endif() + endforeach() + + if(NOT ${FOUND}) + # Variable has been added + #message(STATUS "ADDING ${AFTER_VAR_NAME}=${AFTER_VAR_VALUE}") + set(ENV{${AFTER_VAR_NAME}} ${AFTER_VAR_VALUE}) + endif() + endif() + endforeach() +endfunction() \ No newline at end of file diff --git a/triplets/community/x64-windows-ifort.cmake b/triplets/community/x64-windows-ifort.cmake new file mode 100644 index 00000000000000..9c7e743075e66e --- /dev/null +++ b/triplets/community/x64-windows-ifort.cmake @@ -0,0 +1,28 @@ +#Toolset-Name: Intel C++ Compiler 2021 +#C:\Program Files (x86)\Intel\oneAPI>setvars.bat +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_LIBRARY_LINKAGE dynamic) +set(VCPKG_CRT_LINKAGE dynamic) + +set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_CURRENT_LIST_DIR}/x64-windows-ifort.toolchain.cmake") + +if(NOT PORT MATCHES "(lapack)") + set(VCPKG_LIBRARY_LINKAGE static) +endif() + +#set(VCPKG_POLICY_SKIP_ARCHITECTURE_CHECK enabled) +#set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled) +set(VCPKG_LOAD_VCVARS_ENV ON) + +include(vcpkg_load_environment_from_batch OPTIONAL RESULT_VARIABLE ENV_LOADABLE) # Trick to skip the internal compiler detection for this file. +if(ENV_LOADABLE) + if (DEFINED ENV{ProgramW6432}) + file(TO_CMAKE_PATH "$ENV{ProgramW6432}" PROG_ROOT) + else() + file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" PROG_ROOT) + endif() + if(NOT PROG_ROOT MATCHES "(x86)") + set(PROG_ROOT "${PROG_ROOT} (x86)") + endif() + vcpkg_load_environment_from_batch(BATCH_FILE_PATH "${PROG_ROOT}/Intel/OneAPI/setvars.bat") +endif() \ No newline at end of file diff --git a/triplets/community/x64-windows-ifort.toolchain.cmake b/triplets/community/x64-windows-ifort.toolchain.cmake new file mode 100644 index 00000000000000..85db53202817c9 --- /dev/null +++ b/triplets/community/x64-windows-ifort.toolchain.cmake @@ -0,0 +1,94 @@ +include_guard(GLOBAL) +#include("${CMAKE_CURRENT_LIST_DIR}/config.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/x64-windows-ifort.cmake") + +# Set C standard. +#set(CMAKE_C_STANDARD 11 CACHE STRING "") +#set(CMAKE_C_STANDARD_REQUIRED ON CACHE STRING "") +#set(CMAKE_C_EXTENSIONS ON CACHE STRING "") + +# Set C++ standard. +#set(CMAKE_CXX_STANDARD 20 CACHE STRING "") +#set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE STRING "") +#set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "") + +# Set compiler. +if (DEFINED ENV{ProgramW6432}) + file(TO_CMAKE_PATH "$ENV{ProgramW6432}" PROG_ROOT) +else() + file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" PROG_ROOT) +endif() +if(NOT PROG_ROOT MATCHES "(x86)") + set(PROG_ROOT "${PROG_ROOT} (x86)") +endif() + +file(TO_CMAKE_PATH "${PROG_ROOT}/Intel/OneAPI/compiler/latest/windows" POSSIBLE_INTEL_COMPILER_ROOT) +find_program(IFORT_EXECUTBALE NAMES "ifort" "ifort.exe" PATHS "${POSSIBLE_INTEL_COMPILER_ROOT}/bin/intel64") +find_program(CL_EXECUTBALE NAMES "cl" "cl.exe") + +if(NOT IFORT_EXECUTBALE) + message(SEND_ERROR "Intel Fortran Compiler was not found!") +endif() + +get_filename_component(INTEL_BIN_DIR "${IFORT_EXECUTBALE}" DIRECTORY) +list(INSERT CMAKE_PROGRAM_PATH 0 "${INTEL_BIN_DIR}") + +set(CMAKE_C_COMPILER "${CL_EXECUTBALE}" CACHE STRING "" FORCE) +set(CMAKE_CXX_COMPILER "${CL_EXECUTBALE}" CACHE STRING "" FORCE) +set(CMAKE_Fortran_COMPILER "${IFORT_EXECUTBALE}" CACHE STRING "" FORCE) + +# Set runtime library. +set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>$<$:DLL>" CACHE STRING "") +if(VCPKG_CRT_LINKAGE STREQUAL "dynamic") + set(VCPKG_CRT_FLAG "/MD") + set(VCPKG_DBG_FLAG "/Z7") +elseif(VCPKG_CRT_LINKAGE STREQUAL "static") + set(VCPKG_CRT_FLAG "/MT") + set(VCPKG_DBG_FLAG "/Z7") +else() + message(FATAL_ERROR "Invalid VCPKG_CRT_LINKAGE: \"${VCPKG_CRT_LINKAGE}\".") +endif() + +# Set compiler flags. +# Disable logo for compiler and linker. +set(CMAKE_CL_NOLOGO "/nologo" CACHE STRING "") +#set(VCPKG_INTEL_FLAGS "/Qm64 /QxAVX /arch:AVX") +#set(MSVC_VERSION 1928) + + +set(CMAKE_C_FLAGS "${CMAKE_CL_NOLOGO} /DWIN32 /D_WINDOWS /FC ${VCPKG_C_FLAGS} ${CHARSET_FLAG}" CACHE STRING "") +set(CMAKE_C_FLAGS_DEBUG "/Od /Ob0 /GS /RTC1 ${VCPKG_C_FLAGS_DEBUG} ${VCPKG_CRT_FLAG}d ${VCPKG_DBG_FLAG}" CACHE STRING "") +set(CMAKE_C_FLAGS_RELEASE "/O1 /Oi /Ob2 /GS- ${VCPKG_C_FLAGS_RELEASE} ${VCPKG_CRT_FLAG} /DNDEBUG" CACHE STRING "") +set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /Oi /Ob1 /GS- ${VCPKG_C_FLAGS_RELEASE} ${VCPKG_CRT_FLAG} /DNDEBUG" CACHE STRING "") +set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Oi /Ob1 /GS- ${VCPKG_C_FLAGS_RELEASE} ${VCPKG_CRT_FLAG} ${VCPKG_DBG_FLAG} /DNDEBUG" CACHE STRING "") + +# TODO: Remove /U__cpp_concepts once LLVM adds MS STL support. +set(CMAKE_CXX_FLAGS "${CMAKE_CL_NOLOGO} /DWIN32 /D_WINDOWS /FC /permissive- ${VCPKG_CXX_FLAGS} ${CHARSET_FLAG}" CACHE STRING "") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${VCPKG_CXX_FLAGS_DEBUG}" CACHE STRING "") +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "") +set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "") + +# Make sure the name mangling of Intel Fortran generated symbols is all lowercase with underscore suffix +# because this is assumed by many libraries (that e.g. consume BLAS/LAPACK and even CMake itself!) +set(CMAKE_Fortran_FLAGS_INIT "/Z7 /names:lowercase /assume:underscore /assume:protect_parens" CACHE STRING "") +# Set linker flags. +foreach(LINKER SHARED_LINKER MODULE_LINKER EXE_LINKER) + set(CMAKE_${LINKER}_FLAGS_INIT "${VCPKG_LINKER_FLAGS}") + set(CMAKE_${LINKER}_FLAGS_DEBUG "/INCREMENTAL /DEBUG:FULL" CACHE STRING "") + set(CMAKE_${LINKER}_FLAGS_RELEASE "/OPT:REF /OPT:ICF" CACHE STRING "") + set(CMAKE_${LINKER}_FLAGS_MINSIZEREL "/OPT:REF /OPT:ICF" CACHE STRING "") + set(CMAKE_${LINKER}_FLAGS_RELWITHDEBINFO "/OPT:REF /OPT:ICF /DEBUG:FULL" CACHE STRING "") +endforeach() + +# Set assembler flags. +set(CMAKE_ASM_MASM_FLAGS_INIT "${CMAKE_CL_NOLOGO}") + +# Set resource compiler flags. +set(CMAKE_RC_FLAGS_INIT "${CMAKE_CL_NOLOGO} -c65001 -DWIN32") +set(CMAKE_RC_FLAGS_DEBUG_INIT "-D_DEBUG") + +# Add windows defines. +add_compile_definitions(_WIN64 _WIN32_WINNT=0x0A00 WINVER=0x0A00) +add_compile_definitions(_CRT_SECURE_NO_DEPRECATE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_DEPRECATE) +add_compile_definitions(_ATL_SECURE_NO_DEPRECATE _SCL_SECURE_NO_WARNINGS) \ No newline at end of file diff --git a/triplets/community/x64-windows-intel-llvm.cmake b/triplets/community/x64-windows-intel-llvm.cmake new file mode 100644 index 00000000000000..0f48cff01f2f99 --- /dev/null +++ b/triplets/community/x64-windows-intel-llvm.cmake @@ -0,0 +1,101 @@ +function(z_vcpkg_load_environment_from_batch) + cmake_parse_arguments(PARSE_ARGV 0 args "" "BATCH_FILE_PATH" "ARGUMENTS") + if(args_BATCH_FILE_PATH STREQUAL "") + message(FATAL_ERROR "'${CMAKE_CURRENT_FUNCTION}' requires argument BATCH_FILE_PATH") + endif() + + # Get original environment + execute_process( + COMMAND "${CMAKE_COMMAND}" "-E" "environment" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + OUTPUT_FILE "environment-initial-out.log" + ERROR_FILE "environment-initial-err.log" + ) + file(READ "${CURRENT_BUILDTREES_DIR}/environment-initial-out.log" ENVIRONMENT_INITIAL) + + # Get modified envirnoment + string (REPLACE ";" " " SPACE_SEPARATED_ARGUMENTS "${args_ARGUMENTS}") + #message(STATUS "args_BATCH_FILE_PATH:${args_BATCH_FILE_PATH}") + file(WRITE "${CURRENT_BUILDTREES_DIR}/get-modified-environment.bat" "call \"${args_BATCH_FILE_PATH}\" ${SPACE_SEPARATED_ARGUMENTS}\n\"${CMAKE_COMMAND}\" -E environment") + execute_process( + COMMAND "cmd" "/c" "${CURRENT_BUILDTREES_DIR}/get-modified-environment.bat" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + OUTPUT_FILE "environment-after-out.log" + ERROR_FILE "environment-after-err.log" + ) + file(READ "${CURRENT_BUILDTREES_DIR}/environment-after-out.log" ENVIRONMENT_AFTER) + + # Escape characters that have a special meaning in CMake strings. + string(REPLACE "\\" "/" ENVIRONMENT_INITIAL "${ENVIRONMENT_INITIAL}") + string(REPLACE ";" "\\\\;" ENVIRONMENT_INITIAL "${ENVIRONMENT_INITIAL}") + string(REPLACE "\n" ";" ENVIRONMENT_INITIAL "${ENVIRONMENT_INITIAL}") + + string(REPLACE "\\" "/" ENVIRONMENT_AFTER "${ENVIRONMENT_AFTER}") + string(REPLACE ";" "\\\\;" ENVIRONMENT_AFTER "${ENVIRONMENT_AFTER}") + string(REPLACE "\n" ";" ENVIRONMENT_AFTER "${ENVIRONMENT_AFTER}") + + # Apply the environment changes to the current CMake environment + foreach(AFTER_LINE IN LISTS ENVIRONMENT_AFTER) + if("${AFTER_LINE}" MATCHES "^([^=]+)=(.+)$") + set(AFTER_VAR_NAME "${CMAKE_MATCH_1}") + set(AFTER_VAR_VALUE "${CMAKE_MATCH_2}") + + set(FOUND "FALSE") + foreach(INITIAL_LINE IN LISTS ENVIRONMENT_INITIAL) + if("${INITIAL_LINE}" MATCHES "^([^=]+)=(.+)$") + set(INITIAL_VAR_NAME "${CMAKE_MATCH_1}") + set(INITIAL_VAR_VALUE "${CMAKE_MATCH_2}") + + if("${AFTER_VAR_NAME}" STREQUAL "${INITIAL_VAR_NAME}") + set(FOUND "TRUE") + if(NOT "${AFTER_VAR_VALUE}" STREQUAL "${INITIAL_VAR_VALUE}") + + # Variable has been modified + # NOTE: we do not revert the escape changes that have previously been applied + # since the only change that should be visible in a single environment variable + # should be a conversion from `\` to `/` and this should not have any effect on + # windows paths. + #message(STATUS "MODIFIED ${AFTER_VAR_NAME}=${AFTER_VAR_VALUE}") + set(ENV{${AFTER_VAR_NAME}} "${AFTER_VAR_VALUE}") + endif() + endif() + endif() + endforeach() + + if(NOT FOUND) + # Variable has been added + set(ENV{${AFTER_VAR_NAME}} "${AFTER_VAR_VALUE}") + endif() + endif() + endforeach() +endfunction() + +################################################### + +#Toolset-Name: Intel(R) oneAPI DPC++ Compiler + +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_LIBRARY_LINKAGE dynamic) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_ENV_PASSTHROUGH_UNTRACKED "ONEAPI_ROOT;IFORT_COMPILER19;IFORT_COMPILER20;IFORT_COMPILER21") + +if(NOT PORT MATCHES "(boost|hwloc)") + set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_CURRENT_LIST_DIR}/x64-windows-intel-llvm.toolchain.cmake") + if(DEFINED VCPKG_PLATFORM_TOOLSET) + set(VCPKG_PLATFORM_TOOLSET "Intel(R) oneAPI DPC++ Compiler") + endif() +endif() + +# if(NOT PORT MATCHES "(lapack)") + # set(VCPKG_LIBRARY_LINKAGE static) +# endif() + +#set(VCPKG_POLICY_SKIP_ARCHITECTURE_CHECK enabled) +#set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled) +set(VCPKG_LOAD_VCVARS_ENV ON) + +include(vcpkg_execute_required_process OPTIONAL RESULT_VARIABLE ENV_LOADABLE) # Trick to skip the compiler detection for this file. +if(ENV_LOADABLE) + find_file(SETVARS NAMES setvars.bat PATHS ENV ONEAPI_ROOT) + z_vcpkg_load_environment_from_batch(BATCH_FILE_PATH "${SETVARS}") +endif() \ No newline at end of file diff --git a/triplets/community/x64-windows-intel-llvm.toolchain.cmake b/triplets/community/x64-windows-intel-llvm.toolchain.cmake new file mode 100644 index 00000000000000..5984fcfb38c1aa --- /dev/null +++ b/triplets/community/x64-windows-intel-llvm.toolchain.cmake @@ -0,0 +1,104 @@ +include_guard(GLOBAL) +#include("${CMAKE_CURRENT_LIST_DIR}/config.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/x64-windows-intel-llvm}.cmake") + +# Set C standard. +#set(CMAKE_C_STANDARD 11 CACHE STRING "") +#set(CMAKE_C_STANDARD_REQUIRED ON CACHE STRING "") +#set(CMAKE_C_EXTENSIONS ON CACHE STRING "") + +# Set C++ standard. +#set(CMAKE_CXX_STANDARD 20 CACHE STRING "") +#set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE STRING "") +#set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "") + +# Set compiler. +if (DEFINED ENV{ProgramW6432}) + file(TO_CMAKE_PATH "$ENV{ProgramW6432}" PROG_ROOT) +else() + file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" PROG_ROOT) +endif() +if(NOT PROG_ROOT MATCHES "(x86)") + set(PROG_ROOT "${PROG_ROOT} (x86)") +endif() + +file(TO_CMAKE_PATH "$ENV{ONEAPI_ROOT}" ONEAPI_ROOT) +message(STATUS "ONEAPI_ROOT:${ONEAPI_ROOT}") +file(GLOB COMPILER_VERSIONS LIST_DIRECTORIES true RELATIVE "${ONEAPI_ROOT}/compiler/" "${ONEAPI_ROOT}/compiler/*") +message(STATUS "COMPILER_VERSIONS:${COMPILER_VERSIONS}") +list(SORT COMPILER_VERSIONS COMPARE NATURAL ORDER DESCENDING) +message(STATUS "COMPILER_VERSIONS:${COMPILER_VERSIONS}") + +list(TRANSFORM COMPILER_VERSIONS PREPEND "${ONEAPI_ROOT}") + +find_program(ICX_EXECUTBALE NAMES "icx" "icx.exe" PATHS "${COMPILER_VERSIONS}" PATH_SUFFIXES "windows/bin") +find_program(IFX_EXECUTBALE NAMES "ifx" "ifx.exe" PATHS "${COMPILER_VERSIONS}") + +if(NOT ICX_EXECUTBALE) + message(SEND_ERROR "Intel Compiler icx was not found!") +endif() + +get_filename_component(INTEL_BIN_DIR "${ICX_EXECUTBALE}" DIRECTORY) +list(INSERT CMAKE_PROGRAM_PATH 0 "${INTEL_BIN_DIR}") + +set(CMAKE_C_COMPILER "${ICX_EXECUTBALE}" CACHE STRING "" FORCE) +set(CMAKE_CXX_COMPILER "${ICX_EXECUTBALE}" CACHE STRING "" FORCE) +#set(CMAKE_ASM_COMPILER "${ICX_EXECUTBALE}" CACHE STRING "" FORCE) +set(CMAKE_Fortran_COMPILER "${IFX_EXECUTBALE}" CACHE STRING "" FORCE) # unfortunally currently only works if cmake rules are bend a bit. +#set(CMAKE_AR "${INTEL_BIN_DIR}/llvm-ar.exe" CACHE STRING "" FORCE) +#set(CMAKE_LINKER "${INTEL_BIN_DIR}/lld-link.exe" CACHE STRING "" FORCE) +#set(CMAKE_RANLIB "${INTEL_BIN_DIR}/llvm-ranlib.exe" CACHE STRING "" FORCE) +# Intel compiler does not install 'llvm-ranlib' which is simply 'llvm-ar s' but this cannot be set here. +# so simply copy llvm-ar and rename it yourself! +# # Set runtime library. +# set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>$<$:DLL>" CACHE STRING "") +# if(VCPKG_CRT_LINKAGE STREQUAL "dynamic") + # set(VCPKG_CRT_FLAG "/MD") + # set(VCPKG_DBG_FLAG "/Z7") +# elseif(VCPKG_CRT_LINKAGE STREQUAL "static") + # set(VCPKG_CRT_FLAG "/MT") + # set(VCPKG_DBG_FLAG "/Z7") +# else() + # message(FATAL_ERROR "Invalid VCPKG_CRT_LINKAGE: \"${VCPKG_CRT_LINKAGE}\".") +# endif() + +# # Set compiler flags. +# # Disable logo for compiler and linker. +# set(CMAKE_CL_NOLOGO "/nologo" CACHE STRING "") +# #set(VCPKG_INTEL_FLAGS "/Qm64 /QxAVX /arch:AVX") +# #set(MSVC_VERSION 1928) + + +# set(CMAKE_C_FLAGS "${CMAKE_CL_NOLOGO} /DWIN32 /D_WINDOWS /FC ${VCPKG_C_FLAGS} ${CHARSET_FLAG}" CACHE STRING "") +# set(CMAKE_C_FLAGS_DEBUG "/Od /Ob0 /GS /RTC1 ${VCPKG_C_FLAGS_DEBUG} ${VCPKG_CRT_FLAG}d ${VCPKG_DBG_FLAG}" CACHE STRING "") +# set(CMAKE_C_FLAGS_RELEASE "/O1 /Oi /Ob2 /GS- ${VCPKG_C_FLAGS_RELEASE} ${VCPKG_CRT_FLAG} /DNDEBUG" CACHE STRING "") +# set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /Oi /Ob1 /GS- ${VCPKG_C_FLAGS_RELEASE} ${VCPKG_CRT_FLAG} /DNDEBUG" CACHE STRING "") +# set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Oi /Ob1 /GS- ${VCPKG_C_FLAGS_RELEASE} ${VCPKG_CRT_FLAG} ${VCPKG_DBG_FLAG} /DNDEBUG" CACHE STRING "") + +# # TODO: Remove /U__cpp_concepts once LLVM adds MS STL support. +# set(CMAKE_CXX_FLAGS "${CMAKE_CL_NOLOGO} /DWIN32 /D_WINDOWS /FC /permissive- ${VCPKG_CXX_FLAGS} ${CHARSET_FLAG}" CACHE STRING "") +# set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${VCPKG_CXX_FLAGS_DEBUG}" CACHE STRING "") +# set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "") +# set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "") +# set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "") + +# # Set linker flags. +# foreach(LINKER SHARED_LINKER MODULE_LINKER EXE_LINKER) + # set(CMAKE_${LINKER}_FLAGS_INIT "${VCPKG_LINKER_FLAGS}") + # set(CMAKE_${LINKER}_FLAGS_DEBUG "/INCREMENTAL /DEBUG:FULL" CACHE STRING "") + # set(CMAKE_${LINKER}_FLAGS_RELEASE "/OPT:REF /OPT:ICF" CACHE STRING "") + # set(CMAKE_${LINKER}_FLAGS_MINSIZEREL "/OPT:REF /OPT:ICF" CACHE STRING "") + # set(CMAKE_${LINKER}_FLAGS_RELWITHDEBINFO "/OPT:REF /OPT:ICF /DEBUG:FULL" CACHE STRING "") +# endforeach() + +# # Set assembler flags. +# set(CMAKE_ASM_MASM_FLAGS_INIT "${CMAKE_CL_NOLOGO}") + +# # Set resource compiler flags. +# set(CMAKE_RC_FLAGS_INIT "${CMAKE_CL_NOLOGO} -c65001 -DWIN32") +# set(CMAKE_RC_FLAGS_DEBUG_INIT "-D_DEBUG") + +# # Add windows defines. +# add_compile_definitions(_WIN64 _WIN32_WINNT=0x0A00 WINVER=0x0A00) +# add_compile_definitions(_CRT_SECURE_NO_DEPRECATE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_DEPRECATE) +# add_compile_definitions(_ATL_SECURE_NO_DEPRECATE _SCL_SECURE_NO_WARNINGS) \ No newline at end of file diff --git a/triplets/community/x64-windows-intel.cmake b/triplets/community/x64-windows-intel.cmake new file mode 100644 index 00000000000000..e3bd50988c94e6 --- /dev/null +++ b/triplets/community/x64-windows-intel.cmake @@ -0,0 +1,101 @@ +function(z_vcpkg_load_environment_from_batch) + cmake_parse_arguments(PARSE_ARGV 0 args "" "BATCH_FILE_PATH" "ARGUMENTS") + if(args_BATCH_FILE_PATH STREQUAL "") + message(FATAL_ERROR "'${CMAKE_CURRENT_FUNCTION}' requires argument BATCH_FILE_PATH") + endif() + + # Get original environment + execute_process( + COMMAND "${CMAKE_COMMAND}" "-E" "environment" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + OUTPUT_FILE "environment-initial-out.log" + ERROR_FILE "environment-initial-err.log" + ) + file(READ "${CURRENT_BUILDTREES_DIR}/environment-initial-out.log" ENVIRONMENT_INITIAL) + + # Get modified envirnoment + string (REPLACE ";" " " SPACE_SEPARATED_ARGUMENTS "${args_ARGUMENTS}") + #message(STATUS "args_BATCH_FILE_PATH:${args_BATCH_FILE_PATH}") + file(WRITE "${CURRENT_BUILDTREES_DIR}/get-modified-environment.bat" "call \"${args_BATCH_FILE_PATH}\" ${SPACE_SEPARATED_ARGUMENTS}\n\"${CMAKE_COMMAND}\" -E environment") + execute_process( + COMMAND "cmd" "/c" "${CURRENT_BUILDTREES_DIR}/get-modified-environment.bat" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + OUTPUT_FILE "environment-after-out.log" + ERROR_FILE "environment-after-err.log" + ) + file(READ "${CURRENT_BUILDTREES_DIR}/environment-after-out.log" ENVIRONMENT_AFTER) + + # Escape characters that have a special meaning in CMake strings. + string(REPLACE "\\" "/" ENVIRONMENT_INITIAL "${ENVIRONMENT_INITIAL}") + string(REPLACE ";" "\\\\;" ENVIRONMENT_INITIAL "${ENVIRONMENT_INITIAL}") + string(REPLACE "\n" ";" ENVIRONMENT_INITIAL "${ENVIRONMENT_INITIAL}") + + string(REPLACE "\\" "/" ENVIRONMENT_AFTER "${ENVIRONMENT_AFTER}") + string(REPLACE ";" "\\\\;" ENVIRONMENT_AFTER "${ENVIRONMENT_AFTER}") + string(REPLACE "\n" ";" ENVIRONMENT_AFTER "${ENVIRONMENT_AFTER}") + + # Apply the environment changes to the current CMake environment + foreach(AFTER_LINE IN LISTS ENVIRONMENT_AFTER) + if("${AFTER_LINE}" MATCHES "^([^=]+)=(.+)$") + set(AFTER_VAR_NAME "${CMAKE_MATCH_1}") + set(AFTER_VAR_VALUE "${CMAKE_MATCH_2}") + + set(FOUND "FALSE") + foreach(INITIAL_LINE IN LISTS ENVIRONMENT_INITIAL) + if("${INITIAL_LINE}" MATCHES "^([^=]+)=(.+)$") + set(INITIAL_VAR_NAME "${CMAKE_MATCH_1}") + set(INITIAL_VAR_VALUE "${CMAKE_MATCH_2}") + + if("${AFTER_VAR_NAME}" STREQUAL "${INITIAL_VAR_NAME}") + set(FOUND "TRUE") + if(NOT "${AFTER_VAR_VALUE}" STREQUAL "${INITIAL_VAR_VALUE}") + + # Variable has been modified + # NOTE: we do not revert the escape changes that have previously been applied + # since the only change that should be visible in a single environment variable + # should be a conversion from `\` to `/` and this should not have any effect on + # windows paths. + #message(STATUS "MODIFIED ${AFTER_VAR_NAME}=${AFTER_VAR_VALUE}") + set(ENV{${AFTER_VAR_NAME}} "${AFTER_VAR_VALUE}") + endif() + endif() + endif() + endforeach() + + if(NOT FOUND) + # Variable has been added + set(ENV{${AFTER_VAR_NAME}} "${AFTER_VAR_VALUE}") + endif() + endif() + endforeach() +endfunction() + +################################################### + +#Toolset-Name: Intel(R) oneAPI DPC++ Compiler + +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_LIBRARY_LINKAGE dynamic) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_ENV_PASSTHROUGH_UNTRACKED "ONEAPI_ROOT;IFORT_COMPILER19;IFORT_COMPILER20;IFORT_COMPILER21") + +if(NOT PORT MATCHES "(boost|hwloc)") + set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${CMAKE_CURRENT_LIST_DIR}/x64-windows-intel.toolchain.cmake") + if(DEFINED VCPKG_PLATFORM_TOOLSET) + set(VCPKG_PLATFORM_TOOLSET "Intel C++ Compiler 2021") + endif() +endif() + +# if(NOT PORT MATCHES "(lapack)") + # set(VCPKG_LIBRARY_LINKAGE static) +# endif() + +#set(VCPKG_POLICY_SKIP_ARCHITECTURE_CHECK enabled) +#set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled) +set(VCPKG_LOAD_VCVARS_ENV ON) + +include(vcpkg_execute_required_process OPTIONAL RESULT_VARIABLE ENV_LOADABLE) # Trick to skip the compiler detection for this file. +if(ENV_LOADABLE) + find_file(SETVARS NAMES setvars.bat PATHS ENV ONEAPI_ROOT) + z_vcpkg_load_environment_from_batch(BATCH_FILE_PATH "${SETVARS}") +endif() \ No newline at end of file diff --git a/triplets/community/x64-windows-intel.toolchain.cmake b/triplets/community/x64-windows-intel.toolchain.cmake new file mode 100644 index 00000000000000..d68ba169349f13 --- /dev/null +++ b/triplets/community/x64-windows-intel.toolchain.cmake @@ -0,0 +1,104 @@ +include_guard(GLOBAL) +#include("${CMAKE_CURRENT_LIST_DIR}/config.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/x64-windows-intel.cmake") + +# Set C standard. +#set(CMAKE_C_STANDARD 11 CACHE STRING "") +#set(CMAKE_C_STANDARD_REQUIRED ON CACHE STRING "") +#set(CMAKE_C_EXTENSIONS ON CACHE STRING "") + +# Set C++ standard. +#set(CMAKE_CXX_STANDARD 20 CACHE STRING "") +#set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE STRING "") +#set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "") + +# Set compiler. +if (DEFINED ENV{ProgramW6432}) + file(TO_CMAKE_PATH "$ENV{ProgramW6432}" PROG_ROOT) +else() + file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" PROG_ROOT) +endif() +if(NOT PROG_ROOT MATCHES "(x86)") + set(PROG_ROOT "${PROG_ROOT} (x86)") +endif() + +file(TO_CMAKE_PATH "$ENV{ONEAPI_ROOT}" ONEAPI_ROOT) +message(STATUS "ONEAPI_ROOT:${ONEAPI_ROOT}") +file(GLOB COMPILER_VERSIONS LIST_DIRECTORIES true RELATIVE "${ONEAPI_ROOT}/compiler/" "${ONEAPI_ROOT}/compiler/*") +message(STATUS "COMPILER_VERSIONS:${COMPILER_VERSIONS}") +list(SORT COMPILER_VERSIONS COMPARE NATURAL ORDER DESCENDING) +message(STATUS "COMPILER_VERSIONS:${COMPILER_VERSIONS}") + +list(TRANSFORM COMPILER_VERSIONS PREPEND "${ONEAPI_ROOT}") + +find_program(ICL_EXECUTABLE NAMES "icl" "icl.exe" PATHS "${COMPILER_VERSIONS}" PATH_SUFFIXES "windows/bin/intel64") +find_program(IFORT_EXECUTBALE NAMES "ifort" "ifort.exe" PATHS "${COMPILER_VERSIONS}" PATH_SUFFIXES "windows/bin/intel64") + +if(NOT ICL_EXECUTABLE) + message(SEND_ERROR "Intel Compiler icx was not found!") +endif() + +get_filename_component(INTEL_BIN_DIR "${ICL_EXECUTABLE}" DIRECTORY) +list(INSERT CMAKE_PROGRAM_PATH 0 "${INTEL_BIN_DIR}") + +set(CMAKE_C_COMPILER "${ICL_EXECUTABLE}" CACHE STRING "" FORCE) +set(CMAKE_CXX_COMPILER "${ICL_EXECUTABLE}" CACHE STRING "" FORCE) +#set(CMAKE_ASM_COMPILER "${ICL_EXECUTABLE}" CACHE STRING "" FORCE) +set(CMAKE_Fortran_COMPILER "${IFORT_EXECUTBALE}" CACHE STRING "" FORCE) # unfortunally currently only works if cmake rules are bend a bit. +#set(CMAKE_AR "${INTEL_BIN_DIR}/llvm-ar.exe" CACHE STRING "" FORCE) +#set(CMAKE_LINKER "${INTEL_BIN_DIR}/lld-link.exe" CACHE STRING "" FORCE) +#set(CMAKE_RANLIB "${INTEL_BIN_DIR}/llvm-ranlib.exe" CACHE STRING "" FORCE) +# Intel compiler does not install 'llvm-ranlib' which is simply 'llvm-ar s' but this cannot be set here. +# so simply copy llvm-ar and rename it yourself! +# # Set runtime library. +# set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>$<$:DLL>" CACHE STRING "") +# if(VCPKG_CRT_LINKAGE STREQUAL "dynamic") + # set(VCPKG_CRT_FLAG "/MD") + # set(VCPKG_DBG_FLAG "/Z7") +# elseif(VCPKG_CRT_LINKAGE STREQUAL "static") + # set(VCPKG_CRT_FLAG "/MT") + # set(VCPKG_DBG_FLAG "/Z7") +# else() + # message(FATAL_ERROR "Invalid VCPKG_CRT_LINKAGE: \"${VCPKG_CRT_LINKAGE}\".") +# endif() + +# # Set compiler flags. +# # Disable logo for compiler and linker. +# set(CMAKE_CL_NOLOGO "/nologo" CACHE STRING "") +# #set(VCPKG_INTEL_FLAGS "/Qm64 /QxAVX /arch:AVX") +# #set(MSVC_VERSION 1928) + + +# set(CMAKE_C_FLAGS "${CMAKE_CL_NOLOGO} /DWIN32 /D_WINDOWS /FC ${VCPKG_C_FLAGS} ${CHARSET_FLAG}" CACHE STRING "") +# set(CMAKE_C_FLAGS_DEBUG "/Od /Ob0 /GS /RTC1 ${VCPKG_C_FLAGS_DEBUG} ${VCPKG_CRT_FLAG}d ${VCPKG_DBG_FLAG}" CACHE STRING "") +# set(CMAKE_C_FLAGS_RELEASE "/O1 /Oi /Ob2 /GS- ${VCPKG_C_FLAGS_RELEASE} ${VCPKG_CRT_FLAG} /DNDEBUG" CACHE STRING "") +# set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /Oi /Ob1 /GS- ${VCPKG_C_FLAGS_RELEASE} ${VCPKG_CRT_FLAG} /DNDEBUG" CACHE STRING "") +# set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Oi /Ob1 /GS- ${VCPKG_C_FLAGS_RELEASE} ${VCPKG_CRT_FLAG} ${VCPKG_DBG_FLAG} /DNDEBUG" CACHE STRING "") + +# # TODO: Remove /U__cpp_concepts once LLVM adds MS STL support. +# set(CMAKE_CXX_FLAGS "${CMAKE_CL_NOLOGO} /DWIN32 /D_WINDOWS /FC /permissive- ${VCPKG_CXX_FLAGS} ${CHARSET_FLAG}" CACHE STRING "") +# set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${VCPKG_CXX_FLAGS_DEBUG}" CACHE STRING "") +# set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "") +# set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "") +# set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "") + +# # Set linker flags. +# foreach(LINKER SHARED_LINKER MODULE_LINKER EXE_LINKER) + # set(CMAKE_${LINKER}_FLAGS_INIT "${VCPKG_LINKER_FLAGS}") + # set(CMAKE_${LINKER}_FLAGS_DEBUG "/INCREMENTAL /DEBUG:FULL" CACHE STRING "") + # set(CMAKE_${LINKER}_FLAGS_RELEASE "/OPT:REF /OPT:ICF" CACHE STRING "") + # set(CMAKE_${LINKER}_FLAGS_MINSIZEREL "/OPT:REF /OPT:ICF" CACHE STRING "") + # set(CMAKE_${LINKER}_FLAGS_RELWITHDEBINFO "/OPT:REF /OPT:ICF /DEBUG:FULL" CACHE STRING "") +# endforeach() + +# # Set assembler flags. +# set(CMAKE_ASM_MASM_FLAGS_INIT "${CMAKE_CL_NOLOGO}") + +# # Set resource compiler flags. +# set(CMAKE_RC_FLAGS_INIT "${CMAKE_CL_NOLOGO} -c65001 -DWIN32") +# set(CMAKE_RC_FLAGS_DEBUG_INIT "-D_DEBUG") + +# # Add windows defines. +# add_compile_definitions(_WIN64 _WIN32_WINNT=0x0A00 WINVER=0x0A00) +# add_compile_definitions(_CRT_SECURE_NO_DEPRECATE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_DEPRECATE) +# add_compile_definitions(_ATL_SECURE_NO_DEPRECATE _SCL_SECURE_NO_WARNINGS) \ No newline at end of file diff --git a/triplets/x64-windows-static.cmake b/triplets/x64-windows-static.cmake index 1581d2b0ff9148..420de9f5aefd3a 100644 --- a/triplets/x64-windows-static.cmake +++ b/triplets/x64-windows-static.cmake @@ -1,4 +1 @@ -set(VCPKG_TARGET_ARCHITECTURE x64) -set(VCPKG_CRT_LINKAGE static) -set(VCPKG_LIBRARY_LINKAGE static) - +include("${CMAKE_CURRENT_LIST_DIR}/community/x64-windows-intel-llvm.cmake") diff --git a/triplets/x64-windows.cmake b/triplets/x64-windows.cmake index d0be7297f0c468..41cfd0cc91c382 100644 --- a/triplets/x64-windows.cmake +++ b/triplets/x64-windows.cmake @@ -1,4 +1 @@ -set(VCPKG_TARGET_ARCHITECTURE x64) -set(VCPKG_CRT_LINKAGE dynamic) -set(VCPKG_LIBRARY_LINKAGE dynamic) - +include("${CMAKE_CURRENT_LIST_DIR}/community/x64-windows-intel.cmake") \ No newline at end of file diff --git a/triplets/x86-windows.cmake b/triplets/x86-windows.cmake index 93c43c3ba2e8f0..c57b9574e1c32f 100644 --- a/triplets/x86-windows.cmake +++ b/triplets/x86-windows.cmake @@ -1,4 +1 @@ -set(VCPKG_TARGET_ARCHITECTURE x86) -set(VCPKG_CRT_LINKAGE dynamic) -set(VCPKG_LIBRARY_LINKAGE dynamic) - +include("${CMAKE_CURRENT_LIST_DIR}/community/x64-windows-ifort.cmake")