diff --git a/.github/workflows/ubuntu-bionic.yml b/.github/workflows/ubuntu-bionic.yml index 1ee65a7c12..f6abfd7da2 100644 --- a/.github/workflows/ubuntu-bionic.yml +++ b/.github/workflows/ubuntu-bionic.yml @@ -124,6 +124,12 @@ jobs: for i in omnitrace-ls-output/*; do echo -e "\n\n --> ${i} \n\n"; cat ${i}; done omnitrace -e -v 1 -- ls + - name: Test User API + timeout-minutes: 10 + run: | + set -v + ./scripts/test-find-package.sh --install-dir /opt/omnitrace + - name: CTest Artifacts if: success() || failure() uses: actions/upload-artifact@v2 diff --git a/.github/workflows/ubuntu-focal-external-rocm.yml b/.github/workflows/ubuntu-focal-external-rocm.yml index 694c059fd2..6f2d4296dd 100644 --- a/.github/workflows/ubuntu-focal-external-rocm.yml +++ b/.github/workflows/ubuntu-focal-external-rocm.yml @@ -111,6 +111,12 @@ jobs: omnitrace -e -v 1 -- ls du -m ls-perfetto-trace.proto + - name: Test User API + timeout-minutes: 10 + run: | + set -v + ./scripts/test-find-package.sh --install-dir /opt/omnitrace + - name: CTest Artifacts if: success() || failure() uses: actions/upload-artifact@v2 diff --git a/.github/workflows/ubuntu-focal-external.yml b/.github/workflows/ubuntu-focal-external.yml index 03502f6671..44b232d83a 100644 --- a/.github/workflows/ubuntu-focal-external.yml +++ b/.github/workflows/ubuntu-focal-external.yml @@ -100,6 +100,12 @@ jobs: for i in omnitrace-ls-output/*; do echo -e "\n\n --> ${i} \n\n"; cat ${i}; done omnitrace -e -v 1 -- ls + - name: Test User API + timeout-minutes: 10 + run: | + set -v + ./scripts/test-find-package.sh --install-dir /opt/omnitrace + - name: CTest Artifacts if: success() || failure() uses: actions/upload-artifact@v2 diff --git a/.github/workflows/ubuntu-focal.yml b/.github/workflows/ubuntu-focal.yml index 035c5d6509..ed51386ff2 100644 --- a/.github/workflows/ubuntu-focal.yml +++ b/.github/workflows/ubuntu-focal.yml @@ -99,6 +99,12 @@ jobs: for i in omnitrace-ls-output/*; do echo -e "\n\n --> ${i} \n\n"; cat ${i}; done omnitrace -e -v 1 -- ls + - name: Test User API + timeout-minutes: 10 + run: | + set -v + ${{ github.workspace }}/scripts/test-find-package.sh --install-dir /opt/omnitrace + - name: CTest Artifacts if: success() || failure() uses: actions/upload-artifact@v2 diff --git a/CMakeLists.txt b/CMakeLists.txt index 513e87a7f3..6b2f4fc4f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,6 +91,10 @@ omnitrace_add_option(CMAKE_CXX_STANDARD_REQUIRED "Require C++ language standard" omnitrace_add_option(CMAKE_CXX_EXTENSIONS "Compiler specific language extensions" OFF) omnitrace_add_option(CMAKE_INSTALL_RPATH_USE_LINK_PATH "Enable rpath to linked libraries" ON) +set(CMAKE_INSTALL_MESSAGE + "LAZY" + CACHE STRING "Installation message") +mark_as_advanced(CMAKE_INSTALL_MESSAGE) omnitrace_add_option(OMNITRACE_USE_CLANG_TIDY "Enable clang-tidy" OFF) omnitrace_add_option(OMNITRACE_USE_MPI "Enable MPI support" OFF) @@ -269,6 +273,7 @@ endif() # # ------------------------------------------------------------------------------# +include(ConfigInstall) include(ConfigCPack) # ------------------------------------------------------------------------------# diff --git a/cmake/Compilers.cmake b/cmake/Compilers.cmake index 289d0b2d8a..b1507b0e71 100644 --- a/cmake/Compilers.cmake +++ b/cmake/Compilers.cmake @@ -1,6 +1,4 @@ # include guard -include_guard(DIRECTORY) - # ######################################################################################## # # Compilers @@ -31,8 +29,11 @@ if("${LIBNAME}" STREQUAL "") string(TOLOWER "${PROJECT_NAME}" LIBNAME) endif() -omnitrace_add_interface_library( - ${LIBNAME}-compile-options "Adds the standard set of compiler flags used by timemory") +if(NOT TARGET ${LIBNAME}-compile-options) + omnitrace_add_interface_library( + ${LIBNAME}-compile-options + "Adds the standard set of compiler flags used by timemory") +endif() # ----------------------------------------------------------------------------------------# # macro converting string to list @@ -116,10 +117,17 @@ endmacro() # add C flag to target # ----------------------------------------------------------------------------------------# macro(ADD_TARGET_C_FLAG _TARG) + get_target_property(_TARG_TYPE ${_TARG} TYPE) + if("${_TARG_TYPE}" MATCHES "INTERFACE_LIBRARY") + set(_SCOPE INTERFACE) + else() + set(_SCOPE PRIVATE) + endif() + string(REPLACE "-" "_" _MAKE_TARG "${_TARG}") list(APPEND OMNITRACE_MAKE_TARGETS ${_MAKE_TARG}) - target_compile_options(${_TARG} INTERFACE $<$:${ARGN}>) + target_compile_options(${_TARG} ${_SCOPE} $<$:${ARGN}>) list(APPEND ${_MAKE_TARG}_C_FLAGS ${ARGN}) endmacro() @@ -211,18 +219,25 @@ endmacro() # add CXX flag to target # ----------------------------------------------------------------------------------------# macro(ADD_TARGET_CXX_FLAG _TARG) + get_target_property(_TARG_TYPE ${_TARG} TYPE) + if("${_TARG_TYPE}" MATCHES "INTERFACE_LIBRARY") + set(_SCOPE INTERFACE) + else() + set(_SCOPE PRIVATE) + endif() + string(REPLACE "-" "_" _MAKE_TARG "${_TARG}") list(APPEND OMNITRACE_MAKE_TARGETS ${_MAKE_TARG}) - target_compile_options(${_TARG} INTERFACE $<$:${ARGN}>) + target_compile_options(${_TARG} ${_SCOPE} $<$:${ARGN}>) list(APPEND ${_MAKE_TARG}_CXX_FLAGS ${ARGN}) get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) if(CMAKE_CUDA_COMPILER_IS_NVIDIA) - target_compile_options(${_TARG} - INTERFACE $<$:-Xcompiler=${ARGN}>) + target_compile_options(${_TARG} ${_SCOPE} + $<$:-Xcompiler=${ARGN}>) list(APPEND ${_MAKE_TARG}_CUDA_FLAGS -Xcompiler=${ARGN}) elseif(CMAKE_CUDA_COMPILER_IS_CLANG) - target_compile_options(${_TARG} INTERFACE $<$:${ARGN}>) + target_compile_options(${_TARG} ${_SCOPE} $<$:${ARGN}>) list(APPEND ${_MAKE_TARG}_CUDA_FLAGS ${ARGN}) endif() endmacro() diff --git a/cmake/ConfigInstall.cmake b/cmake/ConfigInstall.cmake new file mode 100644 index 0000000000..8b3e8afaf3 --- /dev/null +++ b/cmake/ConfigInstall.cmake @@ -0,0 +1,38 @@ +# include guard +include_guard(GLOBAL) + +include(CMakePackageConfigHelpers) + +install( + EXPORT omnitrace-library-targets + FILE omnitrace-library-targets.cmake + NAMESPACE omnitrace:: + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/omnitrace) + +# ------------------------------------------------------------------------------# +# install tree +# +set(PROJECT_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}) +set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) +set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) +set(PROJECT_BUILD_TARGETS user dl) + +configure_package_config_file( + ${PROJECT_SOURCE_DIR}/cmake/Templates/${PROJECT_NAME}-config.cmake.in + ${PROJECT_BINARY_DIR}/install-tree/${PROJECT_NAME}-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/omnitrace + INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} + PATH_VARS PROJECT_INSTALL_DIR INCLUDE_INSTALL_DIR LIB_INSTALL_DIR) + +write_basic_package_version_file( + ${PROJECT_BINARY_DIR}/install-tree/${PROJECT_NAME}-version.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) + +install( + FILES ${PROJECT_BINARY_DIR}/install-tree/${PROJECT_NAME}-config.cmake + ${PROJECT_BINARY_DIR}/install-tree/${PROJECT_NAME}-version.cmake + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME} + OPTIONAL) + +export(PACKAGE ${PROJECT_NAME}) diff --git a/cmake/Packages.cmake b/cmake/Packages.cmake index f7d3a13fe0..0ac291ab8d 100644 --- a/cmake/Packages.cmake +++ b/cmake/Packages.cmake @@ -598,6 +598,9 @@ target_link_libraries(omnitrace-ptl INTERFACE PTL::ptl-object) # # ----------------------------------------------------------------------------------------# +# override compiler macros +include(Compilers) + if(OMNITRACE_BUILD_STATIC_LIBSTDCXX) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") omnitrace_restore_variables(STATIC_LIBSTDCXX_CXX VARIABLES CMAKE_CXX_FLAGS) diff --git a/cmake/Templates/omnitrace-config.cmake.in b/cmake/Templates/omnitrace-config.cmake.in new file mode 100644 index 0000000000..2f46cbc8fb --- /dev/null +++ b/cmake/Templates/omnitrace-config.cmake.in @@ -0,0 +1,56 @@ +# - Config file for @PROJECT_NAME@ and its component libraries +# It defines the following variables: +# +# @PROJECT_NAME@_INCLUDE_DIRS +# @PROJECT_NAME@_LIBRARIES +# @PROJECT_NAME@_INTERNAL_DEFINES - used by the test suite + +# compute paths +get_filename_component(@PROJECT_NAME@_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) + +# version +include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-version.cmake) + +@PACKAGE_INIT@ + +set_and_check(@PROJECT_NAME@_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") +set_and_check(@PROJECT_NAME@_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@") +get_filename_component(@PROJECT_NAME@_ROOT_DIR ${@PROJECT_NAME@_INCLUDE_DIR} PATH) + +set(@PROJECT_NAME@_LIBRARIES) + +add_library(@PROJECT_NAME@::@PROJECT_NAME@ INTERFACE IMPORTED) + +include("${@PROJECT_NAME@_CMAKE_DIR}/@PROJECT_NAME@-library-targets.cmake") + +# Library dependencies +foreach(TARG @PROJECT_BUILD_TARGETS@) + set(TARG @PROJECT_NAME@-${TARG}-library) + if(NOT @PROJECT_NAME@_FIND_COMPONENTS) + list(APPEND @PROJECT_NAME@_LIBRARIES @PROJECT_NAME@::${TARG}) + target_link_libraries(@PROJECT_NAME@::@PROJECT_NAME@ + INTERFACE @PROJECT_NAME@::${TARG}) + endif() +endforeach() + +if(@PROJECT_NAME@_FIND_COMPONENTS) + foreach(COMP ${@PROJECT_NAME@_FIND_COMPONENTS}) + set(TARG @PROJECT_NAME@::@PROJECT_NAME@-${COMP}-library) + if(TARGET ${TARG}) + set(@PROJECT_NAME@_${COMP}_FOUND 1) + list(APPEND @PROJECT_NAME@_LIBRARIES ${TARG}) + target_link_libraries(@PROJECT_NAME@::@PROJECT_NAME@ + INTERFACE ${TARG}) + else() + set(@PROJECT_NAME@_${COMP}_FOUND 0) + endif() + endforeach() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + @PROJECT_NAME@ + FOUND_VAR @PROJECT_NAME@_FOUND + REQUIRED_VARS @PROJECT_NAME@_ROOT_DIR @PROJECT_NAME@_INCLUDE_DIR @PROJECT_NAME@_LIBRARIES + VERSION_VAR @PROJECT_NAME@_VERSION + HANDLE_COMPONENTS) diff --git a/docker/Dockerfile.opensuse.ci b/docker/Dockerfile.opensuse.ci index 6742bae9d3..2390072b31 100644 --- a/docker/Dockerfile.opensuse.ci +++ b/docker/Dockerfile.opensuse.ci @@ -19,7 +19,7 @@ ARG NJOBS="12" RUN zypper update -y && \ zypper dist-upgrade -y && \ zypper install -y -t pattern devel_basis && \ - zypper install -y python3-pip openmpi3-devel gcc-c++ git libnuma-devel dpkg-devel rpm-build papi-devel curl wget && \ + zypper install -y python3-pip openmpi3-devel gcc-c++ git libnuma-devel dpkg-devel rpm-build papi-devel curl wget binutils-gold && \ python3 -m pip install 'cmake==3.18.4' COPY ./dyninst-source /tmp/dyninst diff --git a/scripts/test-find-package.sh b/scripts/test-find-package.sh new file mode 100755 index 0000000000..1aa4cbd12a --- /dev/null +++ b/scripts/test-find-package.sh @@ -0,0 +1,154 @@ +#!/bin/bash -e + +SCRIPT_DIR=$(realpath $(dirname ${BASH_SOURCE[0]})) +cd $(dirname ${SCRIPT_DIR}) +echo -e "Working directory: $(pwd)" + +error-message() +{ + echo -e "\nError! ${@}\n" + exit -1 +} + +verbose-run() +{ + echo -e "\n##### Executing \"${@}\"... #####\n" + eval $@ +} + +if [ -d "$(realpath /tmp)" ]; then + : ${TMPDIR:=/tmp} + export TMPDIR +fi + +: ${EXAMPLE_DIR:=examples} +: ${EXAMPLE_NAME:=user-api} +: ${SOURCE_DIR:=$(mktemp -t -d omnitrace-test-source-XXXX)} +: ${BINARY_DIR:=$(mktemp -t -d omnitrace-test-build-XXXX)} +: ${INSTALL_DIR:=$(mktemp -t -d omnitrace-install-XXXX)} +: ${INSTALL_SCRIPT:=""} + +usage() +{ + print_option() { printf " --%-10s %-24s %s (default: %s)\n" "${1}" "${2}" "${3}" "${4}"; } + echo "Options:" + print_option example-name "" "Name of the example project" "${EXAMPLE_NAME}" + print_option example-dir "" "Directory containing example" "${EXAMPLE_DIR}" + print_option source-dir "" "Location to copy example to" "${SOURCE_DIR}" + print_option binary-dir "" "Location to build" "${BINARY_DIR}" + print_option install-dir "" "Location of omnitrace installation" "${INSTALL_DIR}" + print_option install-script "" "Absolute path to the installer script" "" +} + +while [[ $# -gt 0 ]] +do + ARG=${1} + shift + + VAL="" + while [[ $# -gt 0 ]] + do + VAL=${1} + shift + break + done + + if [ -z "${VAL}" ]; then + echo "Error! Missing value for argument \"${ARG}\"" + usage + exit -1 + fi + + case "${ARG}" in + --example-name) + EXAMPLE_NAME=${VAL} + continue + ;; + --example-dir) + EXAMPLE_DIR=${VAL} + continue + ;; + --source-dir) + SOURCE_DIR=${VAL} + continue + ;; + --binary-dir) + BINARY_DIR=${VAL} + continue + ;; + --install-dir) + INSTALL_DIR=${VAL} + continue + ;; + --install-script) + INSTALL_SCRIPT=${VAL} + continue + ;; + *) + echo -e "Error! Unknown option : ${ARG}" + usage + exit -1 + ;; + esac +done + +if [ ! -f "${INSTALL_DIR}/include/omnitrace/user.h" ]; then + if [ -z "${INSTALL_SCRIPT}" ]; then + error-message "Unable to find \"omnitrace/user.h\" in \"${INSTALL_DIR}/include\" and installation script not provided" + elif [ ! -f "${INSTALL_SCRIPT}" ]; then + error-message "Unable to locate \"${INSTALL_SCRIPT}\" in directory \"${PWD}\"" + else + verbose-run mkdir -p ${INSTALL_DIR} + verbose-run $(realpath ${INSTALL_SCRIPT}) --prefix=${INSTALL_DIR} --skip-license --exclude-subdir + fi +fi + +if [ ! -d ${SOURCE_DIR} ]; then + verbose-run mkdir -p ${SOURCE_DIR} +fi + +verbose-run cp -v -r ${EXAMPLE_DIR}/${EXAMPLE_NAME}/* ${SOURCE_DIR}/ + +verbose-run pushd ${SOURCE_DIR} + +cat << EOF > CMakeLists.txt +cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR) + +project(test LANGUAGES C CXX) + +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) + +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(omnitrace REQUIRED COMPONENTS user dl) +find_package(Threads REQUIRED) + +get_target_property(LIBS omnitrace::omnitrace INTERFACE_LINK_LIBRARIES) +foreach(_LIB \${LIBS}) + foreach(_VAR LINK_LIBRARIES INCLUDE_DIRECTORIES) + get_target_property(_VAL \${_LIB} INTERFACE_\${_VAR}) + if(_VAL) + message(STATUS "\${_LIB} :: \${_VAR} :: \${_VAL}") + endif() + endforeach() +endforeach() + +file(GLOB sources \${CMAKE_CURRENT_LIST_DIR}/*.cpp \${CMAKE_CURRENT_LIST_DIR}/*.c) +add_executable(app \${sources}) +target_link_libraries(app PRIVATE Threads::Threads omnitrace::omnitrace) +EOF + +export CMAKE_PREFIX_PATH=${INSTALL_DIR}:${CMAKE_PREFIX_PATH} + +verbose-run find . +verbose-run cmake -B ${BINARY_DIR} ${SOURCE_DIR} +verbose-run cmake --build ${BINARY_DIR} --target all --parallel 2 -- VERBOSE=1 + +set +e + +verbose-run pushd ${BINARY_DIR} +verbose-run ./app +verbose-run popd +verbose-run popd diff --git a/source/lib/omnitrace-dl/CMakeLists.txt b/source/lib/omnitrace-dl/CMakeLists.txt index c2f610fba4..76a38b9ab5 100644 --- a/source/lib/omnitrace-dl/CMakeLists.txt +++ b/source/lib/omnitrace-dl/CMakeLists.txt @@ -18,15 +18,16 @@ target_sources(omnitrace-dl-library PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/dl.cpp target_include_directories( omnitrace-dl-library PUBLIC $ - $) + $ + $) target_link_libraries( omnitrace-dl-library PUBLIC ${dl_LIBRARY} $ $ - $,$,> - $,$,> + $,omnitrace::omnitrace-static-libgcc,>> + $,omnitrace::omnitrace-static-libstdcxx,>> ) add_target_cxx_flag_if_avail(omnitrace-dl-library "-ftls-model=global-dynamic") @@ -42,14 +43,10 @@ set_target_properties( omnitrace_strip_target(omnitrace-dl-library) -install( - TARGETS omnitrace-dl-library - EXPORT omnitrace-dl-library-targets - DESTINATION ${CMAKE_INSTALL_LIBDIR} - OPTIONAL) +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dl.hpp + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/omnitrace) install( - EXPORT omnitrace-dl-library-targets - FILE omnitrace-dl-library-targets.cmake - NAMESPACE omnitrace:: - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/omnitrace) + TARGETS omnitrace-dl-library + EXPORT omnitrace-library-targets + DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/source/lib/omnitrace-dl/dl.cpp b/source/lib/omnitrace-dl/dl.cpp index 5561547993..49ad527545 100644 --- a/source/lib/omnitrace-dl/dl.cpp +++ b/source/lib/omnitrace-dl/dl.cpp @@ -33,6 +33,7 @@ #include "common/join.hpp" #include +#include //--------------------------------------------------------------------------------------// diff --git a/source/lib/omnitrace-dl/dl.hpp b/source/lib/omnitrace-dl/dl.hpp index 294378fa2a..3bcb9c288a 100644 --- a/source/lib/omnitrace-dl/dl.hpp +++ b/source/lib/omnitrace-dl/dl.hpp @@ -20,9 +20,17 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -#pragma once +#ifndef OMNITRACE_DL_HPP_ +#define OMNITRACE_DL_HPP_ 1 + +#if defined(OMNITRACE_DL_SOURCE) && (OMNITRACE_DL_SOURCE > 0) +# include "common/defines.h" +#else +# if !defined(OMNITRACE_PUBLIC_API) +# define OMNITRACE_PUBLIC_API +# endif +#endif -#include "common/defines.h" #include "omnitrace/user.h" #include @@ -32,7 +40,6 @@ #include #include #include -#include #include #include #include @@ -88,3 +95,5 @@ extern "C" # endif #endif } + +#endif // OMNITRACE_DL_HPP_ 1 diff --git a/source/lib/omnitrace-user/CMakeLists.txt b/source/lib/omnitrace-user/CMakeLists.txt index 1fc59d558c..0b606eef5a 100644 --- a/source/lib/omnitrace-user/CMakeLists.txt +++ b/source/lib/omnitrace-user/CMakeLists.txt @@ -33,19 +33,10 @@ set_target_properties( omnitrace_strip_target(omnitrace-user-library) +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/omnitrace/user.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/omnitrace) + install( TARGETS omnitrace-user-library - EXPORT omnitrace-user-library-targets - DESTINATION ${CMAKE_INSTALL_LIBDIR} - OPTIONAL) - -install( - FILES ${CMAKE_CURRENT_SOURCE_DIR}/omnitrace/user.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/omnitrace - OPTIONAL) - -install( - EXPORT omnitrace-user-library-targets - FILE omnitrace-user-library-targets.cmake - NAMESPACE omnitrace:: - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/omnitrace) + EXPORT omnitrace-library-targets + DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/source/lib/omnitrace-user/omnitrace/user.h b/source/lib/omnitrace-user/omnitrace/user.h index 12c2ef2856..39ae0d0460 100644 --- a/source/lib/omnitrace-user/omnitrace/user.h +++ b/source/lib/omnitrace-user/omnitrace/user.h @@ -23,10 +23,27 @@ #ifndef OMNITRACE_USER_H_ #define OMNITRACE_USER_H_ 1 -#define OMNITRACE_ATTRIBUTE(...) __attribute__((__VA_ARGS__)) -#define OMNITRACE_VISIBILITY(MODE) OMNITRACE_ATTRIBUTE(visibility(MODE)) -#define OMNITRACE_PUBLIC_API OMNITRACE_VISIBILITY("default") -#define OMNITRACE_HIDDEN_API OMNITRACE_VISIBILITY("hidden") +#if defined(OMNITRACE_USER_SOURCE) && (OMNITRACE_USER_SOURCE > 0) +# if !defined(OMNITRACE_ATTRIBUTE) +# define OMNITRACE_ATTRIBUTE(...) __attribute__((__VA_ARGS__)) +# endif +# if !defined(OMNITRACE_VISIBILITY) +# define OMNITRACE_VISIBILITY(MODE) OMNITRACE_ATTRIBUTE(visibility(MODE)) +# endif +# if !defined(OMNITRACE_PUBLIC_API) +# define OMNITRACE_PUBLIC_API OMNITRACE_VISIBILITY("default") +# endif +# if !defined(OMNITRACE_HIDDEN_API) +# define OMNITRACE_HIDDEN_API OMNITRACE_VISIBILITY("hidden") +# endif +#else +# if !defined(OMNITRACE_PUBLIC_API) +# define OMNITRACE_PUBLIC_API +# endif +# if !defined(OMNITRACE_HIDDEN_API) +# define OMNITRACE_HIDDEN_API +# endif +#endif #if defined(__cplusplus) extern "C" diff --git a/source/lib/omnitrace-user/user.cpp b/source/lib/omnitrace-user/user.cpp index 8e7478f0a9..bd70353786 100644 --- a/source/lib/omnitrace-user/user.cpp +++ b/source/lib/omnitrace-user/user.cpp @@ -20,7 +20,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -#define OMNITRACE_SOURCE 1 +#if !defined(OMNITRACE_USER_SOURCE) +# define OMNITRACE_USER_SOURCE 1 +#endif #include "omnitrace/user.h" diff --git a/source/lib/omnitrace/CMakeLists.txt b/source/lib/omnitrace/CMakeLists.txt index de549c30ee..8209e561bc 100644 --- a/source/lib/omnitrace/CMakeLists.txt +++ b/source/lib/omnitrace/CMakeLists.txt @@ -13,8 +13,10 @@ target_include_directories( target_compile_definitions( omnitrace-interface-library - INTERFACE OMNITRACE_MAX_THREADS=${OMNITRACE_MAX_THREADS} - $,CUSTOM_DATA_SOURCE,>) + INTERFACE + OMNITRACE_MAX_THREADS=${OMNITRACE_MAX_THREADS} + $,CUSTOM_DATA_SOURCE,>> + ) target_link_libraries( omnitrace-interface-library @@ -30,9 +32,10 @@ target_link_libraries( $ $ $ - $,$,> - $,$,> - $,omnitrace::omnitrace-sanitizer,>) + $,omnitrace::omnitrace-static-libgcc,>> + $,omnitrace::omnitrace-static-libstdcxx,>> + $,omnitrace::omnitrace-sanitizer,>> + ) # ------------------------------------------------------------------------------# #