# Default installation path
set (INSTALL_DIR ${CMAKE_BINARY_DIR})
set (LIBRARY_OUTPUT_PATH  ${CMAKE_BINARY_DIR}/lib)
set (EXECUTABLE_OUTPUT_PATH  ${CMAKE_BINARY_DIR}/bin)

# Include directories
include_directories(
  ./core
  ./pptrace
  ./pptrace/arch
  ./pptrace/os/linux
  /usr/include/libiberty/
  ../extlib/litl/src/
  ${CMAKE_BINARY_DIR}/extlib/include
  )

link_directories(${CMAKE_BINARY_DIR}/lib ${CMAKE_BINARY_DIR}/extlib/lib)

set(CMAKE_C_FLAGS "-W -Wall ${CFLAGS} -DEZTRACE_LIB_DIR=\\\"${LIBRARY_PATH}/\\\" -DDYNLIB_EXT=\\\"${DYNLIB_EXT}\\\" -DEZTRACE_ABS_TOP_BUILDDIR=\\\"${abs_top_builddir}\\\"")

if (EZTRACE_ENABLE_IBERTY)
  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_DEMANGLE")
endif()

# Compile eztrace
add_executable(
  eztrace-bin
  ./core/eztrace.c
  ./core/ezt_demangle.c
  ./pptrace/pptrace.c
  ./pptrace/binary.c
  ./pptrace/errors.c
  ./pptrace/hijack.c
  ./pptrace/isize.c
  ./pptrace/memory.c
  ./pptrace/opcodes.c
  ./pptrace/tracing.c
)

target_link_libraries(
 eztrace-bin
 pthread
 opcodes
 litl
 bfd
 )

# Dependencies for building order
add_dependencies(eztrace-bin ${BINARY_LIB} litl)

# Change name : eztrace-bin -> eztrace
set_target_properties(eztrace-bin PROPERTIES OUTPUT_NAME eztrace)

# Compile libeztrace_convert_core
add_library(
  eztrace-convert-core
  SHARED
  core/eztrace_convert_core.c
  core/eztrace_stats_core.c
  core/eztrace_hierarchical_array.c
  core/eztrace_array.c
  core/submodules/ezt_submodule_convert.c
  core/submodules/ezt_getcpu_convert.c
  core/submodules/ezt_getcpu.h
  core/ezt_demangle.c
)

target_link_libraries(
 eztrace-convert-core
 libgtg.so
 dl
 pthread
 litl
 iberty
 )

# Compile eztrace-avail
add_executable(
  eztrace_avail
  core/eztrace_avail.c
)

target_link_libraries(
  eztrace_avail
  eztrace-convert-core
  dl
  libgtg.so
)

# Compile eztrace-loaded
add_executable(
  eztrace_loaded
  core/eztrace_loaded.c
)

target_link_libraries(
  eztrace_loaded
  eztrace-convert-core
  dl
  libgtg.so
  )

# Compile eztrace-stats
add_executable(
  eztrace_stats
  core/eztrace_stats.c
)

target_link_libraries(
  eztrace_stats
  eztrace-convert-core
  dl
  libgtg.so
  )

# Compile eztrace-convert
add_executable(
  eztrace_convert
  core/eztrace_convert.c
)

target_link_libraries(
  eztrace_convert
  eztrace-convert-core
  dl
  libgtg.so
)

# Compile libeztrace
add_library(
  eztrace
  SHARED
  core/eztrace_core.c
  core/eztrace_sampling.c
  core/pthread_core.c
  core/submodules/ezt_submodule.c
  core/submodules/ezt_getcpu.c
)

target_link_libraries(
  eztrace
  pthread
  bfd
  litl
  dl
  rt
)

# Compile libeztrace_autostart
add_library(
  eztrace-autostart
  SHARED
  core/eztrace_core.c
  core/eztrace_sampling.c
  core/pthread_core.c
  core/submodules/ezt_submodule.c
  core/submodules/ezt_getcpu.c
)

set_target_properties (eztrace-autostart PROPERTIES COMPILE_FLAGS "-DEZTRACE_AUTOSTART")

target_link_libraries(
  eztrace-autostart
  pthread
  litl
  dl
  bfd
  rt
)
set_target_properties (eztrace eztrace-autostart eztrace-convert-core eztrace-bin eztrace_convert eztrace_stats eztrace_avail  PROPERTIES LINK_FLAGS "-Wl,--no-undefined")

install(TARGETS eztrace-bin EXPORT eztrace DESTINATION bin)
install(TARGETS eztrace eztrace-autostart eztrace-convert-core eztrace_avail eztrace_loaded eztrace_convert eztrace_stats
  RUNTIME DESTINATION bin
  LIBRARY DESTINATION lib)

add_subdirectory (modules)