@@ -69,6 +69,33 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
6969target_include_directories (${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC} )
7070target_link_libraries (${PROJECT_NAME} ${CMAKE_JS_LIB} )
7171
72+ # We're not sure why but sometimes systems don't end up setting LLVM_TARGET_TRIPLE used in llvm's cmake to eventually
73+ # set COMPILER_RT_DEFAULT_TARGET which is necessary for compiler-rt to build
74+ # So this will either take it from an envvar or try to set it to a sane value until we can figure out why it's broken
75+ if (NOT DEFINED ENV{COMPILER_RT_DEFAULT_TARGET})
76+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
77+ execute_process (COMMAND ${CMAKE_CXX_COMPILER} "-print-target-triple" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET )
78+ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
79+ execute_process (COMMAND ${CMAKE_CXX_COMPILER} "-print-multiarch" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET )
80+ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
81+ # pulled from https://github.com/llvm/llvm-project/blob/main/llvm/cmake/modules/GetHostTriple.cmake
82+ if ( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM64.*" )
83+ set ( COMPILER_RT_DEFAULT_TARGET "aarch64-pc-windows-msvc" )
84+ elseif ( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM.*" )
85+ set ( COMPILER_RT_DEFAULT_TARGET "armv7-pc-windows-msvc" )
86+ elseif ( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "x64" )
87+ set ( COMPILER_RT_DEFAULT_TARGET "x86_64-pc-windows-msvc" )
88+ elseif ( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "X86" )
89+ set ( COMPILER_RT_DEFAULT_TARGET "i686-pc-windows-msvc" )
90+ elseif ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
91+ set ( COMPILER_RT_DEFAULT_TARGET "x86_64-pc-windows-msvc" )
92+ else ()
93+ set ( COMPILER_RT_DEFAULT_TARGET "i686-pc-windows-msvc" )
94+ endif ()
95+ endif ()
96+ message (STATUS "COMPILER_RT_DEFAULT_TARGET not set, using ${COMPILER_RT_DEFAULT_TARGET} " )
97+ endif ()
98+
7299# Download and build compiler-rt, which contains libfuzzer.
73100include (ExternalProject )
74101ExternalProject_Add (
@@ -90,6 +117,7 @@ ExternalProject_Add(
90117 -DCOMPILER_RT_USE_LIBCXX=OFF
91118 # Use the same build type as the parent project.
92119 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
120+ # -DCOMPILER_RT_DEFAULT_TARGET=${COMPILER_RT_DEFAULT_TARGET}
93121 # We only need libfuzzer from the compiler-rt project.
94122 BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR > --target
95123 ${LIBFUZZER_TARGET}
0 commit comments