Skip to content

Commit

Permalink
Enable ASan in all components, switch stdlib to libc++, switch to lld (
Browse files Browse the repository at this point in the history
…#741)

* Enable ASan in all components, switch stdlib to libc++, switch to lld

* Disable UBSan on 3rd-party libs, add more flags to LLVM build, force LLD to be used everywhere

* remove useless `LD` env var from docs

* fix variable quoting

* forgot LD line

* include full debug info in all built binaries, don't link SDK lib to shared ASan runtime lib
  • Loading branch information
senderista authored Jun 19, 2021
1 parent 586dae6 commit 46f59b0
Show file tree
Hide file tree
Showing 25 changed files with 132 additions and 53 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ export CXX=/usr/bin/clang++-10

(As an aside, the upgrade from `clang-8` to `clang-10` was not driven because we needed features in `clang-10` but rather because the default clang version installed with `apt get install clang` on Ubuntu 20 will install version 10. If you need to continue to build with `clang-8` then that should work just fine. Please be advised, however, that our TeamCity CI jobs for both Ubuntu 20 and Ubuntu 18.04 will use `clang-10` to build the product that we ship.)

Additionally, the build system expects the LLVM linker `ld.lld` to be present in your `PATH` and to resolve to the `ld.lld-10` executable. You can ensure this by either manually symlinking `/usr/bin/ld.lld` to the location of `ld.lld-10` on your system, or by running the following command on Debian-derived systems (such as Ubuntu), after installing the `lld-10` package:

```
sudo update-alternatives --install "/usr/bin/ld.lld" "ld.lld" "/usr/bin/ld.lld-10" 10
```

## Folder structuring

The following folder structure is recommended for C++ projects:
Expand Down
98 changes: 86 additions & 12 deletions production/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ project(production VERSION 0.1.0)

option(EXECUTE_FDW_TESTS "Execute FDW tests" OFF)

option(ENABLE_ASAN "Enable ASan in debug builds" ON)

option(ENABLE_STACKTRACE "Enable stack traces in debug builds" ON)

option(BUILD_GAIA_RELEASE "Build Gaia Release packages and binaries" OFF)
Expand All @@ -33,6 +31,28 @@ set(CMAKE_CXX_STANDARD_REQUIRED True)
# Ensure debug builds have the DEBUG flag defined.
add_compile_options("$<$<CONFIG:DEBUG>:-DDEBUG>")

# Check that PIE flags are actually passed to the linker.
# This ensures that our executables are ASLR-compatible.
include(CheckPIESupported)
check_pie_supported(OUTPUT_VARIABLE check_pie_error LANGUAGES CXX)
if(NOT CMAKE_CXX_LINK_PIE_SUPPORTED)
message(FATAL_ERROR "PIE is not supported at link time: ${check_pie_error}")
endif()
# See https://cmake.org/cmake/help/latest/policy/CMP0083.html#policy:CMP0083.
# The NEW behavior under this policy is to pass the -pie flag to the linker if
# POSITION_INDEPENDENT_CODE is set.
cmake_policy(SET CMP0083 NEW)
# Our shared libraries and executables must all be ASLR-compatible.
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)

# We want everything in the build to use libc++,
# including third-party packages.
add_compile_options(-stdlib=libc++)
add_link_options(-stdlib=libc++)
# We want everything in the build to use lld as the linker,
# including third-party packages.
add_link_options(-fuse-ld=lld)

# Set some global variables.
get_repo_root(${PROJECT_SOURCE_DIR} GAIA_REPO)

Expand All @@ -50,25 +70,78 @@ endif(CCACHE_FOUND)
set(GAIA_COMPILE_FLAGS "-c -Wall -Wextra -O3 -ftime-trace")
set(GAIA_LINK_FLAGS " ")

# This is just for the RocksDB build.
set(FAIL_ON_WARNINGS OFF CACHE BOOL "")

