From cd3fe3388d979a3ffeafea4d63bd95a644507ee5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Wed, 25 Sep 2024 17:02:07 +0200 Subject: [PATCH 01/10] Point to my SC project --- sonar-project.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index b8c3e73..3f6734d 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,8 +1,8 @@ -sonar.projectKey=sonarsource-cfamily-examples_linux-cmake-compdb-gh-actions-sc -sonar.organization=sonarsource-cfamily-examples +sonar.projectKey=alejandro-alvarez-sonarsource_linux-cmake-compdb-gh-actions-sc +sonar.organization=alejandro-alvarez-sonarsource sonar.projectName=linux-cmake-compdb-gh-actions-sc -sonar.projectVersion=1.0-SNAPSHOT +sonar.projectVersion=2.0-MODULES # ===================================================== # Properties that will be shared amongst all modules From e886cb1ba02956d66bd0ca41169902543507b3ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Wed, 25 Sep 2024 17:12:15 +0200 Subject: [PATCH 02/10] Enable modules analysis --- sonar-project.properties | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sonar-project.properties b/sonar-project.properties index 3f6734d..a25a9d6 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -10,3 +10,8 @@ sonar.projectVersion=2.0-MODULES # SQ standard properties sonar.sources=src +# Enable C++20 modules +# TODO: Remove internal +sonar.cfamily.internal.enableModules=true +# TODO: Remove +sonar.cfamily.analysisCache.mode=internal.off From 00c6a6bc95992d1baa24f3fdaec09a195afdc813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Thu, 26 Sep 2024 09:45:27 +0200 Subject: [PATCH 03/10] WIP --- CMakeLists.txt | 23 +++++++++++++++++++---- src/args.cppm | 1 + 2 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 src/args.cppm diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c9b676..2cd74a0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,23 @@ -cmake_minimum_required(VERSION 3.9) -project(sonar_scanner_example) +cmake_minimum_required(VERSION 3.30) + +# `import std;` is not supported yet by libstdc++ +set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_C_COMPILER clang) + +project(sonar_scanner_example LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_MODULE_STD 1) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wpedantic") -set(CMAKE_CXX_STANDARD 17) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_executable(sonar_scanner_example src/main.cpp) - +target_compile_features(sonar_scanner_example + INTERFACE cxx_std_20) +target_sources(sonar_scanner_example + PRIVATE + FILE_SET CXX_MODULES FILES src/args.cppm +) diff --git a/src/args.cppm b/src/args.cppm new file mode 100644 index 0000000..8140988 --- /dev/null +++ b/src/args.cppm @@ -0,0 +1 @@ +export module args; From b8c61f6b1f7f55501b26dfda94b9655911abb63e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Thu, 26 Sep 2024 15:42:53 +0200 Subject: [PATCH 04/10] Add some issues that are triggered if the module is visible --- CMakeLists.txt | 9 +-------- src/args.cppm | 39 +++++++++++++++++++++++++++++++++++++++ src/main.cpp | 32 ++++++++++++++------------------ 3 files changed, 54 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cd74a0..834bf70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,22 +1,15 @@ cmake_minimum_required(VERSION 3.30) -# `import std;` is not supported yet by libstdc++ -set(CMAKE_CXX_COMPILER clang++) -set(CMAKE_C_COMPILER clang) - project(sonar_scanner_example LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -set(CMAKE_CXX_MODULE_STD 1) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wpedantic") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_executable(sonar_scanner_example src/main.cpp) -target_compile_features(sonar_scanner_example - INTERFACE cxx_std_20) target_sources(sonar_scanner_example PRIVATE FILE_SET CXX_MODULES FILES src/args.cppm diff --git a/src/args.cppm b/src/args.cppm index 8140988..998ec9d 100644 --- a/src/args.cppm +++ b/src/args.cppm @@ -1 +1,40 @@ +module; +#include +#include +#include + export module args; + +export namespace args { + +enum class Error { + Ok, + TooLong, + TooManyArgs, + NullPtr, +}; + +std::variant process_args(int argc, char *argv[]) { + int num = argc - 1; + + if (num == 0) { + std::cout << "No arguments provided\n"; + } else if (num == 0) { // intentional mistake + std::cout << "1 argument provided\n"; + } else if (num == 2) { + std::cout << "2 arguments provided\n"; + } else { + std::cout << num << " arguments provided\n"; + } + if (argv != 0) { + std::cout << "argv not null\n"; + ; // intentional extra-semicolon + } + + if (argv == nullptr) { + return std::string_view(*argv); // intentional nullptr dereference + } + + return std::string_view(argv[0]); +} +} // namespace args diff --git a/src/main.cpp b/src/main.cpp index 9c8748d..dadb93f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,26 +1,22 @@ #include +#include -using namespace std; +import args; -int main(int argc, char* argv[]) { - int num = argc - 1; +using namespace std; - if (num == 0) { - cout << "No arguments provided\n"; - } else if (num == 0) { // intentional mistake - cout << "1 argument provided\n"; - } else if (num == 2) { - cout << "2 arguments provided\n"; - } else { - cout << num << " arguments provided\n"; - } - if (argv != 0) { - cout << "argv not null\n";; // intentional extra-semicolon - } - if (argv == nullptr) { - return **argv; // intentional nullptr dereference +int main(int argc, char *argv[]) { + auto get_proc_name = args::process_args(argc, argv); + if (std::holds_alternative(get_proc_name)) { + switch (std::get(get_proc_name)) { + case args::Error::TooLong: + std::cout << "Proc name too long\n"; + return 1; + } + return 0; } + auto &&value = std::get(get_proc_name); + std::cout << value << '\n'; return 0; } - From 05f38db1c11aff6b7d63100042907c0f49866254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Thu, 26 Sep 2024 15:45:33 +0200 Subject: [PATCH 05/10] Use Ninja --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0e260ed..049f92b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: - name: Generate compilation database run: | mkdir build - cmake -S . -B build + cmake -S . -B build -G Ninja - name: Run sonar-scanner env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 47761f47240c5d460fe4b8087a8a825986708152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Thu, 26 Sep 2024 15:47:07 +0200 Subject: [PATCH 06/10] Install ninja --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 049f92b..7c70b5c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,6 +15,10 @@ jobs: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Install sonar-scanner uses: sonarsource/sonarcloud-github-c-cpp@v3 + - name: Install Ninja + run: | + wget https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-linux.zip + sudo unzip ninja-linux.zip -d /usr/local/bin - name: Generate compilation database run: | mkdir build From d20c7528e6f5226d46f3b90f0b99b6c21430b25d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Thu, 26 Sep 2024 15:52:34 +0200 Subject: [PATCH 07/10] Install clang 18 --- .github/workflows/build.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7c70b5c..73e5c95 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,6 +5,8 @@ on: - main pull_request: types: [opened, synchronize, reopened] +env: + CLANG_VERSION: 18 jobs: build: name: Build @@ -19,10 +21,17 @@ jobs: run: | wget https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-linux.zip sudo unzip ninja-linux.zip -d /usr/local/bin + - name: Install clang + run: | + sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ${{env.CLANG_VERSION}} + sudo apt install -y clang-tools-${{env.CLANG_VERSION}} libc++-${{env.CLANG_VERSION}}-dev - name: Generate compilation database run: | mkdir build - cmake -S . -B build -G Ninja + cmake -S . -B build -G Ninja \ + -DCMAKE_CXX_COMPILER=clang++-${{env.CLANG_VERSION}} \ + -DCMAKE_C_COMPILER=clang-${{env.CLANG_VERSION}} \ + -DCMAKE_CXX_COMPILER_CLANG_SCAN_DEPS=clang-scan-deps-${{env.CLANG_VERSION}} - name: Run sonar-scanner env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 92c1599ac9c00fe21d8af090cb4242701bcce39c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Thu, 26 Sep 2024 16:12:00 +0200 Subject: [PATCH 08/10] Build --- .github/workflows/build.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 73e5c95..1c722f5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,13 +25,14 @@ jobs: run: | sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ${{env.CLANG_VERSION}} sudo apt install -y clang-tools-${{env.CLANG_VERSION}} libc++-${{env.CLANG_VERSION}}-dev - - name: Generate compilation database + - name: Generate compilation database and build run: | mkdir build cmake -S . -B build -G Ninja \ -DCMAKE_CXX_COMPILER=clang++-${{env.CLANG_VERSION}} \ - -DCMAKE_C_COMPILER=clang-${{env.CLANG_VERSION}} \ -DCMAKE_CXX_COMPILER_CLANG_SCAN_DEPS=clang-scan-deps-${{env.CLANG_VERSION}} + # The project needs to be built so the `.modmap` files are generated + cmake --build build --target all - name: Run sonar-scanner env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From de385bdeea801a933bbc205fbb3e6a84a38215aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Thu, 24 Oct 2024 10:24:06 +0200 Subject: [PATCH 09/10] Update sonar-project.properties --- sonar-project.properties | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index a25a9d6..a587942 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -11,7 +11,4 @@ sonar.projectVersion=2.0-MODULES # SQ standard properties sonar.sources=src # Enable C++20 modules -# TODO: Remove internal -sonar.cfamily.internal.enableModules=true -# TODO: Remove -sonar.cfamily.analysisCache.mode=internal.off +sonar.cfamily.enableModules=true From b7b059c5e471212c1598efee8cee80997b2c1403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Thu, 24 Oct 2024 10:30:48 +0200 Subject: [PATCH 10/10] Update sonar-project.properties --- sonar-project.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index a587942..816c7d4 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,8 +1,8 @@ -sonar.projectKey=alejandro-alvarez-sonarsource_linux-cmake-compdb-gh-actions-sc -sonar.organization=alejandro-alvarez-sonarsource +sonar.projectKey=sonarsource-cfamily-examples_linux-cmake-compdb-gh-actions-sc +sonar.organization=sonarsource-cfamily-examples sonar.projectName=linux-cmake-compdb-gh-actions-sc -sonar.projectVersion=2.0-MODULES +sonar.projectVersion=1.0-SNAPSHOT # ===================================================== # Properties that will be shared amongst all modules