diff --git a/.builder/actions/build_samples.py b/.builder/actions/build_samples.py index 79475011b..71b7c952f 100644 --- a/.builder/actions/build_samples.py +++ b/.builder/actions/build_samples.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0. import Builder +import itertools import os import sys @@ -62,7 +63,7 @@ def run(self, env): 'servicetests/tests/ShadowUpdate/', ] - for sample_path in samples: + for sample_path in itertools.chain(samples, servicetests, da_samples, defender_samples): build_path = os.path.join('build', sample_path) steps.append(['cmake', f'-B{build_path}', @@ -71,43 +72,9 @@ def run(self, env): '-DCMAKE_BUILD_TYPE=RelWithDebInfo']) # append extra cmake configs steps[-1].extend(cmd_args.cmake_extra) - steps.append(['cmake', - '--build', build_path, - '--config', 'RelWithDebInfo']) - - for sample_path in servicetests: - build_path = os.path.join('build', sample_path) - steps.append(['cmake', - f'-B{build_path}', - f'-H{sample_path}', - f'-DCMAKE_PREFIX_PATH={env.install_dir}', - '-DCMAKE_BUILD_TYPE=RelWithDebInfo']) - # append extra cmake configs - steps[-1].extend(cmd_args.cmake_extra) - steps.append(['cmake', - '--build', build_path, - '--config', 'RelWithDebInfo']) - - for sample_path in da_samples: - build_path = os.path.join('build', sample_path) - steps.append(['cmake', - f'-B{build_path}', - f'-H{sample_path}', - f'-DCMAKE_PREFIX_PATH={env.install_dir}', - '-DCMAKE_BUILD_TYPE=RelWithDebInfo']) - # append extra cmake configs - steps[-1].extend(cmd_args.cmake_extra) - steps.append(['cmake', - '--build', build_path, - '--config', 'RelWithDebInfo']) - - for sample_path in defender_samples: - build_path = os.path.join('build', sample_path) - steps.append(['cmake', - f'-B{build_path}', - f'-H{sample_path}', - f'-DCMAKE_PREFIX_PATH={env.install_dir}', - '-DCMAKE_BUILD_TYPE=RelWithDebInfo']) + # Currently, cmake_args sets only Linux-specific options. + if sys.platform == "linux" or sys.platform == "linux2": + steps[-1].extend(env.config['cmake_args']) steps.append(['cmake', '--build', build_path, '--config', 'RelWithDebInfo']) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 824b407ba..5b54b5c0a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -685,3 +685,193 @@ jobs: - name: Check for edits to code-generated files run: | ./utils/check_codegen_edits.py + + clang-sanitizers: + runs-on: ubuntu-24.04 # latest + strategy: + matrix: + sanitizer-variants: ["tsan", "asan"] + permissions: + id-token: write # This is required for requesting the JWT + steps: + - name: Build ${{ env.PACKAGE_NAME }} + consumers + run: | + echo "Downloading source" + git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git --branch ${{ env.HEAD_REF || github.ref_name }} + echo "Running builder" + python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" + python builder.pyz build -p ${{ env.PACKAGE_NAME }} --variant ${{ matrix.sanitizer-variants }} + - name: Running samples in CI setup + run: | + python3 -m pip install boto3 + sudo apt-get update -y + sudo apt-get install softhsm2 -y + softhsm2-util --version + - name: configure AWS credentials (Fleet provisioning) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_FLEET_PROVISIONING_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run Fleet Provisioning service client test for MQTT311 + working-directory: ./aws-iot-device-sdk-cpp-v2/servicetests + run: | + export PYTHONPATH=${{ github.workspace }}/aws-iot-device-sdk-cpp-v2/utils + python3 ./test_cases/test_fleet_provisioning.py --config-file test_cases/mqtt3_fleet_provisioning_cfg.json --thing-name-prefix Fleet_Thing_ + - name: run Fleet Provisioning service client test for MQTT5 + working-directory: ./aws-iot-device-sdk-cpp-v2/servicetests + run: | + export PYTHONPATH=${{ github.workspace }}/aws-iot-device-sdk-cpp-v2/utils + python3 ./test_cases/test_fleet_provisioning.py --config-file test_cases/mqtt5_fleet_provisioning_cfg.json --thing-name-prefix Fleet_Thing_ + - name: run Fleet Provisioning with CSR service client test for MQTT311 + working-directory: ./aws-iot-device-sdk-cpp-v2/servicetests + run: | + export PYTHONPATH=${{ github.workspace }}/aws-iot-device-sdk-cpp-v2/utils + python3 ./test_cases/test_fleet_provisioning.py --config-file test_cases/mqtt3_fleet_provisioning_with_csr_cfg.json --thing-name-prefix Fleet_Thing_ + - name: run Fleet Provisioning with CSR service client test for MQTT5 + working-directory: ./aws-iot-device-sdk-cpp-v2/servicetests + run: | + export PYTHONPATH=${{ github.workspace }}/aws-iot-device-sdk-cpp-v2/utils + python3 ./test_cases/test_fleet_provisioning.py --config-file test_cases/mqtt5_fleet_provisioning_with_csr_cfg.json --thing-name-prefix Fleet_Thing_ + - name: configure AWS credentials (Jobs) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_JOBS_SERVICE_CLIENT_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run mqtt3 Jobs serviceTests + working-directory: ./aws-iot-device-sdk-cpp-v2/servicetests + run: | + export PYTHONPATH=${{ github.workspace }}/aws-iot-device-sdk-cpp-v2/utils + python3 ./test_cases/test_jobs_execution.py --config-file ${{ env.CI_SERVICE_TESTS_CFG_FOLDER }}/mqtt3_jobs_cfg.json + - name: run mqtt5 Jobs serviceTests + working-directory: ./aws-iot-device-sdk-cpp-v2/servicetests + run: | + export PYTHONPATH=${{ github.workspace }}/aws-iot-device-sdk-cpp-v2/utils + python3 ./test_cases/test_jobs_execution.py --config-file ${{ env.CI_SERVICE_TESTS_CFG_FOLDER }}/mqtt5_jobs_cfg.json + - name: configure AWS credentials (Shadow) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_SHADOW_SERVICE_CLIENT_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run Shadow service client test for MQTT5 + working-directory: ./aws-iot-device-sdk-cpp-v2/servicetests + run: | + export PYTHONPATH=${{ github.workspace }}/aws-iot-device-sdk-cpp-v2/utils + python3 ./test_cases/test_shadow_update.py --config-file test_cases/mqtt5_shadow_cfg.json + - name: run Shadow service client test for MQTT311 + working-directory: ./aws-iot-device-sdk-cpp-v2/servicetests + run: | + export PYTHONPATH=${{ github.workspace }}/aws-iot-device-sdk-cpp-v2/utils + python3 ./test_cases/test_shadow_update.py --config-file test_cases/mqtt3_shadow_cfg.json + - name: run Named Shadow service client test for MQTT311 + working-directory: ./aws-iot-device-sdk-cpp-v2/servicetests + run: | + export PYTHONPATH=${{ github.workspace }}/aws-iot-device-sdk-cpp-v2/utils + python3 ./test_cases/test_shadow_update.py --config-file test_cases/mqtt3_named_shadow_cfg.json + - name: run Named Shadow service client test for MQTT5 + working-directory: ./aws-iot-device-sdk-cpp-v2/servicetests + run: | + export PYTHONPATH=${{ github.workspace }}/aws-iot-device-sdk-cpp-v2/utils + python3 ./test_cases/test_shadow_update.py --config-file test_cases/mqtt5_named_shadow_cfg.json + - name: configure AWS credentials (Connect and PubSub) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_PUBSUB_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run Basic Connect sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_basic_connect_cfg.json + - name: run Websocket Connect sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_websocket_connect_cfg.json + - name: run MQTT3 PubSub sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_pubsub_cfg.json + - name: run PKCS11 Connect sample + run: | + mkdir -p /tmp/tokens + export SOFTHSM2_CONF=/tmp/softhsm2.conf + echo "directories.tokendir = /tmp/tokens" > /tmp/softhsm2.conf + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_pkcs11_connect_cfg.json + - name: configure AWS credentials (MQTT5) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_MQTT5_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run MQTT5 PubSub sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_mqtt5_pubsub_cfg.json + - name: run MQTT5 Shared Subscription sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_mqtt5_shared_subscription_cfg.json + - name: configure AWS credentials (Jobs) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_JOBS_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run Jobs sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_jobs_cfg.json + - name: run Mqtt5 Jobs sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_jobs_mqtt5_cfg.json + - name: configure AWS credentials (Cognito) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_COGNITO_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run CognitoConnect sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_cognito_connect_cfg.json + - name: configure AWS credentials (Custom Authorizer) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_CUSTOM_AUTHORIZER_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run CustomAuthorizerConnect sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_custom_authorizer_connect_cfg.json + - name: configure AWS credentials (Shadow) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_SHADOW_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run Shadow sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_shadow_cfg.json + - name: run Mqtt5 Shadow sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_shadow_mqtt5_cfg.json + - name: configure AWS credentials (Fleet provisioning) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_FLEET_PROVISIONING_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run Fleet Provisioning sample + run: | + echo "Generating UUID for IoT thing" + Sample_UUID=$(python3 -c "import uuid; print (uuid.uuid4())") + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_fleet_provisioning_cfg.json --input_uuid ${Sample_UUID} + python3 ${{ env.CI_UTILS_FOLDER }}/delete_iot_thing_ci.py --thing_name "Fleet_Thing_${Sample_UUID}" --region "us-east-1" + - name: run Mqtt5 Fleet Provisioning sample + run: | + echo "Generating UUID for IoT thing" + Sample_UUID=$(python3 -c "import uuid; print (uuid.uuid4())") + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_fleet_provisioning_mqtt5_cfg.json --input_uuid ${Sample_UUID} + python3 ${{ env.CI_UTILS_FOLDER }}/delete_iot_thing_ci.py --thing_name "Fleet_Thing_${Sample_UUID}" --region "us-east-1" + - name: configure AWS credentials (Secure tunneling) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_SECURE_TUNNEL }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + # Secure Tunneling has special requirements, so it uses a different Python file + - name: run Secure Tunneling sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_secure_tunnel_ci.py --sample_file "./aws-iot-device-sdk-cpp-v2/build/samples/secure_tunneling/secure_tunnel/secure-tunnel" --sample_region ${{ env.AWS_DEFAULT_REGION }} + - name: configure AWS credentials (X509) + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ env.CI_X509_ROLE }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: run X509 sample + run: | + python3 ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_x509_connect_cfg.json diff --git a/CMakeLists.txt b/CMakeLists.txt index 28719bafb..09e07114d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,8 @@ else() include(AwsFindPackage) endif() +include(AwsSanitizers) + aws_use_package(aws-crt-cpp) add_subdirectory(jobs) diff --git a/builder.json b/builder.json index 293a06351..f1b1b3787 100644 --- a/builder.json +++ b/builder.json @@ -29,6 +29,18 @@ "build" ] }, + "tsan": { + "cmake_args": [ + "-DENABLE_SANITIZERS=ON", + "-DSANITIZERS=thread" + ] + }, + "asan": { + "cmake_args": [ + "-DENABLE_SANITIZERS=ON", + "-DSANITIZERS=address,undefined" + ] + }, "build_gg_samples_only": { "!build_steps": [ "build", diff --git a/devicedefender/CMakeLists.txt b/devicedefender/CMakeLists.txt index 4605d1917..2fe5b20e9 100644 --- a/devicedefender/CMakeLists.txt +++ b/devicedefender/CMakeLists.txt @@ -88,7 +88,9 @@ if (BUILD_DEPS) endif() endif() -target_link_libraries(IotDeviceDefender-cpp IotDeviceCommon-cpp) +aws_add_sanitizers(IotDeviceDefender-cpp) + +target_link_libraries(IotDeviceDefender-cpp PUBLIC IotDeviceCommon-cpp) install(FILES ${AWS_IOTDEVICEDEFENDER_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/aws/iotdevicedefender/" COMPONENT Development) diff --git a/devicedefender/tests/CMakeLists.txt b/devicedefender/tests/CMakeLists.txt index 4ec1f7c32..59706fd98 100644 --- a/devicedefender/tests/CMakeLists.txt +++ b/devicedefender/tests/CMakeLists.txt @@ -19,4 +19,5 @@ if (UNIX AND NOT APPLE) add_net_test_case(Mqtt5DeviceDefenderCustomMetricSuccess) add_net_test_case(Mqtt5DeviceDefenderCustomMetricFail) generate_cpp_test_driver(${TEST_BINARY_NAME}) + aws_add_sanitizers(${TEST_BINARY_NAME}) endif() diff --git a/discovery/CMakeLists.txt b/discovery/CMakeLists.txt index 04c1e32f2..9f7d32f3f 100644 --- a/discovery/CMakeLists.txt +++ b/discovery/CMakeLists.txt @@ -87,7 +87,8 @@ if (BUILD_DEPS) endif() endif() -target_link_libraries(Discovery-cpp ${DEP_AWS_LIBS}) +aws_add_sanitizers(Discovery-cpp) +target_link_libraries(Discovery-cpp PUBLIC ${DEP_AWS_LIBS}) install(FILES ${AWS_DISCOVERY_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/aws/discovery/" COMPONENT Development) diff --git a/eventstream_rpc/CMakeLists.txt b/eventstream_rpc/CMakeLists.txt index 75596f6fd..956085b2a 100644 --- a/eventstream_rpc/CMakeLists.txt +++ b/eventstream_rpc/CMakeLists.txt @@ -85,8 +85,8 @@ if (NOT IS_SUBDIRECTORY_INCLUDE) aws_use_package(aws-crt-cpp) endif() - -target_link_libraries(EventstreamRpc-cpp ${DEP_AWS_LIBS}) +aws_add_sanitizers(EventstreamRpc-cpp) +target_link_libraries(EventstreamRpc-cpp PUBLIC ${DEP_AWS_LIBS}) install(FILES ${AWS_EVENTSTREAMRPC_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/aws/eventstreamrpc/" COMPONENT Development) diff --git a/eventstream_rpc/tests/CMakeLists.txt b/eventstream_rpc/tests/CMakeLists.txt index 7d283c6f6..53ac62dc1 100644 --- a/eventstream_rpc/tests/CMakeLists.txt +++ b/eventstream_rpc/tests/CMakeLists.txt @@ -36,6 +36,7 @@ add_test_case(OperateWhileDisconnected) #add_test_case(EchoOperation) #add_test_case(StressTestClient) generate_cpp_test_driver(${TEST_BINARY_NAME}) +aws_add_sanitizers(${TEST_BINARY_NAME}) target_include_directories(${TEST_BINARY_NAME} PUBLIC $ $) diff --git a/greengrass_ipc/CMakeLists.txt b/greengrass_ipc/CMakeLists.txt index c4be088d5..1deb66de1 100644 --- a/greengrass_ipc/CMakeLists.txt +++ b/greengrass_ipc/CMakeLists.txt @@ -33,7 +33,7 @@ if (WIN32) endif() add_library(GreengrassIpc-cpp ${AWS_GREENGRASSIPC_CPP_SRC}) -target_link_libraries(GreengrassIpc-cpp EventstreamRpc-cpp) +target_link_libraries(GreengrassIpc-cpp PUBLIC EventstreamRpc-cpp) set_target_properties(GreengrassIpc-cpp PROPERTIES LINKER_LANGUAGE CXX) @@ -93,8 +93,8 @@ if (NOT IS_SUBDIRECTORY_INCLUDE) aws_use_package(aws-crt-cpp) endif() - -target_link_libraries(GreengrassIpc-cpp ${DEP_AWS_LIBS}) +aws_add_sanitizers(GreengrassIpc-cpp) +target_link_libraries(GreengrassIpc-cpp PUBLIC ${DEP_AWS_LIBS}) install(FILES ${AWS_GREENGRASSIPC_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/aws/greengrass/" COMPONENT Development) diff --git a/identity/CMakeLists.txt b/identity/CMakeLists.txt index ef0eed925..ce663c46a 100644 --- a/identity/CMakeLists.txt +++ b/identity/CMakeLists.txt @@ -89,7 +89,8 @@ if (BUILD_DEPS) endif() endif() -target_link_libraries(IotIdentity-cpp ${DEP_AWS_LIBS}) +aws_add_sanitizers(IotIdentity-cpp) +target_link_libraries(IotIdentity-cpp PUBLIC ${DEP_AWS_LIBS}) install(FILES ${AWS_IOTIDENTITY_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/aws/iotidentity/" COMPONENT Development) diff --git a/iotdevicecommon/CMakeLists.txt b/iotdevicecommon/CMakeLists.txt index 613962241..134deb167 100644 --- a/iotdevicecommon/CMakeLists.txt +++ b/iotdevicecommon/CMakeLists.txt @@ -90,7 +90,9 @@ if (BUILD_DEPS) aws_use_package(aws-c-iot) endif() -target_link_libraries(IotDeviceCommon-cpp ${DEP_AWS_LIBS}) +aws_add_sanitizers(IotDeviceCommon-cpp) + +target_link_libraries(IotDeviceCommon-cpp PUBLIC ${DEP_AWS_LIBS}) install(FILES ${AWS_IOTDEVICECOMMON_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/aws/iotdevicecommon/" COMPONENT Development) diff --git a/jobs/CMakeLists.txt b/jobs/CMakeLists.txt index 613d5e65f..316dcb4d7 100644 --- a/jobs/CMakeLists.txt +++ b/jobs/CMakeLists.txt @@ -89,7 +89,9 @@ if (BUILD_DEPS) endif() endif() -target_link_libraries(IotJobs-cpp ${DEP_AWS_LIBS}) +aws_add_sanitizers(IotJobs-cpp) + +target_link_libraries(IotJobs-cpp PUBLIC ${DEP_AWS_LIBS}) install(FILES ${AWS_IOTJOBS_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/aws/iotjobs/" COMPONENT Development) diff --git a/samples/device_defender/basic_report/CMakeLists.txt b/samples/device_defender/basic_report/CMakeLists.txt index 495933784..af0871878 100644 --- a/samples/device_defender/basic_report/CMakeLists.txt +++ b/samples/device_defender/basic_report/CMakeLists.txt @@ -24,6 +24,10 @@ if (UNIX AND NOT APPLE) find_package(IotDeviceCommon-cpp REQUIRED) find_package(IotDeviceDefender-cpp REQUIRED) - target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp AWS::IotDeviceCommon-cpp AWS::IotDeviceDefender-cpp) + include(AwsSanitizers) + enable_language(C) + aws_add_sanitizers(${PROJECT_NAME}) + + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotDeviceCommon-cpp AWS::IotDeviceDefender-cpp) endif() diff --git a/samples/device_defender/mqtt5_basic_report/CMakeLists.txt b/samples/device_defender/mqtt5_basic_report/CMakeLists.txt index 90af4c7b1..2b616be2e 100644 --- a/samples/device_defender/mqtt5_basic_report/CMakeLists.txt +++ b/samples/device_defender/mqtt5_basic_report/CMakeLists.txt @@ -24,6 +24,10 @@ if (UNIX AND NOT APPLE) find_package(IotDeviceCommon-cpp REQUIRED) find_package(IotDeviceDefender-cpp REQUIRED) - target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp AWS::IotDeviceCommon-cpp AWS::IotDeviceDefender-cpp) + include(AwsSanitizers) + enable_language(C) + aws_add_sanitizers(${PROJECT_NAME}) + + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotDeviceCommon-cpp AWS::IotDeviceDefender-cpp) endif() diff --git a/samples/fleet_provisioning/fleet_provisioning/CMakeLists.txt b/samples/fleet_provisioning/fleet_provisioning/CMakeLists.txt index 955f2fd62..17b2414ae 100644 --- a/samples/fleet_provisioning/fleet_provisioning/CMakeLists.txt +++ b/samples/fleet_provisioning/fleet_provisioning/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(IotIdentity-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotIdentity-cpp) diff --git a/samples/fleet_provisioning/mqtt5_fleet_provisioning/CMakeLists.txt b/samples/fleet_provisioning/mqtt5_fleet_provisioning/CMakeLists.txt index 1271bd261..06813d204 100644 --- a/samples/fleet_provisioning/mqtt5_fleet_provisioning/CMakeLists.txt +++ b/samples/fleet_provisioning/mqtt5_fleet_provisioning/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(IotIdentity-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotIdentity-cpp) diff --git a/samples/greengrass/basic_discovery/CMakeLists.txt b/samples/greengrass/basic_discovery/CMakeLists.txt index 87de48568..dfd8aaabb 100644 --- a/samples/greengrass/basic_discovery/CMakeLists.txt +++ b/samples/greengrass/basic_discovery/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(Discovery-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::Discovery-cpp) diff --git a/samples/greengrass/ipc/CMakeLists.txt b/samples/greengrass/ipc/CMakeLists.txt index 6a967e702..91be8c9a4 100644 --- a/samples/greengrass/ipc/CMakeLists.txt +++ b/samples/greengrass/ipc/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(GreengrassIpc-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::EventstreamRpc-cpp AWS::GreengrassIpc-cpp) diff --git a/samples/jobs/job_execution/CMakeLists.txt b/samples/jobs/job_execution/CMakeLists.txt index b4c05f6dc..fae8d2cf4 100644 --- a/samples/jobs/job_execution/CMakeLists.txt +++ b/samples/jobs/job_execution/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(IotJobs-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotJobs-cpp) diff --git a/samples/jobs/mqtt5_job_execution/CMakeLists.txt b/samples/jobs/mqtt5_job_execution/CMakeLists.txt index 1dc0c37b8..d6548f57d 100644 --- a/samples/jobs/mqtt5_job_execution/CMakeLists.txt +++ b/samples/jobs/mqtt5_job_execution/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(IotJobs-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotJobs-cpp) diff --git a/samples/jobs/mqtt5_job_execution/main.cpp b/samples/jobs/mqtt5_job_execution/main.cpp index d3e3dbcd8..6782ccb8f 100644 --- a/samples/jobs/mqtt5_job_execution/main.cpp +++ b/samples/jobs/mqtt5_job_execution/main.cpp @@ -209,6 +209,7 @@ int main(int argc, char *argv[]) } else { + fprintf(stderr, "No pending jobs, exiting\n"); exit(-1); } } diff --git a/samples/mqtt/basic_connect/CMakeLists.txt b/samples/mqtt/basic_connect/CMakeLists.txt index ab27054d7..94a6845a9 100644 --- a/samples/mqtt/basic_connect/CMakeLists.txt +++ b/samples/mqtt/basic_connect/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/mqtt/cognito_connect/CMakeLists.txt b/samples/mqtt/cognito_connect/CMakeLists.txt index 2b1b5684a..e36b2ab76 100644 --- a/samples/mqtt/cognito_connect/CMakeLists.txt +++ b/samples/mqtt/cognito_connect/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/mqtt/custom_authorizer_connect/CMakeLists.txt b/samples/mqtt/custom_authorizer_connect/CMakeLists.txt index cf69edb32..808103437 100644 --- a/samples/mqtt/custom_authorizer_connect/CMakeLists.txt +++ b/samples/mqtt/custom_authorizer_connect/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/mqtt/pkcs11_connect/CMakeLists.txt b/samples/mqtt/pkcs11_connect/CMakeLists.txt index ced029a9b..0a9c6f6ac 100644 --- a/samples/mqtt/pkcs11_connect/CMakeLists.txt +++ b/samples/mqtt/pkcs11_connect/CMakeLists.txt @@ -32,4 +32,8 @@ endif() find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/mqtt/pkcs12_connect/CMakeLists.txt b/samples/mqtt/pkcs12_connect/CMakeLists.txt index 885b127e0..dd2401bb0 100644 --- a/samples/mqtt/pkcs12_connect/CMakeLists.txt +++ b/samples/mqtt/pkcs12_connect/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/mqtt/websocket_connect/CMakeLists.txt b/samples/mqtt/websocket_connect/CMakeLists.txt index e7230a6df..0c299000b 100644 --- a/samples/mqtt/websocket_connect/CMakeLists.txt +++ b/samples/mqtt/websocket_connect/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/mqtt/windows_cert_connect/CMakeLists.txt b/samples/mqtt/windows_cert_connect/CMakeLists.txt index 7b31ddef1..15ee802a8 100644 --- a/samples/mqtt/windows_cert_connect/CMakeLists.txt +++ b/samples/mqtt/windows_cert_connect/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/mqtt/x509_credentials_provider_connect/CMakeLists.txt b/samples/mqtt/x509_credentials_provider_connect/CMakeLists.txt index 1fc698ef6..d3162f7bd 100644 --- a/samples/mqtt/x509_credentials_provider_connect/CMakeLists.txt +++ b/samples/mqtt/x509_credentials_provider_connect/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/mqtt5/mqtt5_pubsub/CMakeLists.txt b/samples/mqtt5/mqtt5_pubsub/CMakeLists.txt index ac20b6ee7..521434c8f 100644 --- a/samples/mqtt5/mqtt5_pubsub/CMakeLists.txt +++ b/samples/mqtt5/mqtt5_pubsub/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/mqtt5/mqtt5_shared_subscription/CMakeLists.txt b/samples/mqtt5/mqtt5_shared_subscription/CMakeLists.txt index fe018f57c..732775992 100644 --- a/samples/mqtt5/mqtt5_shared_subscription/CMakeLists.txt +++ b/samples/mqtt5/mqtt5_shared_subscription/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/pub_sub/basic_pub_sub/CMakeLists.txt b/samples/pub_sub/basic_pub_sub/CMakeLists.txt index 70a641458..89689b4c6 100644 --- a/samples/pub_sub/basic_pub_sub/CMakeLists.txt +++ b/samples/pub_sub/basic_pub_sub/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/pub_sub/cycle_pub_sub/CMakeLists.txt b/samples/pub_sub/cycle_pub_sub/CMakeLists.txt index 1d6a49962..1a074224b 100644 --- a/samples/pub_sub/cycle_pub_sub/CMakeLists.txt +++ b/samples/pub_sub/cycle_pub_sub/CMakeLists.txt @@ -22,4 +22,8 @@ endif () find_package(aws-crt-cpp REQUIRED) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp) diff --git a/samples/secure_tunneling/secure_tunnel/CMakeLists.txt b/samples/secure_tunneling/secure_tunnel/CMakeLists.txt index 6b9e67324..9b32fb18a 100644 --- a/samples/secure_tunneling/secure_tunnel/CMakeLists.txt +++ b/samples/secure_tunneling/secure_tunnel/CMakeLists.txt @@ -26,4 +26,8 @@ find_package(IotSecureTunneling-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp AWS::IotDeviceCommon-cpp AWS::IotSecureTunneling-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotDeviceCommon-cpp AWS::IotSecureTunneling-cpp) diff --git a/samples/secure_tunneling/tunnel_notification/CMakeLists.txt b/samples/secure_tunneling/tunnel_notification/CMakeLists.txt index 86b229424..e81ac423c 100644 --- a/samples/secure_tunneling/tunnel_notification/CMakeLists.txt +++ b/samples/secure_tunneling/tunnel_notification/CMakeLists.txt @@ -26,4 +26,8 @@ find_package(IotSecureTunneling-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotDeviceCommon-cpp AWS::IotSecureTunneling-cpp) diff --git a/samples/shadow/mqtt5_shadow_sync/CMakeLists.txt b/samples/shadow/mqtt5_shadow_sync/CMakeLists.txt index 07c3fb2b7..c901844b1 100644 --- a/samples/shadow/mqtt5_shadow_sync/CMakeLists.txt +++ b/samples/shadow/mqtt5_shadow_sync/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(IotShadow-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotShadow-cpp) diff --git a/samples/shadow/shadow_sync/CMakeLists.txt b/samples/shadow/shadow_sync/CMakeLists.txt index 8e2501ac2..a19cb868f 100644 --- a/samples/shadow/shadow_sync/CMakeLists.txt +++ b/samples/shadow/shadow_sync/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(IotShadow-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotShadow-cpp) diff --git a/secure_tunneling/CMakeLists.txt b/secure_tunneling/CMakeLists.txt index 43b6a7ffc..9d57e8912 100644 --- a/secure_tunneling/CMakeLists.txt +++ b/secure_tunneling/CMakeLists.txt @@ -88,7 +88,9 @@ if (BUILD_DEPS) endif() endif() -target_link_libraries(IotSecureTunneling-cpp IotDeviceCommon-cpp) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(IotSecureTunneling-cpp PUBLIC IotDeviceCommon-cpp) install(FILES ${AWS_IOTSECURETUNNELING_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/aws/iotsecuretunneling/" COMPONENT Development) @@ -118,4 +120,3 @@ configure_file("cmake/iotsecuretunneling-cpp-config.cmake" install(FILES "${CMAKE_CURRENT_BINARY_DIR}/iotsecuretunneling-cpp-config.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/IotSecureTunneling-cpp/" COMPONENT Development) - diff --git a/secure_tunneling/tests/CMakeLists.txt b/secure_tunneling/tests/CMakeLists.txt index de0cc2592..7003f3cbf 100644 --- a/secure_tunneling/tests/CMakeLists.txt +++ b/secure_tunneling/tests/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(IotSecureTunneling-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) -target_link_libraries(${PROJECT_NAME} AWS::aws-crt-cpp AWS::IotDeviceCommon-cpp AWS::IotSecureTunneling-cpp) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotDeviceCommon-cpp AWS::IotSecureTunneling-cpp) diff --git a/servicetests/tests/FleetProvisioning/CMakeLists.txt b/servicetests/tests/FleetProvisioning/CMakeLists.txt index 3e751e893..c6e1a9dd3 100644 --- a/servicetests/tests/FleetProvisioning/CMakeLists.txt +++ b/servicetests/tests/FleetProvisioning/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(IotIdentity-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotIdentity-cpp) diff --git a/servicetests/tests/JobsExecution/CMakeLists.txt b/servicetests/tests/JobsExecution/CMakeLists.txt index 1bc9cd583..42d7329aa 100644 --- a/servicetests/tests/JobsExecution/CMakeLists.txt +++ b/servicetests/tests/JobsExecution/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(IotJobs-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotJobs-cpp) diff --git a/servicetests/tests/ShadowUpdate/CMakeLists.txt b/servicetests/tests/ShadowUpdate/CMakeLists.txt index b73d13d3c..32bd84ad6 100644 --- a/servicetests/tests/ShadowUpdate/CMakeLists.txt +++ b/servicetests/tests/ShadowUpdate/CMakeLists.txt @@ -25,4 +25,8 @@ find_package(IotShadow-cpp REQUIRED) install(TARGETS ${PROJECT_NAME} DESTINATION bin) +include(AwsSanitizers) +enable_language(C) +aws_add_sanitizers(${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME} PRIVATE AWS::aws-crt-cpp AWS::IotShadow-cpp) diff --git a/shadow/CMakeLists.txt b/shadow/CMakeLists.txt index 7f7f3fd02..c9e5c9aea 100644 --- a/shadow/CMakeLists.txt +++ b/shadow/CMakeLists.txt @@ -89,7 +89,9 @@ if (BUILD_DEPS) endif() endif() -target_link_libraries(IotShadow-cpp ${DEP_AWS_LIBS}) +aws_add_sanitizers(${PROJECT_NAME}) + +target_link_libraries(IotShadow-cpp PUBLIC ${DEP_AWS_LIBS}) install(FILES ${AWS_IOTSHADOW_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/aws/iotshadow/" COMPONENT Development) diff --git a/utils/run_sample_ci.py b/utils/run_sample_ci.py index 1e87c537e..fbfa034ef 100644 --- a/utils/run_sample_ci.py +++ b/utils/run_sample_ci.py @@ -290,7 +290,11 @@ def launch_sample(): elif (config_json['language'] == "CPP"): try: sample_return = subprocess.run( - args=config_json_arguments_list, executable=config_json['sample_file'], timeout=600, stderr=subprocess.STDOUT, stdout=subprocess.PIPE) + args=config_json_arguments_list, executable=config_json['sample_file'], timeout=600, capture_output=True, text=True) + print("stdout:") + print(sample_return.stdout) + print("stderr:") + print(sample_return.stderr) exit_code = sample_return.returncode except subprocess.TimeoutExpired as timeOut: sys.exit(-1)