# LLVM and CLANG specific options.
if(BUILD_GAIA_RELEASE OR BUILD_GAIA_LLVM_TESTS)
set(CLANG_BUILD_TOOLS OFF CACHE BOOL "")
set(LLVM_BUILD_TOOLS OFF CACHE BOOL "")
set(LLVM_ENABLE_EH ON CACHE BOOL "")
set(LLVM_ENABLE_PROJECTS "clang" CACHE STRING "")
set(LLVM_ENABLE_RTTI ON CACHE BOOL "")
# LLD/libc++ are necessary for MSan.
set(LLVM_ENABLE_LLD ON CACHE BOOL "")
set(LLVM_ENABLE_LIBCXX ON CACHE BOOL "")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
# This speeds up linking by separating debug info.
set(LLVM_USE_SPLIT_DWARF ON CACHE BOOL "")
# This makes debugger startup faster.
set(LLVM_USE_GDB_INDEX ON CACHE BOOL "")
# This saves the linker some work, but makes clang slower.
set(BUILD_SHARED_LIBS:BOOL ON CACHE BOOL "")
endif()
endif()

# Debug build-specific options.
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(GAIA_COMPILE_FLAGS "-c -Wall -Wextra -O0 -g -fno-limit-debug-info -ftime-trace")
# Don't omit debug symbols from any built binaries.
add_compile_options(-fno-limit-debug-info)

set(GAIA_COMPILE_FLAGS "-c -Wall -Wextra -O0 -g3 -ggdb -fno-omit-frame-pointer -fno-optimize-sibling-calls -ggnu-pubnames -gsplit-dwarf -ftime-trace")
set(GAIA_LINK_FLAGS "-Wl,--gdb-index")

# Enable ASan by default in debug builds.
set(SANITIZER "ASAN" CACHE STRING "Enable sanitizers in debug builds")

# Explicitly list all legal values for SANITIZER.
# (This will eventually include ASAN, MSAN, TSAN.)
set_property(CACHE SANITIZER PROPERTY STRINGS "ASAN")
endif()

# Sanitizer-specific compiler/linker flags.
if(DEFINED CACHE{SANITIZER})
message(VERBOSE "Sanitizer=$CACHE{SANITIZER}")

if(ENABLE_ASAN)
set(GAIA_COMPILE_FLAGS "${GAIA_COMPILE_FLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all -fno-omit-frame-pointer")
set(GAIA_LINK_FLAGS "${GAIA_LINK_FLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all")
# Sanitizers can only be defined in debug builds.
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
# Clear the given value from the cache so subsequent runs don't fail.
unset(SANITIZER CACHE)
message(FATAL_ERROR "The SANITIZER option can only be set in debug builds.")
endif()

# Extract allowed option values.
get_property(SANITIZER_OPTIONS CACHE SANITIZER PROPERTY STRINGS)

# Check that value of the option is in the list of allowed values.
if(NOT "$CACHE{SANITIZER}" IN_LIST SANITIZER_OPTIONS)
# Clear a bad value from the cache so subsequent runs don't fail.
set(bad_sanitizer "$CACHE{SANITIZER}")
unset(SANITIZER CACHE)
message(FATAL_ERROR "Unrecognized value for SANITIZER option: ${bad_sanitizer}.\n"
"Allowed values: ${SANITIZER_OPTIONS}.")
endif()

# Set compiler/linker flags that apply to all sanitizers.
add_compile_options(-fno-sanitize-recover=all)
add_link_options(-fno-sanitize-recover=all)

if("$CACHE{SANITIZER}" STREQUAL "ASAN")
# Enable ASan on all targets because libc++ requires it to prevent false positives.
add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address)

# Add UBSan as well as ASan to Gaia targets.
# (They are compatible so we have no separate option for UBSan.)
set(GAIA_COMPILE_FLAGS "${GAIA_COMPILE_FLAGS} -fsanitize=undefined")
set(GAIA_LINK_FLAGS "${GAIA_LINK_FLAGS} -fsanitize=undefined")
endif()
endif()

Expand Down Expand Up @@ -160,11 +233,12 @@ endif()
# External project dependencies.

# Rocksdb.
set(FAIL_ON_WARNINGS OFF CACHE BOOL "" FORCE)
add_subdirectory(${ROCKSDB} rocksdb EXCLUDE_FROM_ALL)

