cmake_modules/Commons.cmake (94 lines of code) (raw):

# Copyright (c) Meta Platforms, Inc. and affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. function(print_dirs var name) foreach (path ${var}) message(STATUS "${name}: " ${path}) endforeach () endfunction() macro(set_common_cxx_flags_for_redex) message(STATUS "Using C++17") set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if (MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /W1 /D_SCL_SECURE_NO_WARNINGS") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT") else () if (UNIX AND NOT APPLE AND ENABLE_STATIC) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++") elseif (MINGW) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -static-libgcc -static-libstdc++") endif () set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -Wall -pthread") set(COMMON_CXX_FLAGS_NODBG "-O3 -UNDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${COMMON_CXX_FLAGS_NODBG} -pthread") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${COMMON_CXX_FLAGS_NODBG} -pthread") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${COMMON_CXX_FLAGS_NODBG} -pthread") endif () endmacro() macro(add_dependent_packages_for_redex) message("-- ENABLE_STATIC ${ENABLE_STATIC}") if(ENABLE_STATIC) set(Boost_USE_STATIC_LIBS ON) if(NOT APPLE) set(Boost_USE_STATIC_RUNTIME ON) endif() set(Boost_USE_MULTITHREADED ON) endif() find_package(Boost 1.71.0 REQUIRED COMPONENTS system regex filesystem program_options iostreams thread) print_dirs("${Boost_INCLUDE_DIRS}" "Boost_INCLUDE_DIRS") print_dirs("${Boost_LIBRARIES}" "Boost_LIBRARIES") find_package(JsonCpp 0.10.5 REQUIRED) print_dirs("${JSONCPP_INCLUDE_DIRS}" "JSONCPP_INCLUDE_DIRS") if(ENABLE_STATIC) if (MINGW AND (EXISTS "${JSONCPP_INCLUDE_DIRS}/../lib/libjsoncpp.a")) # MSYS's JSONCPP only gets detected as shared, leaving the value # above empty. Hardcode as a workaround. set(REDEX_JSONCPP_LIBRARY ${JSONCPP_INCLUDE_DIRS}/../lib/libjsoncpp.a) elseif (JSONCPP_LIBRARY_STATIC) set(REDEX_JSONCPP_LIBRARY ${JSONCPP_LIBRARY_STATIC}) else () message(FATAL_ERROR "Could not find a static library for JsonCpp.") endif() else() set(REDEX_JSONCPP_LIBRARY ${JSONCPP_LIBRARY}) endif() if (APPLE AND (NOT ZLIB_HOME)) #Static library is not installed on default path in MacOS because it conflicts with Xcode Version set(ZLIB_HOME "/usr/local/opt/zlib/") endif () find_package(Zlib REQUIRED) print_dirs(${ZLIB_STATIC_LIB} "ZLIB_STATIC_LIB") print_dirs(${ZLIB_SHARED_LIB} "ZLIB_SHARED_LIB") if (ENABLE_STATIC) set(REDEX_ZLIB_LIBRARY ${ZLIB_STATIC_LIB}) else () set(REDEX_ZLIB_LIBRARY ${ZLIB_SHARED_LIB}) endif () print_dirs("${ZLIB_INCLUDE_DIRS}" "ZLIB_INCLUDE_DIRS") print_dirs("${REDEX_ZLIB_LIBRARY}" "REDEX_ZLIB_LIBRARY") endmacro() function(set_link_whole target_name lib_name) set(libpath "${LIBRARY_OUTPUT_DIRECTORY}${CMAKE_STATIC_LIBRARY_PREFIX}${lib_name}${CMAKE_STATIC_LIBRARY_SUFFIX}") message(STATUS "${target_name} will link ${libpath} wholly") string(TOLOWER ${CMAKE_CXX_COMPILER_ID} compiler_id) if (${compiler_id} MATCHES ".*clang") if (APPLE) set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS "-Wl,-force_load ${libpath} ") else () # On non-Apple platforms, we always assume that the GNU Linker is used set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS "-Wl,--whole-archive ${libpath} -Wl,--no-whole-archive") endif () elseif (${compiler_id} STREQUAL "gnu") set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS "-Wl,--whole-archive ${libpath} -Wl,--no-whole-archive") elseif (${compiler_id} STREQUAL "msvc") set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS "/WHOLEARCHIVE:${libpath} ") else () message(WARNING "Unknown compiler: skipping whole link option: " ${compiler_id}) endif () endfunction()