From c16a0a1208f3605d80f53bcabc4e2947ec075e6d Mon Sep 17 00:00:00 2001 From: Username404 Date: Tue, 21 Dec 2021 19:47:53 +0100 Subject: [PATCH] Enable threads only when they are available, and replace "ybcon" occurrences with "${EXENAME}" in the CMakeLists.txt file --- CMakeLists.txt | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ab75387..7a2bd15 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,15 +44,17 @@ if (NOT NO_CCACHE) endif() endif() +find_package(Threads) if (${IS_GNU} OR ${IS_CLANG}) - if (NOT MINGW) + set(THREADS_PREFER_PTHREAD_FLAG TRUE) + if (Threads_FOUND AND NOT MINGW) include(FindOpenMP) if (OpenMP_CXX_FOUND) set(CMAKE_CXX_FLAGS "${OpenMP_CXX_FLAGS} ${CMAKE_CXX_FLAGS}") add_definitions(-D_GLIBCXX_PARALLEL) endif() endif() - set(CMAKE_CXX_FLAGS "-pthread ${CMAKE_CXX_FLAGS} -fstrict-enums -pipe -fstack-protector-strong -fstack-clash-protection -funwind-tables -fasynchronous-unwind-tables -frtti -fexceptions") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstrict-enums -pipe -fstack-protector-strong -fstack-clash-protection -funwind-tables -fasynchronous-unwind-tables -frtti -fexceptions") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffunction-sections -fdata-sections -fmerge-all-constants -ftree-vectorize") include(CheckCXXCompilerFlag) set(CF_PROTECTION "-fcf-protection") @@ -69,7 +71,10 @@ if (${IS_GNU}) if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${MINIMAL_GNU}) message(FATAL_ERROR "G++ ${MINIMAL_GNU} or higher is required.") endif() - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fvect-cost-model=unlimited -foptimize-strlen -fsched-pressure -flive-range-shrinkage -fpredictive-commoning -ftree-partial-pre -fzero-call-used-regs=used-gpr-arg -ftree-parallelize-loops=2 -fira-loop-pressure -ftree-loop-distribution -floop-interchange -fsplit-paths -fgcse-las -fgcse-sm -fipa-pta -fstdarg-opt -fivopts") + if (Threads_FOUND) + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ftree-parallelize-loops=2") + endif() + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fvect-cost-model=unlimited -foptimize-strlen -fsched-pressure -flive-range-shrinkage -fpredictive-commoning -ftree-partial-pre -fzero-call-used-regs=used-gpr-arg -fira-loop-pressure -ftree-loop-distribution -floop-interchange -fsplit-paths -fgcse-las -fgcse-sm -fipa-pta -fstdarg-opt -fivopts") if (${CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE}) set(CMAKE_CXX_FLAGS_RELEASE "-fwhole-program ${CMAKE_CXX_FLAGS_RELEASE}") endif() @@ -121,8 +126,11 @@ set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${CMAKE_PROJECT_VERSION}-${TIME}") include_directories(${CMAKE_CURRENT_LIST_DIR}) add_executable(${EXENAME} src/main.cpp ${CMAKE_CURRENT_BINARY_DIR}/processed/${PROJECT_NAME}.rc src/etc/filefuncs.cpp src/etc/lexer.cpp src/headers/lex.hpp src/headers/misc.hpp src/headers/parsing/ParseComponents.hpp src/headers/transpiler/Target.hpp src/headers/transpiler/implementations/Lua.hpp src/headers/transpiler/implementations/Js.hpp src/headers/transpiler/implementations/Py.hpp src/headers/parsing/Parser.hpp src/headers/arguments.hpp) -target_compile_definitions(ybcon PRIVATE YBCON_VERSION="${CODENAME} ${PROJECT_VERSION}") +target_compile_definitions(${EXENAME} PRIVATE YBCON_VERSION="${CODENAME} ${PROJECT_VERSION}") target_precompile_headers(${EXENAME} PRIVATE src/headers/Yerbacon.hpp) +if (Threads_FOUND) + target_link_libraries(${EXENAME} PRIVATE Threads::Threads) +endif() # lpkg = linux package, wpkg = windows package set(PNAME ${PROJECT_NAME}-${CODENAME}-${TIME}) @@ -154,7 +162,7 @@ if (UNIX AND NOT (MINGW OR CMAKE_HOST_WIN32)) COMMENT "Compressing the changelog file" ) add_custom_target(changelog ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${GZNAME}") - add_dependencies(ybcon changelog) + add_dependencies(${EXENAME} changelog) string(TOLOWER "${CMAKE_INSTALL_DOCDIR}" DEB_CHANGELOG_DEST_DIR) # Lowercase characters are needed because GNUInstallDirs uses the PROJECT_NAME variable. install( FILES "${CMAKE_CURRENT_BINARY_DIR}/${GZNAME}" @@ -177,10 +185,10 @@ if (UNIX AND NOT (MINGW OR CMAKE_HOST_WIN32)) set(CPACK_GENERATOR TGZ;STGZ;RPM;DEB) endif() install(PROGRAMS - ${CMAKE_CURRENT_BINARY_DIR}/ybcon + ${CMAKE_CURRENT_BINARY_DIR}/${EXENAME} DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}) - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/scripts/completions DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/ybcon.d) - install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/scripts/ybcon + install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/scripts/completions DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${EXENAME}.d) + install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/scripts/${EXENAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() elseif(MINGW OR MSVC) @@ -211,7 +219,7 @@ elseif(MINGW OR MSVC) # CMake 3.22+ is required to ignore the NSIS license page set(CPACK_NSIS_IGNORE_LICENSE_PAGE TRUE) set(CPACK_GENERATOR ZIP;NSIS) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ybcon.exe DESTINATION bin) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${EXENAME}.exe DESTINATION bin) endif() if (NOT DEFINED CXX_TARGET) set(CXX_TARGET ${CMAKE_HOST_SYSTEM_PROCESSOR})