# Flatbuffers.
set(FLATBUFFERS_BUILD_TESTS OFF)
set(FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "" FORCE)
add_subdirectory(${FLATBUFFERS} flatbuffers)
set_property (TARGET flatbuffers PROPERTY POSITION_INDEPENDENT_CODE ON)

include(ExternalProject)

Expand All @@ -180,7 +254,7 @@ add_subdirectory("${GAIA_REPO}/third_party/production/gaia_spdlog" gaia_spdlog)
add_subdirectory("${GAIA_REPO}/third_party/production/gaia_spdlog_setup" gaia_spdlog_setup)
# Tabulate.
add_subdirectory("${GAIA_REPO}/third_party/production/tabulate" tabulate)
# Googletest
# Googletest.
add_subdirectory(${GOOGLE_TEST} googletest EXCLUDE_FROM_ALL)

# Setting clang-tidy here to avoid it being applied to flatbuffers, rocksdb etc...
Expand Down
2 changes: 0 additions & 2 deletions production/catalog/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ target_include_directories(edc_catalog PRIVATE ${GAIA_INC})
target_include_directories(edc_catalog PRIVATE ${GAIA_INC}/gaia_internal/catalog)
target_include_directories(edc_catalog PUBLIC ${FLATBUFFERS_INC})
target_link_libraries(edc_catalog gaia_direct)
set_target_properties(edc_catalog PROPERTIES POSITION_INDEPENDENT_CODE ON)

