From 88837cc026a586560167bf56905666147af8ac00 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 25 Apr 2023 17:00:32 +0200 Subject: [PATCH 01/34] Update llvm version --- packages/fuzzer/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 50e3a3192..a7c8ff8c9 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -73,9 +73,9 @@ target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB}) include(ExternalProject) ExternalProject_Add( compiler-rt - URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2022-11-25.tar.gz + URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2023-04-25.tar.gz URL_HASH - SHA256=e691dc9b45c35713fa67c613d352b646f30cab5d35d15abfcf77cc004a3befdb + SHA256=200b32c897b1171824462706f577d7f1d6175da602eccfe570d2dceeac11d490 SOURCE_SUBDIR compiler-rt CMAKE_ARGS # compiler-rt usually initializes the sanitizer runtime by means of # a pointer in the .preinit_array section; since .preinit_array From b4efa9c8c0fba9ef50684537817b07c444f3bcc9 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Thu, 27 Apr 2023 12:06:30 +0200 Subject: [PATCH 02/34] Try specifying the target tuple --- packages/fuzzer/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index a7c8ff8c9..b4da13c17 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -91,6 +91,7 @@ ExternalProject_Add( # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} # We only need libfuzzer from the compiler-rt project. + -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=x86_64-linux-gnu BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${LIBFUZZER_TARGET} # Skip the install step because it tries to copy files to a hardcoded path in From 194b61af6b118fb7aec76669f64596c604447835 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Thu, 27 Apr 2023 17:13:56 +0200 Subject: [PATCH 03/34] Try out llvm 16 --- .github/workflows/run-all-tests.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index 789938111..db1098d76 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -22,10 +22,10 @@ jobs: run: | wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-get install software-properties-common - sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main' - sudo apt-get install clang-tidy-15 + sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main' + sudo apt-get install -y clang-tidy-16 sudo rm -f /usr/bin/clang-tidy - sudo ln -s /usr/bin/clang-tidy-15 /usr/bin/clang-tidy + sudo ln -s /usr/bin/clang-tidy-16 /usr/bin/clang-tidy - name: build fuzzer # Build the native addon so that CMake generates compile_commands.json that is needed by clang-tidy run: npm run build --workspace=@jazzer.js/fuzzer From b4eb86942855154872fc951d55f2d4b00a37356e Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Thu, 27 Apr 2023 17:19:06 +0200 Subject: [PATCH 04/34] Remove hardcode of linux triple --- packages/fuzzer/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index b4da13c17..a7c8ff8c9 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -91,7 +91,6 @@ ExternalProject_Add( # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} # We only need libfuzzer from the compiler-rt project. - -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=x86_64-linux-gnu BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${LIBFUZZER_TARGET} # Skip the install step because it tries to copy files to a hardcoded path in From 520065af2f89b384a8102a814c454f12c67ad599 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Fri, 28 Apr 2023 11:17:38 +0200 Subject: [PATCH 05/34] Check clang version --- .github/workflows/run-all-tests.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index db1098d76..a4a02f982 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -26,6 +26,8 @@ jobs: sudo apt-get install -y clang-tidy-16 sudo rm -f /usr/bin/clang-tidy sudo ln -s /usr/bin/clang-tidy-16 /usr/bin/clang-tidy + - name: check clang target + run: clang-16 --version - name: build fuzzer # Build the native addon so that CMake generates compile_commands.json that is needed by clang-tidy run: npm run build --workspace=@jazzer.js/fuzzer From abec9c5c7844d015a8cbb3591a44452f9503e621 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Fri, 28 Apr 2023 11:28:07 +0200 Subject: [PATCH 06/34] Add printing of libfuzzer target --- packages/fuzzer/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index a7c8ff8c9..3afe4cb00 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -69,6 +69,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node") target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}) target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB}) +message(STATUS "LIBFUZZER TARGET: ${LIBFUZZER_TARGET}") # Download and build compiler-rt, which contains libfuzzer. include(ExternalProject) ExternalProject_Add( From 2ba4e08cea17a60abb83d93ae036ee0a24ff1c04 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Fri, 28 Apr 2023 12:13:46 +0200 Subject: [PATCH 07/34] Print cmakecache file for compiler_rt --- .github/workflows/run-all-tests.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index a4a02f982..f2e88edb6 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -31,6 +31,11 @@ jobs: - name: build fuzzer # Build the native addon so that CMake generates compile_commands.json that is needed by clang-tidy run: npm run build --workspace=@jazzer.js/fuzzer + - name: get cmake values for compiler rt + if: always() + run: + cat + packages/fuzzer/build/compiler-rt-prefix/src/compiler-rt-build/CMakeCache.txt - name: check formatting and linting run: npm run check unit_tests: From c09fae3ae5a5c1119b4a07ca49339343b8f79e38 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Fri, 28 Apr 2023 14:11:47 +0200 Subject: [PATCH 08/34] Try out base llvm --- packages/fuzzer/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 3afe4cb00..eee3bb4fb 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -70,13 +70,17 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}) target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB}) message(STATUS "LIBFUZZER TARGET: ${LIBFUZZER_TARGET}") +message(STATUS "LLVM_TARGET_TRIPLE: ${LLVM_TARGET_TRIPLE}") # Download and build compiler-rt, which contains libfuzzer. include(ExternalProject) ExternalProject_Add( compiler-rt - URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2023-04-25.tar.gz + # URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2023-04-25.tar.gz + # URL_HASH + # SHA256=200b32c897b1171824462706f577d7f1d6175da602eccfe570d2dceeac11d490 + URL https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-16.0.2.tar.gz URL_HASH - SHA256=200b32c897b1171824462706f577d7f1d6175da602eccfe570d2dceeac11d490 + SHA256=97c3c6aafb53c4bb0ed2781a18d6f05e75445e24bb1dc57a32b74f8d710ac19f SOURCE_SUBDIR compiler-rt CMAKE_ARGS # compiler-rt usually initializes the sanitizer runtime by means of # a pointer in the .preinit_array section; since .preinit_array From 9947146141b973f181d75330a6f9dcc7988446b1 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 2 May 2023 09:23:31 +0200 Subject: [PATCH 09/34] Back to llvm 15 and our old fork --- .github/workflows/run-all-tests.yaml | 10 ++++++---- packages/fuzzer/CMakeLists.txt | 8 ++------ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index f2e88edb6..99b8b37bf 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -22,12 +22,14 @@ jobs: run: | wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-get install software-properties-common - sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main' - sudo apt-get install -y clang-tidy-16 + sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main' + sudo apt-get install -y clang-tidy-15 sudo rm -f /usr/bin/clang-tidy - sudo ln -s /usr/bin/clang-tidy-16 /usr/bin/clang-tidy + sudo ln -s /usr/bin/clang-tidy-15 /usr/bin/clang-tidy - name: check clang target - run: clang-16 --version + run: clang-15 --version + - name: cmake version + run: cmake --version - name: build fuzzer # Build the native addon so that CMake generates compile_commands.json that is needed by clang-tidy run: npm run build --workspace=@jazzer.js/fuzzer diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index eee3bb4fb..8cbdf348c 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -70,17 +70,13 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}) target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB}) message(STATUS "LIBFUZZER TARGET: ${LIBFUZZER_TARGET}") -message(STATUS "LLVM_TARGET_TRIPLE: ${LLVM_TARGET_TRIPLE}") # Download and build compiler-rt, which contains libfuzzer. include(ExternalProject) ExternalProject_Add( compiler-rt - # URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2023-04-25.tar.gz - # URL_HASH - # SHA256=200b32c897b1171824462706f577d7f1d6175da602eccfe570d2dceeac11d490 - URL https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-16.0.2.tar.gz + URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2022-11-25.tar.gz URL_HASH - SHA256=97c3c6aafb53c4bb0ed2781a18d6f05e75445e24bb1dc57a32b74f8d710ac19f + SHA256=e691dc9b45c35713fa67c613d352b646f30cab5d35d15abfcf77cc004a3befdb SOURCE_SUBDIR compiler-rt CMAKE_ARGS # compiler-rt usually initializes the sanitizer runtime by means of # a pointer in the .preinit_array section; since .preinit_array From fd74f7a74d32ee1bb1695769207a1faeb1fc1292 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 2 May 2023 09:33:15 +0200 Subject: [PATCH 10/34] llvm 16 and our old fork --- .github/workflows/run-all-tests.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index 99b8b37bf..5607d9bfc 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -22,12 +22,12 @@ jobs: run: | wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-get install software-properties-common - sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main' - sudo apt-get install -y clang-tidy-15 + sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main' + sudo apt-get install -y clang-tidy-16 sudo rm -f /usr/bin/clang-tidy - sudo ln -s /usr/bin/clang-tidy-15 /usr/bin/clang-tidy + sudo ln -s /usr/bin/clang-tidy-16 /usr/bin/clang-tidy - name: check clang target - run: clang-15 --version + run: clang-16 --version - name: cmake version run: cmake --version - name: build fuzzer From 09f102326b5110e763d820055bb33d4a633bd066 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 2 May 2023 10:18:03 +0200 Subject: [PATCH 11/34] llvm 16 and use base llvm 16 compiler rt instead of our fork --- packages/fuzzer/CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 8cbdf348c..fb7919d54 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -74,9 +74,12 @@ message(STATUS "LIBFUZZER TARGET: ${LIBFUZZER_TARGET}") include(ExternalProject) ExternalProject_Add( compiler-rt - URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2022-11-25.tar.gz + # URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2022-11-25.tar.gz + # URL_HASH + # SHA256=e691dc9b45c35713fa67c613d352b646f30cab5d35d15abfcf77cc004a3befdb + URL https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-16.0.2.tar.gz URL_HASH - SHA256=e691dc9b45c35713fa67c613d352b646f30cab5d35d15abfcf77cc004a3befdb + SHA256=97c3c6aafb53c4bb0ed2781a18d6f05e75445e24bb1dc57a32b74f8d710ac19f SOURCE_SUBDIR compiler-rt CMAKE_ARGS # compiler-rt usually initializes the sanitizer runtime by means of # a pointer in the .preinit_array section; since .preinit_array From 3e3cd07cf03dcfc76537c13dbc73e6941bc7e8b7 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 2 May 2023 13:40:26 +0200 Subject: [PATCH 12/34] Set compiler_rt_default_target_triple explicitly --- packages/fuzzer/CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index fb7919d54..c39e6c577 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -69,7 +69,12 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node") target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}) target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB}) -message(STATUS "LIBFUZZER TARGET: ${LIBFUZZER_TARGET}") +execute_process( + COMMAND "${CMAKE_CXX_COMPILER} --print-target-triple" + OUTPUT_VARIABLE target_triple +) + +message(STATUS "COMPILER: ${CMAKE_CXX_COMPILER}") # Download and build compiler-rt, which contains libfuzzer. include(ExternalProject) ExternalProject_Add( @@ -94,6 +99,8 @@ ExternalProject_Add( -DCOMPILER_RT_USE_LIBCXX=OFF # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + # Something in LLVM 16 meant that this was no longer being set which causes the build to break + -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE="${target_triple}" # We only need libfuzzer from the compiler-rt project. BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${LIBFUZZER_TARGET} From b3d8d76b0023222c48edf95766939cc59176a12b Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 2 May 2023 13:51:03 +0200 Subject: [PATCH 13/34] add debug message --- packages/fuzzer/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index c39e6c577..4899dde81 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -75,6 +75,7 @@ execute_process( ) message(STATUS "COMPILER: ${CMAKE_CXX_COMPILER}") +message(STATUS "TARGET : ${target_triple}") # Download and build compiler-rt, which contains libfuzzer. include(ExternalProject) ExternalProject_Add( From 5c48a2f4ce92474ea267855d94cadaba43bf41aa Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 2 May 2023 13:56:10 +0200 Subject: [PATCH 14/34] More debugging --- .github/workflows/run-all-tests.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index 5607d9bfc..8ce0c9332 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -26,8 +26,12 @@ jobs: sudo apt-get install -y clang-tidy-16 sudo rm -f /usr/bin/clang-tidy sudo ln -s /usr/bin/clang-tidy-16 /usr/bin/clang-tidy - - name: check clang target + - name: check clang version run: clang-16 --version + - name: check c++ compiler version + run: /usr/bin/c++ --version + - name: check target triple + run: /usr/bin/c++ --print-target-triple - name: cmake version run: cmake --version - name: build fuzzer From 37f9c06fd619b675972186d921d38f52491de11d Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 2 May 2023 15:07:25 +0200 Subject: [PATCH 15/34] Remove target triple stuff because it doesn't work on gcc, try out ubuntu 22 --- .github/workflows/run-all-tests.yaml | 6 +++--- packages/fuzzer/CMakeLists.txt | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index 8ce0c9332..7823d3c80 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -7,7 +7,7 @@ on: jobs: linting: name: lint - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: checkout uses: actions/checkout@v3 @@ -30,8 +30,8 @@ jobs: run: clang-16 --version - name: check c++ compiler version run: /usr/bin/c++ --version - - name: check target triple - run: /usr/bin/c++ --print-target-triple + # - name: check target triple + # run: /usr/bin/c++ --print-target-triple - name: cmake version run: cmake --version - name: build fuzzer diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 4899dde81..af3faa989 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -69,13 +69,13 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node") target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}) target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB}) -execute_process( - COMMAND "${CMAKE_CXX_COMPILER} --print-target-triple" - OUTPUT_VARIABLE target_triple -) +# execute_process( +# COMMAND "${CMAKE_CXX_COMPILER} --print-target-triple" +# OUTPUT_VARIABLE target_triple +# ) message(STATUS "COMPILER: ${CMAKE_CXX_COMPILER}") -message(STATUS "TARGET : ${target_triple}") +#message(STATUS "TARGET : ${target_triple}") # Download and build compiler-rt, which contains libfuzzer. include(ExternalProject) ExternalProject_Add( @@ -101,7 +101,7 @@ ExternalProject_Add( # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} # Something in LLVM 16 meant that this was no longer being set which causes the build to break - -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE="${target_triple}" + # -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE="${target_triple}" # We only need libfuzzer from the compiler-rt project. BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${LIBFUZZER_TARGET} From 63b342dde7352f5d39f606b92434c5541cafb797 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Wed, 3 May 2023 12:52:55 +0200 Subject: [PATCH 16/34] Put everything back to just the llvm fork update --- .github/workflows/run-all-tests.yaml | 20 +++----------------- packages/fuzzer/CMakeLists.txt | 18 +++--------------- 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index 7823d3c80..7171841d7 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -7,7 +7,7 @@ on: jobs: linting: name: lint - runs-on: ubuntu-22.04 + runs-on: ubuntu-20.04 steps: - name: checkout uses: actions/checkout@v3 @@ -22,26 +22,12 @@ jobs: run: | wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-get install software-properties-common - sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main' - sudo apt-get install -y clang-tidy-16 + sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main' + sudo apt-get install clang-tidy-15 sudo rm -f /usr/bin/clang-tidy - sudo ln -s /usr/bin/clang-tidy-16 /usr/bin/clang-tidy - - name: check clang version - run: clang-16 --version - - name: check c++ compiler version - run: /usr/bin/c++ --version - # - name: check target triple - # run: /usr/bin/c++ --print-target-triple - - name: cmake version - run: cmake --version - name: build fuzzer # Build the native addon so that CMake generates compile_commands.json that is needed by clang-tidy run: npm run build --workspace=@jazzer.js/fuzzer - - name: get cmake values for compiler rt - if: always() - run: - cat - packages/fuzzer/build/compiler-rt-prefix/src/compiler-rt-build/CMakeCache.txt - name: check formatting and linting run: npm run check unit_tests: diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index af3faa989..d5f050df8 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.15) +cmake_minimum_required(VERSION 3.20) project(jazzerjs) @@ -69,23 +69,13 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node") target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}) target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB}) -# execute_process( -# COMMAND "${CMAKE_CXX_COMPILER} --print-target-triple" -# OUTPUT_VARIABLE target_triple -# ) - -message(STATUS "COMPILER: ${CMAKE_CXX_COMPILER}") -#message(STATUS "TARGET : ${target_triple}") # Download and build compiler-rt, which contains libfuzzer. include(ExternalProject) ExternalProject_Add( compiler-rt - # URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2022-11-25.tar.gz - # URL_HASH - # SHA256=e691dc9b45c35713fa67c613d352b646f30cab5d35d15abfcf77cc004a3befdb - URL https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-16.0.2.tar.gz + URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2023-04-25.tar.gz URL_HASH - SHA256=97c3c6aafb53c4bb0ed2781a18d6f05e75445e24bb1dc57a32b74f8d710ac19f + SHA256=200b32c897b1171824462706f577d7f1d6175da602eccfe570d2dceeac11d490 SOURCE_SUBDIR compiler-rt CMAKE_ARGS # compiler-rt usually initializes the sanitizer runtime by means of # a pointer in the .preinit_array section; since .preinit_array @@ -100,8 +90,6 @@ ExternalProject_Add( -DCOMPILER_RT_USE_LIBCXX=OFF # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - # Something in LLVM 16 meant that this was no longer being set which causes the build to break - # -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE="${target_triple}" # We only need libfuzzer from the compiler-rt project. BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${LIBFUZZER_TARGET} From 49181f8b7584f98ae374138d3f4feedd436d76b9 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Wed, 3 May 2023 12:53:46 +0200 Subject: [PATCH 17/34] Forgot 2 lines --- .github/workflows/run-all-tests.yaml | 1 + packages/fuzzer/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index 7171841d7..789938111 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -25,6 +25,7 @@ jobs: sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main' sudo apt-get install clang-tidy-15 sudo rm -f /usr/bin/clang-tidy + sudo ln -s /usr/bin/clang-tidy-15 /usr/bin/clang-tidy - name: build fuzzer # Build the native addon so that CMake generates compile_commands.json that is needed by clang-tidy run: npm run build --workspace=@jazzer.js/fuzzer diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index d5f050df8..a7c8ff8c9 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.20) +cmake_minimum_required(VERSION 3.15) project(jazzerjs) From b7c2d0f4aa86c8dff7139d93fdbd46558e742aa9 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Wed, 3 May 2023 13:02:00 +0200 Subject: [PATCH 18/34] Update CI to use llvm16 --- .github/workflows/run-all-tests.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index 789938111..c4a79d7ab 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -22,10 +22,10 @@ jobs: run: | wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-get install software-properties-common - sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main' - sudo apt-get install clang-tidy-15 + sudo add-apt-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main' + sudo apt-get install clang-tidy-16 sudo rm -f /usr/bin/clang-tidy - sudo ln -s /usr/bin/clang-tidy-15 /usr/bin/clang-tidy + sudo ln -s /usr/bin/clang-tidy-16 /usr/bin/clang-tidy - name: build fuzzer # Build the native addon so that CMake generates compile_commands.json that is needed by clang-tidy run: npm run build --workspace=@jazzer.js/fuzzer From 4e3aa36b41a72e2dcc37e369acad964d26cccb0b Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 8 May 2023 15:00:27 +0200 Subject: [PATCH 19/34] Allow setting compiler_rt_default_target or guess based on compiler used --- packages/fuzzer/CMakeLists.txt | 28 ++++++++++++++++++ packages/fuzzer/fuzzer.test.ts | 53 ---------------------------------- 2 files changed, 28 insertions(+), 53 deletions(-) delete mode 100644 packages/fuzzer/fuzzer.test.ts diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index a7c8ff8c9..c074f1b78 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -69,6 +69,33 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node") target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}) target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB}) +# We're not sure why but sometimes systems don't end up setting LLVM_TARGET_TRIPLE used in llvm's cmake to eventually +# set COMPILER_RT_DEFAULT_TARGET which is necessary for compiler-rt to build +# 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 +if(NOT DEFINED ENV{COMPILER_RT_DEFAULT_TARGET}) + if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + execute_process(COMMAND ${CMAKE_CXX_COMPILER} "-print-target-triple" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + execute_process(COMMAND ${CMAKE_CXX_COMPILER} "-print-multiarch" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # pulled from https://github.com/llvm/llvm-project/blob/main/llvm/cmake/modules/GetHostTriple.cmake + if( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM64.*" ) + set( COMPILER_RT_DEFAULT_TARGET "aarch64-pc-windows-msvc" ) + elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM.*" ) + set( COMPILER_RT_DEFAULT_TARGET "armv7-pc-windows-msvc" ) + elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "x64" ) + set( COMPILER_RT_DEFAULT_TARGET "x86_64-pc-windows-msvc" ) + elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "X86" ) + set( COMPILER_RT_DEFAULT_TARGET "i686-pc-windows-msvc" ) + elseif( CMAKE_SIZEOF_VOID_P EQUAL 8 ) + set( COMPILER_RT_DEFAULT_TARGET "x86_64-pc-windows-msvc" ) + else() + set( COMPILER_RT_DEFAULT_TARGET "i686-pc-windows-msvc" ) + endif() + endif() + message(STATUS "COMPILER_RT_DEFAULT_TARGET not set, using ${COMPILER_RT_DEFAULT_TARGET}") +endif() + # Download and build compiler-rt, which contains libfuzzer. include(ExternalProject) ExternalProject_Add( @@ -90,6 +117,7 @@ ExternalProject_Add( -DCOMPILER_RT_USE_LIBCXX=OFF # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + # -DCOMPILER_RT_DEFAULT_TARGET=${COMPILER_RT_DEFAULT_TARGET} # We only need libfuzzer from the compiler-rt project. BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${LIBFUZZER_TARGET} diff --git a/packages/fuzzer/fuzzer.test.ts b/packages/fuzzer/fuzzer.test.ts deleted file mode 100644 index ccf55ba81..000000000 --- a/packages/fuzzer/fuzzer.test.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2022 Code Intelligence GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* eslint no-empty-function: 0 */ -import { fuzzer } from "./fuzzer"; - -describe("compare hooks", () => { - it("traceStrCmp supports equals operators", () => { - expect(fuzzer.tracer.traceStrCmp("a", "b", "==", 0)).toBe(false); - expect(fuzzer.tracer.traceStrCmp("a", "b", "===", 0)).toBe(false); - expect(fuzzer.tracer.traceStrCmp("a", "b", "!=", 0)).toBe(true); - expect(fuzzer.tracer.traceStrCmp("a", "b", "!==", 0)).toBe(true); - }); - - it("traceStrCmp handles objects of unknown types", () => { - const foo = () => 5; - expect(fuzzer.tracer.traceStrCmp(foo, "foo", "==", 0)).toBe(false); - expect(fuzzer.tracer.traceStrCmp(foo, "foo", "===", 0)).toBe(false); - expect(fuzzer.tracer.traceStrCmp(foo, "foo", "!=", 0)).toBe(true); - expect(fuzzer.tracer.traceStrCmp(foo, "foo", "!==", 0)).toBe(true); - }); -}); - -describe("incrementCounter", () => { - it("should support the NeverZero policy", () => { - expect(fuzzer.coverageTracker.readCounter(0)).toBe(0); - for (let counter = 1; counter <= 512; counter++) { - fuzzer.coverageTracker.incrementCounter(0); - if (counter < 256) { - expect(fuzzer.coverageTracker.readCounter(0)).toBe(counter); - } else if (counter < 511) { - expect(fuzzer.coverageTracker.readCounter(0)).toBe((counter % 256) + 1); - } else if (counter == 511) { - expect(fuzzer.coverageTracker.readCounter(0)).toBe(1); - } else { - expect(fuzzer.coverageTracker.readCounter(0)).toBe((counter % 256) + 2); - } - } - }); -}); From 864daf6336e6bf39899a60bb861a8f51dca72f47 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 8 May 2023 15:05:21 +0200 Subject: [PATCH 20/34] Revert "Allow setting compiler_rt_default_target or guess based on compiler used" This reverts commit 4e3aa36b41a72e2dcc37e369acad964d26cccb0b. --- packages/fuzzer/CMakeLists.txt | 28 ------------------ packages/fuzzer/fuzzer.test.ts | 53 ++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 28 deletions(-) create mode 100644 packages/fuzzer/fuzzer.test.ts diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index c074f1b78..a7c8ff8c9 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -69,33 +69,6 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node") target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}) target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB}) -# We're not sure why but sometimes systems don't end up setting LLVM_TARGET_TRIPLE used in llvm's cmake to eventually -# set COMPILER_RT_DEFAULT_TARGET which is necessary for compiler-rt to build -# 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 -if(NOT DEFINED ENV{COMPILER_RT_DEFAULT_TARGET}) - if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - execute_process(COMMAND ${CMAKE_CXX_COMPILER} "-print-target-triple" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET) - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - execute_process(COMMAND ${CMAKE_CXX_COMPILER} "-print-multiarch" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET) - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - # pulled from https://github.com/llvm/llvm-project/blob/main/llvm/cmake/modules/GetHostTriple.cmake - if( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM64.*" ) - set( COMPILER_RT_DEFAULT_TARGET "aarch64-pc-windows-msvc" ) - elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM.*" ) - set( COMPILER_RT_DEFAULT_TARGET "armv7-pc-windows-msvc" ) - elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "x64" ) - set( COMPILER_RT_DEFAULT_TARGET "x86_64-pc-windows-msvc" ) - elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "X86" ) - set( COMPILER_RT_DEFAULT_TARGET "i686-pc-windows-msvc" ) - elseif( CMAKE_SIZEOF_VOID_P EQUAL 8 ) - set( COMPILER_RT_DEFAULT_TARGET "x86_64-pc-windows-msvc" ) - else() - set( COMPILER_RT_DEFAULT_TARGET "i686-pc-windows-msvc" ) - endif() - endif() - message(STATUS "COMPILER_RT_DEFAULT_TARGET not set, using ${COMPILER_RT_DEFAULT_TARGET}") -endif() - # Download and build compiler-rt, which contains libfuzzer. include(ExternalProject) ExternalProject_Add( @@ -117,7 +90,6 @@ ExternalProject_Add( -DCOMPILER_RT_USE_LIBCXX=OFF # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - # -DCOMPILER_RT_DEFAULT_TARGET=${COMPILER_RT_DEFAULT_TARGET} # We only need libfuzzer from the compiler-rt project. BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${LIBFUZZER_TARGET} diff --git a/packages/fuzzer/fuzzer.test.ts b/packages/fuzzer/fuzzer.test.ts new file mode 100644 index 000000000..ccf55ba81 --- /dev/null +++ b/packages/fuzzer/fuzzer.test.ts @@ -0,0 +1,53 @@ +/* + * Copyright 2022 Code Intelligence GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* eslint no-empty-function: 0 */ +import { fuzzer } from "./fuzzer"; + +describe("compare hooks", () => { + it("traceStrCmp supports equals operators", () => { + expect(fuzzer.tracer.traceStrCmp("a", "b", "==", 0)).toBe(false); + expect(fuzzer.tracer.traceStrCmp("a", "b", "===", 0)).toBe(false); + expect(fuzzer.tracer.traceStrCmp("a", "b", "!=", 0)).toBe(true); + expect(fuzzer.tracer.traceStrCmp("a", "b", "!==", 0)).toBe(true); + }); + + it("traceStrCmp handles objects of unknown types", () => { + const foo = () => 5; + expect(fuzzer.tracer.traceStrCmp(foo, "foo", "==", 0)).toBe(false); + expect(fuzzer.tracer.traceStrCmp(foo, "foo", "===", 0)).toBe(false); + expect(fuzzer.tracer.traceStrCmp(foo, "foo", "!=", 0)).toBe(true); + expect(fuzzer.tracer.traceStrCmp(foo, "foo", "!==", 0)).toBe(true); + }); +}); + +describe("incrementCounter", () => { + it("should support the NeverZero policy", () => { + expect(fuzzer.coverageTracker.readCounter(0)).toBe(0); + for (let counter = 1; counter <= 512; counter++) { + fuzzer.coverageTracker.incrementCounter(0); + if (counter < 256) { + expect(fuzzer.coverageTracker.readCounter(0)).toBe(counter); + } else if (counter < 511) { + expect(fuzzer.coverageTracker.readCounter(0)).toBe((counter % 256) + 1); + } else if (counter == 511) { + expect(fuzzer.coverageTracker.readCounter(0)).toBe(1); + } else { + expect(fuzzer.coverageTracker.readCounter(0)).toBe((counter % 256) + 2); + } + } + }); +}); From b72068735775cc66d41bd8598c9649ac1a9151d1 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 8 May 2023 15:06:33 +0200 Subject: [PATCH 21/34] Check if target triple is set or use host triple from compiler --- packages/fuzzer/CMakeLists.txt | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index a7c8ff8c9..345bdc2d8 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -69,6 +69,33 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node") target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}) target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB}) +# We're not sure why but sometimes systems don't end up setting LLVM_TARGET_TRIPLE used in llvm's cmake to eventually +# set COMPILER_RT_DEFAULT_TARGET which is necessary for compiler-rt to build +# 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 +if(NOT DEFINED ENV{COMPILER_RT_DEFAULT_TARGET_TRIPLE}) + if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + execute_process(COMMAND ${CMAKE_CXX_COMPILER} "-print-target-triple" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET_TRIPLE) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + execute_process(COMMAND ${CMAKE_CXX_COMPILER} "-print-multiarch" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET_TRIPLE) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # pulled from https://github.com/llvm/llvm-project/blob/main/llvm/cmake/modules/GetHostTriple.cmake + if( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM64.*" ) + set( COMPILER_RT_DEFAULT_TARGET_TRIPLE "aarch64-pc-windows-msvc" ) + elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM.*" ) + set( COMPILER_RT_DEFAULT_TARGET_TRIPLE "armv7-pc-windows-msvc" ) + elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "x64" ) + set( COMPILER_RT_DEFAULT_TARGET_TRIPLE "x86_64-pc-windows-msvc" ) + elseif( CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "X86" ) + set( COMPILER_RT_DEFAULT_TARGET_TRIPLE "i686-pc-windows-msvc" ) + elseif( CMAKE_SIZEOF_VOID_P EQUAL 8 ) + set( COMPILER_RT_DEFAULT_TARGET_TRIPLE "x86_64-pc-windows-msvc" ) + else() + set( COMPILER_RT_DEFAULT_TARGET_TRIPLE "i686-pc-windows-msvc" ) + endif() + endif() + message(STATUS "COMPILER_RT_DEFAULT_TARGET_TRIPLE not set, using ${COMPILER_RT_DEFAULT_TARGET_TRIPLE}") +endif() + # Download and build compiler-rt, which contains libfuzzer. include(ExternalProject) ExternalProject_Add( From d9fb86912af5cf9fc8d544c96dec45a11db54581 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 8 May 2023 15:07:56 +0200 Subject: [PATCH 22/34] Set compiler_rt_default_target_triple in call to build llvm --- packages/fuzzer/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 345bdc2d8..65a14a040 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -117,6 +117,7 @@ ExternalProject_Add( -DCOMPILER_RT_USE_LIBCXX=OFF # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=${COMPILER_RT_DEFAULT_TARGET_TRIPLE} # We only need libfuzzer from the compiler-rt project. BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${LIBFUZZER_TARGET} From 5d621632521d4f33c77fcf71bff84ff2672c8355 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 8 May 2023 15:40:08 +0200 Subject: [PATCH 23/34] Fix the variable given to cmake --- packages/fuzzer/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 65a14a040..fdee5a1f4 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -93,6 +93,8 @@ if(NOT DEFINED ENV{COMPILER_RT_DEFAULT_TARGET_TRIPLE}) set( COMPILER_RT_DEFAULT_TARGET_TRIPLE "i686-pc-windows-msvc" ) endif() endif() + # strip whitespace because newlines from the shell calls will break the cmake call + string(STRIP COMPILER_RT_DEFAULT_TARGET_TRIPLE COMPILER_RT_DEFAULT_TARGET_TRIPLE) message(STATUS "COMPILER_RT_DEFAULT_TARGET_TRIPLE not set, using ${COMPILER_RT_DEFAULT_TARGET_TRIPLE}") endif() From 0ef3eb67fae53bf7ee30e1dd16c0055db482a75d Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 8 May 2023 15:46:50 +0200 Subject: [PATCH 24/34] Cmake is hard --- packages/fuzzer/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index fdee5a1f4..ae72d87ee 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -94,7 +94,7 @@ if(NOT DEFINED ENV{COMPILER_RT_DEFAULT_TARGET_TRIPLE}) endif() endif() # strip whitespace because newlines from the shell calls will break the cmake call - string(STRIP COMPILER_RT_DEFAULT_TARGET_TRIPLE COMPILER_RT_DEFAULT_TARGET_TRIPLE) + string(STRIP ${COMPILER_RT_DEFAULT_TARGET_TRIPLE} COMPILER_RT_DEFAULT_TARGET_TRIPLE) message(STATUS "COMPILER_RT_DEFAULT_TARGET_TRIPLE not set, using ${COMPILER_RT_DEFAULT_TARGET_TRIPLE}") endif() From baf51059fdd8e779ede01e37c98c981bb71d7167 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 8 May 2023 15:59:01 +0200 Subject: [PATCH 25/34] Try explicitly settings llvm dir --- packages/fuzzer/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index ae72d87ee..3c7d824ff 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -120,6 +120,7 @@ ExternalProject_Add( # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=${COMPILER_RT_DEFAULT_TARGET_TRIPLE} + -DLLVM_CMAKE_DIR= # We only need libfuzzer from the compiler-rt project. BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${LIBFUZZER_TARGET} From f47b55f748c4d5cc8695d4fe7218cfffbcd98465 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 8 May 2023 16:54:38 +0200 Subject: [PATCH 26/34] And we're back to testing in github actions --- .github/workflows/run-all-tests.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index c4a79d7ab..cd244dce7 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -48,6 +48,9 @@ jobs: - name: MSVC (windows) uses: ilammy/msvc-dev-cmd@v1 if: contains(matrix.os, 'windows') + - name: check for llvm-config + if: contains(matrix.os, 'windows') + run: llvm-config --version - name: install dependencies run: npm install - name: build project From 1136cd469862ceb99a91eb98b2f39953b119abd4 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 8 May 2023 17:00:44 +0200 Subject: [PATCH 27/34] Back to our old fork to check how it worked before --- packages/fuzzer/CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 3c7d824ff..546173697 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -102,9 +102,12 @@ endif() include(ExternalProject) ExternalProject_Add( compiler-rt - URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2023-04-25.tar.gz + # URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2023-04-25.tar.gz + # URL_HASH + # SHA256=200b32c897b1171824462706f577d7f1d6175da602eccfe570d2dceeac11d490 + URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2022-11-25.tar.gz URL_HASH - SHA256=200b32c897b1171824462706f577d7f1d6175da602eccfe570d2dceeac11d490 + SHA256=e691dc9b45c35713fa67c613d352b646f30cab5d35d15abfcf77cc004a3befdb SOURCE_SUBDIR compiler-rt CMAKE_ARGS # compiler-rt usually initializes the sanitizer runtime by means of # a pointer in the .preinit_array section; since .preinit_array From 5d32901f04ca5b174cb16a236743e73eda6f49fb Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Mon, 8 May 2023 17:07:45 +0200 Subject: [PATCH 28/34] Allow build to continue on error --- .github/workflows/run-all-tests.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index cd244dce7..a104802ad 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -51,6 +51,7 @@ jobs: - name: check for llvm-config if: contains(matrix.os, 'windows') run: llvm-config --version + continue-on-error: true - name: install dependencies run: npm install - name: build project From d494def2f28a14c78ebd9df03792931f964d286f Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 9 May 2023 09:16:20 +0200 Subject: [PATCH 29/34] Back to new fork and try different llvm_cmake_dir --- packages/fuzzer/CMakeLists.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 546173697..3cc3cc8c3 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -102,12 +102,12 @@ endif() include(ExternalProject) ExternalProject_Add( compiler-rt - # URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2023-04-25.tar.gz - # URL_HASH - # SHA256=200b32c897b1171824462706f577d7f1d6175da602eccfe570d2dceeac11d490 - URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2022-11-25.tar.gz + URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2023-04-25.tar.gz URL_HASH - SHA256=e691dc9b45c35713fa67c613d352b646f30cab5d35d15abfcf77cc004a3befdb + SHA256=200b32c897b1171824462706f577d7f1d6175da602eccfe570d2dceeac11d490 + # URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2022-11-25.tar.gz + # URL_HASH + # SHA256=e691dc9b45c35713fa67c613d352b646f30cab5d35d15abfcf77cc004a3befdb SOURCE_SUBDIR compiler-rt CMAKE_ARGS # compiler-rt usually initializes the sanitizer runtime by means of # a pointer in the .preinit_array section; since .preinit_array @@ -123,7 +123,7 @@ ExternalProject_Add( # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=${COMPILER_RT_DEFAULT_TARGET_TRIPLE} - -DLLVM_CMAKE_DIR= + -DLLVM_CMAKE_DIR=/llvm/cmake/modules # We only need libfuzzer from the compiler-rt project. BUILD_COMMAND ${CMAKE_COMMAND} --build --target ${LIBFUZZER_TARGET} From 88303cbd4d4b92744d3c6d74d64ddaf589e99756 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 9 May 2023 10:02:55 +0200 Subject: [PATCH 30/34] Try without setting compiler_rt_default_target_triple --- packages/fuzzer/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 3cc3cc8c3..2dde62029 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -122,7 +122,7 @@ ExternalProject_Add( -DCOMPILER_RT_USE_LIBCXX=OFF # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=${COMPILER_RT_DEFAULT_TARGET_TRIPLE} + # -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=${COMPILER_RT_DEFAULT_TARGET_TRIPLE} -DLLVM_CMAKE_DIR=/llvm/cmake/modules # We only need libfuzzer from the compiler-rt project. BUILD_COMMAND ${CMAKE_COMMAND} --build --target From 632fbc70efb191374cd06040702e6a0c968751f6 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 9 May 2023 11:07:40 +0200 Subject: [PATCH 31/34] Put compiler_rt_default_target_triple back --- packages/fuzzer/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 2dde62029..3cc3cc8c3 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -122,7 +122,7 @@ ExternalProject_Add( -DCOMPILER_RT_USE_LIBCXX=OFF # Use the same build type as the parent project. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - # -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=${COMPILER_RT_DEFAULT_TARGET_TRIPLE} + -DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=${COMPILER_RT_DEFAULT_TARGET_TRIPLE} -DLLVM_CMAKE_DIR=/llvm/cmake/modules # We only need libfuzzer from the compiler-rt project. BUILD_COMMAND ${CMAKE_COMMAND} --build --target From 28069265b5bcbe6de343321eb1c5e03b2f7f2e36 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 9 May 2023 11:08:20 +0200 Subject: [PATCH 32/34] Remove commented out code --- packages/fuzzer/CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index 3cc3cc8c3..ed1ab0933 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -105,9 +105,6 @@ ExternalProject_Add( URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2023-04-25.tar.gz URL_HASH SHA256=200b32c897b1171824462706f577d7f1d6175da602eccfe570d2dceeac11d490 - # URL https://github.com/CodeIntelligenceTesting/llvm-project-jazzer/archive/refs/tags/2022-11-25.tar.gz - # URL_HASH - # SHA256=e691dc9b45c35713fa67c613d352b646f30cab5d35d15abfcf77cc004a3befdb SOURCE_SUBDIR compiler-rt CMAKE_ARGS # compiler-rt usually initializes the sanitizer runtime by means of # a pointer in the .preinit_array section; since .preinit_array From 4cd729f015787a02f6067dd1ed8578cd0af81d8a Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 9 May 2023 11:10:39 +0200 Subject: [PATCH 33/34] Remove llvm-config check --- .github/workflows/run-all-tests.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/run-all-tests.yaml b/.github/workflows/run-all-tests.yaml index a104802ad..c4a79d7ab 100644 --- a/.github/workflows/run-all-tests.yaml +++ b/.github/workflows/run-all-tests.yaml @@ -48,10 +48,6 @@ jobs: - name: MSVC (windows) uses: ilammy/msvc-dev-cmd@v1 if: contains(matrix.os, 'windows') - - name: check for llvm-config - if: contains(matrix.os, 'windows') - run: llvm-config --version - continue-on-error: true - name: install dependencies run: npm install - name: build project From c790303fdb20ae621c17e90d66ad28570f56eab9 Mon Sep 17 00:00:00 2001 From: Brian Lewis Date: Tue, 9 May 2023 11:42:28 +0200 Subject: [PATCH 34/34] Switch gcc to dumpmachine --- packages/fuzzer/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/fuzzer/CMakeLists.txt b/packages/fuzzer/CMakeLists.txt index ed1ab0933..e791c7ff8 100644 --- a/packages/fuzzer/CMakeLists.txt +++ b/packages/fuzzer/CMakeLists.txt @@ -76,7 +76,7 @@ if(NOT DEFINED ENV{COMPILER_RT_DEFAULT_TARGET_TRIPLE}) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") execute_process(COMMAND ${CMAKE_CXX_COMPILER} "-print-target-triple" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET_TRIPLE) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - execute_process(COMMAND ${CMAKE_CXX_COMPILER} "-print-multiarch" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET_TRIPLE) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} "-dumpmachine" OUTPUT_VARIABLE COMPILER_RT_DEFAULT_TARGET_TRIPLE) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") # pulled from https://github.com/llvm/llvm-project/blob/main/llvm/cmake/modules/GetHostTriple.cmake if( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM64.*" )