-
Notifications
You must be signed in to change notification settings - Fork 440
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add -fno-rtti
/fno-exceptions
based on LLVM's configuration
#1291
Changes from 1 commit
bdbae40
3959742
2c574c6
c24615f
8f01b0e
9ef3df0
6e83d12
ca5632c
58a4ffc
af15d88
3f51410
d0a1b83
1fd01be
6cc852b
6f1f351
d4e6d6b
97d624d
d8670ae
fabc7df
d85eacb
1f54a14
1063318
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,15 +5,77 @@ project("SVF") | |
configure_file(${PROJECT_SOURCE_DIR}/.config.in | ||
${PROJECT_BINARY_DIR}/include/Util/config.h) | ||
|
||
# We need to match the build environment for LLVM: In particular, we need C++14 | ||
# and the -fno-rtti flag | ||
# Match configuration used to build LLVM (match C++ standard; match | ||
# runtime typing information (RTTI); match exception handling; etc) | ||
if(COMMAND add_llvm_library) | ||
message(STATUS "Detected in-tree build configuration; skipping LLVM fetching") | ||
set(IN_SOURCE_BUILD 1) | ||
else() | ||
message(STATUS "Detected out-of-tree build configuration; fetching LLVM") | ||
|
||
find_package(LLVM REQUIRED CONFIG HINTS ${LLVM_DIR} $ENV{LLVM_DIR}) | ||
message(STATUS "LLVM STATUS: | ||
Version ${LLVM_PACKAGE_VERSION} | ||
Definitions ${LLVM_DEFINITIONS} | ||
Includes ${LLVM_INCLUDE_DIRS} | ||
Libraries ${LLVM_LIBRARY_DIRS} | ||
Targets ${LLVM_TARGETS_TO_BUILD} | ||
Build type ${LLVM_BUILD_TYPE} | ||
Exceptions ${LLVM_ENABLE_EH} | ||
RTTI ${LLVM_ENABLE_RTTI} | ||
Dynamic lib ${LLVM_LINK_LLVM_DYLIB}" | ||
) | ||
|
||
if("${LLVM_PACKAGE_VERSION_MAJOR}" VERSION_GREATER "15") | ||
message(FATAL_ERROR "Unsupported LLVM version (need <= 15.0.7; got ${LLVM_PACKAGE_VERSION})") | ||
endif() | ||
|
||
if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT ${LLVM_BUILD_TYPE} STREQUAL "Debug") | ||
message(FATAL_ERROR "Got build type 'Debug' but LLVM is not built in Debug mode!") | ||
endif() | ||
|
||
if(NOT LLVM_ENABLE_EH) | ||
message(STATUS "Building SVF without exception handling") | ||
add_compile_options("-fno-exceptions") | ||
endif() | ||
|
||
if(NOT LLVM_ENABLE_RTTI) | ||
message(STATUS "Building SVF without RTII") | ||
add_compile_options("-fno-rtti") | ||
endif() | ||
|
||
# Load the LLVM definitions & include directories | ||
separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) | ||
|
||
if(NOT ${LLVM_LINK_LLVM_DYLIB}) | ||
message(STATUS "Linking to separate LLVM static libraries") | ||
llvm_map_components_to_libnames( | ||
llvm_libs | ||
analysis | ||
bitwriter | ||
core | ||
instcombine | ||
instrumentation | ||
ipo | ||
irreader | ||
linker | ||
scalaropts | ||
support | ||
target | ||
transformutils) | ||
else() | ||
message(STATUS "Linking to LLVM dynamic shared library object") | ||
set(llvm_libs LLVM) | ||
endif() | ||
|
||
# Make the "add_llvm_library()" command available | ||
include(AddLLVM) | ||
endif() | ||
|
||
# Set C++ standard; use C++14 as LLVM 15 defaults to that (doesn't need to match) | ||
set(CMAKE_CXX_STANDARD 14) | ||
set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We can adjust the language standard here, like:
Those properties will be effective for all new targets by default. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @Johanmyst could you add the options here and remove There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done. 👍 |
||
# add -std=gnu++14 | ||
set(CMAKE_CXX_EXTENSIONS ON) | ||
|
||
add_compile_options("-fno-rtti") | ||
add_compile_options("-fno-exceptions") | ||
Comment on lines
-15
to
-16
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If we want to enable svfcore as There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure, this was why I initially moved the LLVM finding into the top-level |
||
set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
|
||
# Treat compiler warnings as errors | ||
add_compile_options("-Werror" "-Wall") | ||
|
@@ -80,11 +142,18 @@ endif() | |
add_subdirectory(svf) | ||
add_subdirectory(svf-llvm) | ||
|
||
include(GNUInstallDirs) | ||
install( | ||
TARGETS SvfCore SvfLLVM | ||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} | ||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} | ||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} | ||
) | ||
install( | ||
DIRECTORY ${PROJECT_SOURCE_DIR}/svf/include/ | ||
${PROJECT_SOURCE_DIR}/svf-llvm/include/ | ||
COMPONENT devel | ||
DESTINATION include/svf | ||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/include/svf | ||
FILES_MATCHING | ||
PATTERN "**/*.h") | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could we also move the following to svf-llvm/CMakeList.txt? Compile extapi.c to extapi.bcfind_path(LLVM_CLANG_DIR There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I also moved the installation commands to the subdirectory so the While doing that I also fixed the remaining installation predicates:
This should be unnecessary for the way SVF is currently designed to be used (i.e. through the |
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't need LLVM to be built in debug mode if SVF is built under debug
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, alright, fair enough. I added this check because of this remark from this setup guide:
That page hasn't been updated since 2018 though, so I assume this is either no longer the case or was written erroneously and just never updated? Either way, I'll remove this check from the CMake script and update the setup guide page!