add_library(gaia_catalog STATIC
src/ddl_executor.cpp
Expand All @@ -49,7 +48,6 @@ set_target_properties(gaia_catalog PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
target_include_directories(gaia_catalog PUBLIC ${GAIA_CATALOG_PUBLIC_INCLUDES})
target_include_directories(gaia_catalog PRIVATE ${GAIA_CATALOG_PRIVATE_INCLUDES})
target_link_libraries(gaia_catalog PRIVATE gaia_direct flatbuffers edc_catalog)
set_property (TARGET gaia_catalog PROPERTY POSITION_INDEPENDENT_CODE ON)

add_gtest(test_ddl_executor
"tests/test_ddl_executor.cpp"
Expand Down
1 change: 0 additions & 1 deletion production/catalog/parser/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ target_include_directories(gaia_parser PRIVATE ${GAIA_PARSER_INCLUDES})
target_link_libraries(gaia_parser PRIVATE gaia_catalog)
set_target_properties(gaia_parser PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS}")
set_target_properties(gaia_parser PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
set_property (TARGET gaia_parser PROPERTY POSITION_INDEPENDENT_CODE ON)

set(DDL_PARSER_TEST_SOURCES
tests/test_ddl_parser.cpp
Expand Down
4 changes: 0 additions & 4 deletions production/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,10 @@ target_include_directories(gaia_common PUBLIC ${GAIA_COMMON_INCLUDES})
target_link_libraries(gaia_common cpptoml)
target_link_libraries(gaia_common gaia_spdlog)
target_link_libraries(gaia_common gaia_spdlog_setup)
target_link_libraries(gaia_common stdc++fs)

set_target_properties(gaia_common PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS}")
set_target_properties(gaia_common PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")

# This static library must be compatible with linking in a shared library.
set_property(TARGET gaia_common PROPERTY POSITION_INDEPENDENT_CODE ON)

# The logging unit test needs a logger configuration file.
configure_file("${GAIA_LOG_CONFIG}" "${PROJECT_BINARY_DIR}/gaia_log.conf")

Expand Down
12 changes: 4 additions & 8 deletions production/db/core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ target_include_directories(gaia_storage PRIVATE ${GAIA_DB_CORE_PRIVATE_INCLUDES}
set_target_properties(gaia_storage PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS}")
set_target_properties(gaia_storage PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
target_link_libraries(gaia_storage PRIVATE gaia_common)
set_property (TARGET gaia_storage PROPERTY POSITION_INDEPENDENT_CODE ON)

###############################################
# Database-related code begins here.
Expand Down Expand Up @@ -96,8 +95,6 @@ set_target_properties(gaia_db_client PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FL
set_target_properties(gaia_db_client PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
target_link_libraries(gaia_db_client PUBLIC gaia_common)
target_link_libraries(gaia_db_client PRIVATE gaia_payload_types gaia_memory_manager edc_catalog ${LIB_EXPLAIN} ${LIB_CAP} dl)
# This static library must be compatible with linking in a shared library.
set_property (TARGET gaia_db_client PROPERTY POSITION_INDEPENDENT_CODE ON)

add_library(rocks_wrapper STATIC
src/rdb_internal.cpp
Expand All @@ -112,7 +109,6 @@ target_include_directories(rocks_wrapper SYSTEM PRIVATE "${GEN_DIR}")
target_link_libraries(rocks_wrapper rocksdb gaia_storage)
set_target_properties(rocks_wrapper PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS} -Wno-missing-field-initializers")
set_target_properties(rocks_wrapper PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
set_property (TARGET rocks_wrapper PROPERTY POSITION_INDEPENDENT_CODE ON)

set(GAIA_DB_SERVER_SOURCES
src/mapped_data.cpp
Expand Down Expand Up @@ -140,7 +136,7 @@ target_include_directories(gaia_db_server SYSTEM PRIVATE "${GEN_DIR}")

# Suppress spurious warnings about zero-initialized structs.
set_target_properties(gaia_db_server PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS} -Wno-missing-field-initializers")
set_target_properties(gaia_db_server PROPERTIES LINK_FLAGS ${GAIA_LINK_FLAGS})
set_target_properties(gaia_db_server PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
target_link_libraries(gaia_db_server PRIVATE gaia_common Threads::Threads rocks_wrapper gaia_memory_manager ${LIB_EXPLAIN} ${LIB_CAP} dl)
if(ENABLE_STACKTRACE AND (CMAKE_BUILD_TYPE STREQUAL "Debug"))
target_link_libraries(gaia_db_server PUBLIC backward)
Expand Down Expand Up @@ -168,8 +164,8 @@ if(Python3_FOUND AND pybind11_FOUND)
# See https://github.com/pybind/pybind11/issues/1604 for inclusion of -fsized-deallocation for C++17
set_target_properties(gaia_db_pybind PROPERTIES COMPILE_FLAGS
"${GAIA_COMPILE_FLAGS} -Wno-deprecated-register -Wno-unused-parameter -fsized-deallocation")
set_target_properties(gaia_db_pybind PROPERTIES LINK_FLAGS ${GAIA_LINK_FLAGS})
if(ENABLE_ASAN AND (CMAKE_BUILD_TYPE STREQUAL "Debug"))
set_target_properties(gaia_db_pybind PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
if("$CACHE{SANITIZER}" STREQUAL "ASAN")
target_link_options(gaia_db_pybind PRIVATE "-shared-libasan")
endif()

Expand Down Expand Up @@ -199,7 +195,7 @@ if(JAVA_FOUND AND JNI_FOUND)
set_target_properties(gaia_db_jni PROPERTIES COMPILE_FLAGS
"${GAIA_COMPILE_FLAGS} -Wno-deprecated-register -Wno-unused-parameter")
set_target_properties(gaia_db_jni PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
if(ENABLE_ASAN AND (CMAKE_BUILD_TYPE STREQUAL "Debug"))
if("$CACHE{SANITIZER}" STREQUAL "ASAN")
target_link_options(gaia_db_jni PRIVATE "-shared-libasan")
endif()
endif()
Expand Down
3 changes: 0 additions & 3 deletions production/db/index/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,6 @@ set_target_properties(gaia_index PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS}
set_target_properties(gaia_index PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
target_link_libraries(gaia_index PRIVATE gaia_common gaia_payload_types)

# This static library must be compatible with linking in a shared library.
set_property (TARGET gaia_index PROPERTY POSITION_INDEPENDENT_CODE ON)

set (INDEX_TEST_INCLUDES
${GAIA_INDEX_INCLUDES}
${GAIA_GENERATED_SCHEMAS}
Expand Down
1 change: 0 additions & 1 deletion production/db/memory_manager/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ add_library(gaia_memory_manager STATIC
target_include_directories(gaia_memory_manager PUBLIC ${GAIA_MEMORY_MANAGER_INCLUDES})
set_target_properties(gaia_memory_manager PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS}")
set_target_properties(gaia_memory_manager PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
set_property (TARGET gaia_memory_manager PROPERTY POSITION_INDEPENDENT_CODE ON)
target_link_libraries(gaia_memory_manager PRIVATE gaia_common)

# Our unit tests.
Expand Down
2 changes: 0 additions & 2 deletions production/db/payload_types/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ target_include_directories(gaia_payload_types PUBLIC ${GAIA_PAYLOAD_TYPES_INCLUD
set_target_properties(gaia_payload_types PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS}")
set_target_properties(gaia_payload_types PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
target_link_libraries(gaia_payload_types PRIVATE gaia_common flatbuffers)
# This static library must be compatible with linking in a shared library.
set_property (TARGET gaia_payload_types PROPERTY POSITION_INDEPENDENT_CODE ON)

# Generate the flatbuffers files required by test_field_access.
add_custom_command(
Expand Down
1 change: 0 additions & 1 deletion production/db/triggers/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,4 @@ add_library(gaia_triggers STATIC
target_include_directories(gaia_triggers PUBLIC ${GAIA_TRIGGERS_INCLUDES})
set_target_properties(gaia_triggers PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS}")
set_target_properties(gaia_triggers PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
set_target_properties(gaia_triggers PROPERTIES POSITION_INDEPENDENT_CODE ON)
target_link_libraries(gaia_triggers PRIVATE "gaia_common")
2 changes: 0 additions & 2 deletions production/direct_access/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ target_include_directories(gaia_direct PRIVATE ${GAIA_DIRECT_ACCESS_PRIVATE_INCL
target_link_libraries(gaia_direct PUBLIC gaia_db_client)
set_target_properties(gaia_direct PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS}")
set_target_properties(gaia_direct PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
# This static library must be compatible with linking in a shared library.
set_property (TARGET gaia_direct PROPERTY POSITION_INDEPENDENT_CODE ON)

# Start unit tests.
set(DIRECT_ACCESS_TEST_INCLUDES
Expand Down
2 changes: 1 addition & 1 deletion production/examples/hello/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ set(GAIA_LINK_FLAGS " ")
# Debug build-specific options.
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(GAIA_COMPILE_FLAGS "-c -Wall -Wextra -O0 -g -fno-limit-debug-info")
if(ENABLE_ASAN)
if("$CACHE{SANITIZER}" STREQUAL "ASAN")
set(GAIA_COMPILE_FLAGS "${GAIA_COMPILE_FLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all -fno-omit-frame-pointer")
set(GAIA_LINK_FLAGS "${GAIA_LINK_FLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all")
endif()
Expand Down
2 changes: 1 addition & 1 deletion production/examples/incubator/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ set(GAIA_LINK_FLAGS " ")
# Debug build-specific options.
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(GAIA_COMPILE_FLAGS "-c -Wall -Wextra -O0 -g -fno-limit-debug-info")
if(ENABLE_ASAN)
if("$CACHE{SANITIZER}" STREQUAL "ASAN")
set(GAIA_COMPILE_FLAGS "${GAIA_COMPILE_FLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all -fno-omit-frame-pointer")
set(GAIA_LINK_FLAGS "${GAIA_LINK_FLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all")
endif()
Expand Down
4 changes: 2 additions & 2 deletions production/gdev.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ psutil

[pre_run]
# Enable the Postgres FDW to run under AddressSanitizer.
# We can't put this in third_party/production/postgresql/gdev.cfg because clang-8 isn't yet available when that is run.
echo "LD_PRELOAD = '$(clang -print-file-name=libclang_rt.asan-$(uname -m).so)'" >> /etc/postgresql/12/main/environment
# We can't put this in third_party/production/postgresql/gdev.cfg because clang-10 isn't yet available when that is run.
echo "LD_PRELOAD = '$(clang-10 -print-file-name=libclang_rt.asan-$(uname -m).so)'" >> /etc/postgresql/12/main/environment
echo "ASAN_OPTIONS = 'detect_leaks=0'" >> /etc/postgresql/12/main/environment

# Ubuntu 18.04 still defaults python to Python2. We want to detect python as Python3.
Expand Down
2 changes: 0 additions & 2 deletions production/rules/event_manager/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@ set_target_properties(gaia_rules PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
target_include_directories(gaia_rules PUBLIC ${GAIA_EVENT_MANAGER_PUBLIC_INCLUDES})
target_include_directories(gaia_rules PRIVATE ${GAIA_EVENT_MANAGER_PRIVATE_INCLUDES})
target_link_libraries(gaia_rules PRIVATE gaia_direct gaia_catalog gaia_triggers)
# This static library must be compatible with linking in a shared library.
set_property (TARGET gaia_rules PROPERTY POSITION_INDEPENDENT_CODE ON)

# The rules integration and system init tests need gaia and logger configuration files.
configure_file("${GAIA_CONFIG}" "${PROJECT_BINARY_DIR}/gaia.conf")
Expand Down
4 changes: 0 additions & 4 deletions production/sdk/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,6 @@ target_link_libraries(gaia PRIVATE
${SDK_LINK_LIBRARIES}
)

if(ENABLE_ASAN AND (CMAKE_BUILD_TYPE STREQUAL "Debug"))
target_link_options(gaia PRIVATE "-shared-libasan")
endif()

install(TARGETS gaia DESTINATION ${CMAKE_INSTALL_LIBDIR})

#
Expand Down
2 changes: 1 addition & 1 deletion production/sql/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ target_link_options(gaia_fdw PRIVATE ${PGSQL_LDFLAGS})
# We need to un-quote this variable for some reason as well.
separate_arguments(GAIA_LINK_FLAGS UNIX_COMMAND "${GAIA_LINK_FLAGS}")
target_link_options(gaia_fdw PRIVATE ${GAIA_LINK_FLAGS})
if(ENABLE_ASAN AND (CMAKE_BUILD_TYPE STREQUAL "Debug"))
if("$CACHE{SANITIZER}" STREQUAL "ASAN")
target_link_options(gaia_fdw PRIVATE "-shared-libasan")
endif()

Expand Down
2 changes: 0 additions & 2 deletions production/system/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ target_include_directories(gaia_system PRIVATE ${GAIA_SYSTEM_PRIVATE_INCLUDES})
target_link_libraries(gaia_system PUBLIC gaia_catalog gaia_direct gaia_rules)
set_target_properties(gaia_system PROPERTIES COMPILE_FLAGS "${GAIA_COMPILE_FLAGS}")
set_target_properties(gaia_system PROPERTIES LINK_FLAGS "${GAIA_LINK_FLAGS}")
# This static library must be compatible with linking in a shared library.
set_property (TARGET gaia_system PROPERTY POSITION_INDEPENDENT_CODE ON)

# The test needs gaia parser to load test DDLs.
set(TEST_GAIA_SYSTEM_INCLUDES
Expand Down
1 change: 1 addition & 0 deletions production/tools/gaia_translate/inc/table_navigation.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#include <string>
#include <unordered_set>
#include <unordered_map>

#include "gaia_internal/catalog/gaia_catalog.h"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,9 @@ set(LLVM_LIB_FUZZING_ENGINE "" CACHE PATH
option(LLVM_USE_SPLIT_DWARF
"Use -gsplit-dwarf when compiling llvm." OFF)

option(LLVM_USE_GDB_INDEX
"Use -Wl,--gdb-index when compiling llvm." OFF)

option(LLVM_POLLY_LINK_INTO_TOOLS "Statically link Polly into tools (if available)" ON)
option(LLVM_POLLY_BUILD "Build LLVM with Polly" ON)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -730,6 +730,13 @@ if(LLVM_USE_SPLIT_DWARF)
add_definitions("-gsplit-dwarf")
endif()

# Turn on -Wl,--gdb-index if requested and supported
if (LLVM_USE_GDB_INDEX AND
(LLVM_USE_LINKER STREQUAL "gold" OR LLVM_USE_LINKER STREQUAL "lld"))
append("-ggnu-pubnames" CMAKE_CXX_FLAGS)
append("-Wl,--gdb-index" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS)
endif()

add_definitions( -D__STDC_CONSTANT_MACROS )
add_definitions( -D__STDC_FORMAT_MACROS )
add_definitions( -D__STDC_LIMIT_MACROS )
Expand Down
Loading

0 comments on commit 46f59b0

Please sign in to comment.