diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt index 3e2f80b818450..d2e1b821c1674 100644 --- a/libcxxabi/CMakeLists.txt +++ b/libcxxabi/CMakeLists.txt @@ -143,6 +143,8 @@ endif() option(LIBCXXABI_HERMETIC_STATIC_LIBRARY "Do not export any symbols from the static library." ${LIBCXXABI_HERMETIC_STATIC_LIBRARY_DEFAULT}) +option(LIBCXXABI_EXECUTE_ONLY_CODE "Compile libc++abi as execute-only." OFF) + if(MINGW) set(LIBCXXABI_DEFAULT_TEST_CONFIG "llvm-libc++abi-mingw.cfg.in") elseif(WIN32) # clang-cl @@ -446,6 +448,17 @@ if (C_SUPPORTS_COMMENT_LIB_PRAGMA) endif() endif() +if (LIBCXXABI_EXECUTE_ONLY_CODE) + add_compile_flags_if_supported(-mexecute-only) + if (NOT CXX_SUPPORTS_MEXECUTE_ONLY_FLAG) + add_compile_flags_if_supported(-mpure-code) + if (NOT CXX_SUPPORTS_MPURE_CODE_FLAG) + message(SEND_ERROR + "Compiler doesn't support -mexecute-only or -mpure-code option!") + endif() + endif() +endif() + string(REPLACE ";" " " LIBCXXABI_CXX_FLAGS "${LIBCXXABI_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LIBCXXABI_CXX_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBCXXABI_C_FLAGS}")