diff --git a/CMakeLists.txt b/CMakeLists.txt index ad3fbf77..a9cfea9f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ -cmake_minimum_required(VERSION 3.12) -project(Bloom LANGUAGES CXX VERSION 0.8.3) +cmake_minimum_required(VERSION 3.22) +project(Bloom LANGUAGES CXX VERSION 0.8.3) set(CMAKE_PROJECT_HOMEPAGE_URL "https://bloom.oscillate.io") set(CMAKE_VERBOSE_MAKEFILE off) @@ -73,6 +73,80 @@ if (${CMAKE_BUILD_TYPE} MATCHES "Debug") target_include_directories(Bloom PUBLIC /opt/Qt/6.1.2/Src) endif() +target_link_libraries(Bloom -static-libgcc -static-libstdc++) +target_link_libraries(Bloom -lstdc++fs) +target_link_libraries(Bloom -lpthread) +target_link_libraries(Bloom -lusb-1.0) +target_link_libraries(Bloom -lhidapi-libusb) +target_link_libraries(Bloom Qt6::Core) +target_link_libraries(Bloom Qt6::Gui) +target_link_libraries(Bloom Qt6::UiTools) +target_link_libraries(Bloom Qt6::Widgets) +target_link_libraries(Bloom Qt6::Xml) +target_link_libraries(Bloom Qt6::Svg) +target_link_libraries(Bloom Qt6::SvgWidgets) +target_link_libraries(Bloom Qt6::Network) + +target_compile_options( + Bloom + PUBLIC -std=c++2a + PUBLIC -pedantic + PUBLIC -Wconversion + PUBLIC -Wpessimizing-move + PUBLIC -Wredundant-move + PUBLIC -fno-sized-deallocation + PUBLIC $<$:-g> + PUBLIC $<$:-O0> + # PUBLIC $<$:-O3> + PUBLIC $<$:-Ofast> + PUBLIC $<$:-fno-inline> + PUBLIC $<$:-fkeep-static-functions> +) + +target_link_options( + Bloom + PUBLIC [=[-Wl,--disable-new-dtags]=] #,--verbose +) + +if (${ENABLE_SANITIZERS}) + message(WARNING "Sanitizers have been enabled") + + # For TSAN, see ThreadSanitizerSuppression.txt + + # Some sanitizers are not compatible with each other. + target_compile_options( + Bloom + PUBLIC "-fsanitize=address" + #PUBLIC "-fsanitize=undefined" + # PUBLIC "-fsanitize=thread" + # PUBLIC "$<$:-fsanitize=address>" + # PUBLIC "$<$:-fsanitize=undefined>" + # PUBLIC "$<$:-fsanitize=integer-divide-by-zero>" + # PUBLIC "$<$:-fsanitize=unreachable>" + # PUBLIC "$<$:-fsanitize=vla-bound>" + # PUBLIC "$<$:-fsanitize=null>" + # PUBLIC "$<$:-fsanitize=return>" + # PUBLIC "$<$:-fsanitize=signed-integer-overflow>" + # PUBLIC "$<$:-fsanitize=bounds>" + # PUBLIC "$<$:-fsanitize=alignment>" + # PUBLIC "$<$:-fsanitize=object-size>" + # PUBLIC "$<$:-fsanitize=float-divide-by-zero>" + # PUBLIC "$<$:-fsanitize=float-cast-overflow>" + # PUBLIC "$<$:-fsanitize=nonnull-attribute>" + # PUBLIC "$<$:-fsanitize=returns-nonnull-attribute>" + # PUBLIC "$<$:-fsanitize=bool>" + # PUBLIC "$<$:-fsanitize=enum>" + # PUBLIC "$<$:-fsanitize=vptr>" + ) + + target_link_libraries( + Bloom + "-fsanitize=address" + # "-fsanitize=undefined" + # "-fsanitize=thread" + ) +endif() + # Copy AVR8 TDFs to build directory and construct JSON mapping of AVR8 target signatures to TDF paths. add_custom_command( OUTPUT @@ -115,80 +189,6 @@ add_custom_command( ${CMAKE_CURRENT_SOURCE_DIR}/build/resources/UDevRules/99-bloom.rules ) -target_link_libraries(Bloom -static-libgcc -static-libstdc++) -target_link_libraries(Bloom -lstdc++fs) -target_link_libraries(Bloom -lpthread) -target_link_libraries(Bloom -lusb-1.0) -target_link_libraries(Bloom -lhidapi-libusb) -target_link_libraries(Bloom Qt6::Core) -target_link_libraries(Bloom Qt6::Gui) -target_link_libraries(Bloom Qt6::UiTools) -target_link_libraries(Bloom Qt6::Widgets) -target_link_libraries(Bloom Qt6::Xml) -target_link_libraries(Bloom Qt6::Svg) -target_link_libraries(Bloom Qt6::SvgWidgets) -target_link_libraries(Bloom Qt6::Network) - -target_compile_options( - Bloom - PUBLIC -std=c++2a - PUBLIC -pedantic - PUBLIC -Wconversion - PUBLIC -Wpessimizing-move - PUBLIC -Wredundant-move - PUBLIC -fno-sized-deallocation - PUBLIC $<$:-g> - PUBLIC $<$:-O0> -# PUBLIC $<$:-O3> - PUBLIC $<$:-Ofast> - PUBLIC $<$:-fno-inline> - PUBLIC $<$:-fkeep-static-functions> -) - -target_link_options( - Bloom - PUBLIC [=[-Wl,--disable-new-dtags]=] #,--verbose -) - -if (${ENABLE_SANITIZERS}) - message(WARNING "Sanitizers have been enabled") - - # For TSAN, see ThreadSanitizerSuppression.txt - - # Some sanitizers are not compatible with each other. - target_compile_options( - Bloom - PUBLIC "-fsanitize=address" - #PUBLIC "-fsanitize=undefined" -# PUBLIC "-fsanitize=thread" -# PUBLIC "$<$:-fsanitize=address>" -# PUBLIC "$<$:-fsanitize=undefined>" -# PUBLIC "$<$:-fsanitize=integer-divide-by-zero>" -# PUBLIC "$<$:-fsanitize=unreachable>" -# PUBLIC "$<$:-fsanitize=vla-bound>" -# PUBLIC "$<$:-fsanitize=null>" -# PUBLIC "$<$:-fsanitize=return>" -# PUBLIC "$<$:-fsanitize=signed-integer-overflow>" -# PUBLIC "$<$:-fsanitize=bounds>" -# PUBLIC "$<$:-fsanitize=alignment>" -# PUBLIC "$<$:-fsanitize=object-size>" -# PUBLIC "$<$:-fsanitize=float-divide-by-zero>" -# PUBLIC "$<$:-fsanitize=float-cast-overflow>" -# PUBLIC "$<$:-fsanitize=nonnull-attribute>" -# PUBLIC "$<$:-fsanitize=returns-nonnull-attribute>" -# PUBLIC "$<$:-fsanitize=bool>" -# PUBLIC "$<$:-fsanitize=enum>" -# PUBLIC "$<$:-fsanitize=vptr>" - ) - - target_link_libraries( - Bloom - "-fsanitize=address" -# "-fsanitize=undefined" -# "-fsanitize=thread" - ) -endif() - # Installation configuration set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/release/")