Skip to content

Fortran wrapper #17

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

Draft
wants to merge 71 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
0a50dc9
Add active_region_stack to task region definition
adamtuft Sep 14, 2021
cb1652d
Implement stack_transfer and tests
adamtuft Sep 14, 2021
5c71aef
Add ability to add compile options to otter-core
adamtuft Sep 14, 2021
dec7d25
Add rgn_stack to region definition (for use by tasks only) and define…
adamtuft Sep 14, 2021
ef03bed
Bug fix: update dest->base when dest is empty before stack_transfer
adamtuft Sep 14, 2021
cb6b785
Add rgn_stack in trace_new_task_region
adamtuft Sep 14, 2021
f79b606
Implement trace_event_task_switch triggering stack_transfer between p…
adamtuft Sep 14, 2021
9ef7966
Invoke trace_event_task_switch on task-switch event if TASK_SCHEDULE_…
adamtuft Sep 14, 2021
19ff185
Add prior task, next task and prior task status to task-switch event …
adamtuft Sep 14, 2021
61d7f0d
Update attributes, factor out region attr union into separate type
adamtuft Sep 16, 2021
2c15659
Refactor trace_add_common_event_attributes for finer control of args …
adamtuft Sep 16, 2021
bbb6e76
Add __USE_POSIX to prevent include error
adamtuft Sep 16, 2021
25d60ee
Remove hardcoded num threads
adamtuft Sep 20, 2021
98d10c1
Add taskwait
adamtuft Oct 20, 2021
787f90d
Merge branch dev-task-active-region-stack
adamtuft Nov 22, 2021
4943098
Refactor otter-trace code into multiple smaller source files, focussi…
adamtuft Nov 23, 2021
d901e9a
Remove refactored code
adamtuft Nov 23, 2021
9e8f3ce
Refactor trace_add_thread_attributes into trace-location.c
adamtuft Nov 23, 2021
8371056
Remove refactored function declaration
adamtuft Nov 23, 2021
954e360
Major refactor of trace component
adamtuft Dec 1, 2021
65dc597
Add initial skeleton serial event API and a basic fibonacci example
adamtuft Dec 2, 2021
dbd7bf6
Restructure source tree
adamtuft Dec 6, 2021
41df581
Large refactor of headers and source, add serial events to otter-seri…
adamtuft Dec 13, 2021
1f3cfba
De-couple trace from core. Add serial event source and a simple examp…
adamtuft Dec 13, 2021
b7e88dd
Implement remaining serial events
adamtuft Dec 13, 2021
6d48321
Implement serial event version of taskgroup region, verify with simpl…
adamtuft Dec 15, 2021
bc9a617
Add extern C
adamtuft Dec 15, 2021
dcf2dff
Fix various memory leaks
adamtuft Dec 15, 2021
a1751cf
Add file comments
adamtuft Dec 15, 2021
3e4c19e
Delete redundant Makefile
adamtuft Dec 23, 2021
48917ab
Implement basic tracing start/stop switch
adamtuft Dec 24, 2021
1456dc4
Simplify cmake OTF2 option
adamtuft Mar 10, 2022
ae04346
Make task-switch event the default when a task-schedule event occurs.…
adamtuft Mar 10, 2022
48623cb
Add install target for otter-serial header
adamtuft Mar 10, 2022
ffc8783
update .gitignore
adamtuft Mar 10, 2022
636e0bc
Add next_task_region_type attribute to task-switch events
adamtuft Apr 7, 2022
eab3f27
Add more taskgroup regions
adamtuft Apr 7, 2022
c82ffbd
Fix include statement
adamtuft Apr 7, 2022
81fa109
Add version string to trace file string definitions
adamtuft Apr 11, 2022
8ee02d6
Remove src/python, replace with pyotter submodule at modules/pyotter
adamtuft Apr 12, 2022
b7fde37
Remove redundant dirs
adamtuft Apr 12, 2022
8a70515
Refresh README to point to project wiki
adamtuft Apr 12, 2022
70333d0
Pull new pyotter commits
adamtuft Apr 12, 2022
1c3bbbe
Pull pyotter commits
adamtuft Apr 12, 2022
3ad16a9
Update pyotter
adamtuft Apr 12, 2022
d6ede05
Update pyotter submodule
adamtuft Apr 13, 2022
9a0c554
Update pyotter submodule
adamtuft Apr 13, 2022
2cc4104
Add check for IntelLLVM to CMakeLists (I do wish they'd stop changing…
adamtuft Apr 15, 2022
eabcea8
Add latest commit from pyotter
adamtuft Apr 22, 2022
7e4423a
Standardise serial header location to otter/otter-serial.h
adamtuft Apr 22, 2022
5d4fb5e
Change *Begin entrypoints to macros which pass __FILE__, __func__ and…
adamtuft Apr 22, 2022
3d8fcef
Remove spurious variable
adamtuft Apr 22, 2022
4fd3d9e
Remove redundant queue_scan code
adamtuft Apr 25, 2022
8ff4ef8
Merge commit '4fd3d9e' into dev-serial-src-loc
adamtuft Apr 25, 2022
968d824
Initial prototype of source location map
adamtuft Apr 27, 2022
b21969a
Delete srclocation files - over-complicated, reworked as char_ref_reg…
adamtuft May 4, 2022
2115eeb
Implement char_ref_registry for mapping const char* to uint_32t, add …
adamtuft May 4, 2022
40ed122
Add char_ref_registry to cmake files
adamtuft May 4, 2022
dbf544c
Define otter_src_location_t and add as argument to new_task_data, to …
adamtuft May 4, 2022
22e9afe
Define attributes for source location, add to trace_task_region_attr_…
adamtuft May 4, 2022
45f26a9
Remove unecessary function
adamtuft May 4, 2022
1d83d93
Implement char_ref_registry in archive to write source location strin…
adamtuft May 4, 2022
2f692c3
Add example for a single empty task in serial mode
adamtuft May 4, 2022
c7c8b47
Update pyotter
adamtuft May 4, 2022
cbcf1fc
Change LOG_EVENT_CALL into debug statement
adamtuft May 4, 2022
33b3581
Add source location to initial & implicit tasks
adamtuft May 4, 2022
7a0dc41
Update pyotter
adamtuft May 4, 2022
d4fd701
Merge branch 'dev-serial-src-loc' into dev
adamtuft May 4, 2022
b87b56a
Update CMakeLists.txt to warn and continue if omp-tools.h not fouund.
adamtuft May 16, 2022
3a62c3a
Initial Fortran header files
LonelyCat124 May 17, 2022
5c919cc
Added example
LonelyCat124 May 17, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@
/build*/
/trace/
/scratch/
/reports/
/.vscode/

/workspace.code-workspace

!/docs/*.svg

/include/otter/otter-version.h

/*.sh
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[submodule "modules/pyotter"]
path = modules/pyotter
url = git@github.com:Otter-Taskification/pyotter.git
branch = dev
262 changes: 179 additions & 83 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ option(WITH_EXAMPLES "Generate and build examples for demonstrating Otter" OFF)
option(WITH_TESTS "Generate and build tests" OFF)
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(OTF2_INCLUDE_DIR "/opt/otf2/include" CACHE STRING "OTF2 include directory")
set(OTF2_LIB_DIR "/opt/otf2/lib" CACHE STRING "OTF2 library directory")
set(OTF2_INSTALL_DIR "/opt/otf2" CACHE STRING "OTF2 install directory")

if (CMAKE_C_FLAGS)
message(STATUS "Flags added: \"${CMAKE_C_FLAGS}\"")
endif()

# Select default config type
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
Expand Down Expand Up @@ -79,7 +82,33 @@ if(NOT "${C_COMPILER_VERSION_MINOR}" STREQUAL "")
endif()
endif()

message(STATUS "C compiler selected: ${CMAKE_C_COMPILER_ID} ${C_COMPILER_VERSION}")
# Extract CXX compiler version as separate components
execute_process (
COMMAND bash -c "${CMAKE_CXX_COMPILER} -dumpversion | tr -d '\n' | sed 's/\\./\\;/g'"
OUTPUT_VARIABLE CXX_COMPILER_VERSION_LIST
)
list(GET CXX_COMPILER_VERSION_LIST 0 CXX_COMPILER_VERSION_MAJOR)
list(GET CXX_COMPILER_VERSION_LIST 1 CXX_COMPILER_VERSION_MINOR)
list(GET CXX_COMPILER_VERSION_LIST 2 CXX_COMPILER_VERSION_BUGFIX)

# Build version string component-wise
set(CXX_COMPILER_VERSION ${CXX_COMPILER_VERSION_MAJOR})
if(NOT "${CXX_COMPILER_VERSION_MINOR}" STREQUAL "")
set(CXX_COMPILER_VERSION "${CXX_COMPILER_VERSION}.${CXX_COMPILER_VERSION_MINOR}")
if(NOT "${CXX_COMPILER_VERSION_BUGFIX}" STREQUAL "")
set(CXX_COMPILER_VERSION "${CXX_COMPILER_VERSION}.${CXX_COMPILER_VERSION_BUGFIX}")
endif()
endif()

message(STATUS "C compiler selected: ${CMAKE_C_COMPILER} (${CMAKE_C_COMPILER_ID}) ${C_COMPILER_VERSION}")
message(STATUS "C++ compiler selected: ${CMAKE_CXX_COMPILER} (${CMAKE_CXX_COMPILER_ID}) ${CXX_COMPILER_VERSION}")

# # # OMPT # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Check for omp-tools.h
CHECK_INCLUDE_FILE(omp-tools.h HAVE_OMP_TOOLS_H)
if(NOT HAVE_OMP_TOOLS_H)
message(WARNING "Can't find omp-tools.h - did you specify an OMPT-supporting compiler?")
endif()

# Detect requirement to use 5.1 features instead of deprecated 5.1 features
set(USE_OMPT_51 0)
Expand All @@ -97,123 +126,190 @@ if(CMAKE_C_COMPILER_ID STREQUAL "Intel")
endif()
elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
if("${C_COMPILER_VERSION}" VERSION_GREATER "11.1")
message(STATUS "Detected Clang >11")
message(STATUS "Detected Clang >11")
set(USE_OMPT_51 1)
endif()
elseif(CMAKE_C_COMPILER_ID STREQUAL "IntelLLVM")
if("${C_COMPILER_VERSION}" VERSION_GREATER_EQUAL "13.0.0")
message(STATUS "Detected IntelLLVM >= 13.0.0")
set(USE_OMPT_51 1)
endif()
else()
message(WARN "Selected C compiler may not be supported")
message(WARN " Selected C compiler may not be supported:")
message(WARN " CMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}")
message(WARN " C_COMPILER_VERSION=${C_COMPILER_VERSION}")
endif()

# Define library components
add_library(otter-core OBJECT
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/otter-core.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/otter-entry.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/otter-structs.c
)
target_include_directories(otter-core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_definitions(otter-core PRIVATE DEBUG_LEVEL=${OTTER_DEBUG_CORE})
set_property(TARGET otter-core PROPERTY POSITION_INDEPENDENT_CODE ON)
# Check for otf2.h
if(DEFINED OTF2_INSTALL_DIR)
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${OTF2_INSTALL_DIR}/include)
message(STATUS "Searching for otf2.h in: ${CMAKE_REQUIRED_INCLUDES}")
else()
message(STATUS "Searching for otf2.h in default include locations")
endif()
CHECK_INCLUDE_FILE(otf2/otf2.h HAVE_OTF2_H)
if(NOT HAVE_OTF2_H)
message(FATAL_ERROR "Can't find otf2.h - did you specify OTF2_INSTALL_DIR?")
endif()

# Check OTF2 version found
find_path(OTF2_INCLUDE_DIR otf2.h
PATHS ${OTF2_INSTALL_DIR}/include/otf2)
message(STATUS OTF2_INCLUDE_DIR=${OTF2_INCLUDE_DIR})
file(READ "${OTF2_INCLUDE_DIR}/OTF2_GeneralDefinitions.h" otf2_defs_h)

add_library(otter-trace OBJECT
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace-core.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace-structs.c
string(REGEX MATCH "#define OTF2_VERSION_MAJOR[ \t]+[0-9]+" OTF2_VERSION_MAJOR_DEF "${otf2_defs_h}")
string(REGEX REPLACE "#define OTF2" "" OTF2_VERSION_MAJOR_R "${OTF2_VERSION_MAJOR_DEF}")
string(REGEX MATCH "[0-9]+" OTF2_VERSION_MAJOR "${OTF2_VERSION_MAJOR_R}")

string(REGEX MATCH "#define OTF2_VERSION_MINOR[ \t]+[0-9]+" OTF2_VERSION_MINOR_DEF "${otf2_defs_h}")
string(REGEX REPLACE "#define OTF2" "" OTF2_VERSION_MINOR_R "${OTF2_VERSION_MINOR_DEF}")
string(REGEX MATCH "[0-9]+" OTF2_VERSION_MINOR "${OTF2_VERSION_MINOR_R}")

string(REGEX MATCH "#define OTF2_VERSION_BUGFIX[ \t]+[0-9]+" OTF2_VERSION_BUGFIX_DEF "${otf2_defs_h}")
string(REGEX REPLACE "#define OTF2" "" OTF2_VERSION_BUGFIX_R "${OTF2_VERSION_BUGFIX_DEF}")
string(REGEX MATCH "[0-9]+" OTF2_VERSION_BUGFIX "${OTF2_VERSION_BUGFIX_R}")

message(STATUS "Using OTF2 v${OTF2_VERSION_MAJOR}.${OTF2_VERSION_MINOR}.${OTF2_VERSION_BUGFIX}")

if(NOT "${OTF2_VERSION_MAJOR}.${OTF2_VERSION_MINOR}" STREQUAL "2.3")
message(FATAL_ERROR "Otter requires OTF2 v2.3")
endif()

# OMPT event source
add_library(otter-events-ompt OBJECT
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/events/ompt/otter-core.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/events/ompt/otter-entry.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/types/otter-structs.c
)
target_include_directories(otter-trace PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_definitions(otter-trace PRIVATE DEBUG_LEVEL=${OTTER_DEBUG_TRACE})
set_property(TARGET otter-trace PROPERTY POSITION_INDEPENDENT_CODE ON)
target_include_directories(otter-events-ompt PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_options(otter-events-ompt BEFORE PRIVATE ${CMAKE_C_FLAGS})
target_compile_definitions(otter-events-ompt PRIVATE DEBUG_LEVEL=${OTTER_DEBUG_CORE})
set_property(TARGET otter-events-ompt PROPERTY POSITION_INDEPENDENT_CODE ON)

# Serial event source
add_library(otter-events-serial OBJECT
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/events/serial/otter-serial.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/events/serial/otter-serial.F90
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/types/otter-structs.c
)
target_include_directories(otter-events-serial PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_options(otter-events-serial BEFORE PRIVATE ${CMAKE_C_FLAGS})
target_compile_definitions(otter-events-serial PRIVATE DEBUG_LEVEL=${OTTER_DEBUG_CORE})
set_property(TARGET otter-events-serial PROPERTY POSITION_INDEPENDENT_CODE ON)

# Trace component for OMP mode
add_library(otter-trace-ompt OBJECT
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-core.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-location.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-region-parallel.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-region-workshare.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-region-master.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-region-sync.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-region-task.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-archive.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-unique-refs.c
)
target_include_directories(otter-trace-ompt PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_definitions(otter-trace-ompt PRIVATE DEBUG_LEVEL=${OTTER_DEBUG_TRACE})
set_property(TARGET otter-trace-ompt PROPERTY POSITION_INDEPENDENT_CODE ON)

# Trace component for serial mode
add_library(otter-trace-serial OBJECT
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-core.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-location.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-region-parallel.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-region-workshare.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-region-master.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-region-sync.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-region-task.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-archive.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/trace/trace-unique-refs.c
)
target_include_directories(otter-trace-serial PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_definitions(otter-trace-serial PRIVATE DEBUG_LEVEL=${OTTER_DEBUG_TRACE})
set_property(TARGET otter-trace-serial PROPERTY POSITION_INDEPENDENT_CODE ON)
# Add define to signify serial tracing mode
target_compile_definitions(otter-trace-serial PRIVATE OTTER_SERIAL_MODE)

# Datatypes component
add_library(otter-dtype OBJECT
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/dt-queue.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/dt-stack.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/types/dt-queue.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/types/dt-stack.c
${CMAKE_CURRENT_SOURCE_DIR}/src/otter/types/char_ref_registry.cpp
)
target_include_directories(otter-dtype PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_definitions(otter-dtype PRIVATE DEBUG_LEVEL=${OTTER_DEBUG_DTYPE})
set_property(TARGET otter-dtype PROPERTY POSITION_INDEPENDENT_CODE ON)

# Link component objects into shared library
add_library(otter
$<TARGET_OBJECTS:otter-core>
$<TARGET_OBJECTS:otter-trace>
# Otter library compiled for OMP mode
if(HAVE_OMP_TOOLS_H)
add_library(otter-ompt
$<TARGET_OBJECTS:otter-events-ompt>
$<TARGET_OBJECTS:otter-trace-ompt>
$<TARGET_OBJECTS:otter-dtype>
)
install(TARGETS otter-ompt DESTINATION lib)
target_link_libraries(otter-ompt pthread)
target_link_libraries(otter-ompt otf2)
if(DEFINED OTF2_INSTALL_DIR)
target_link_libraries(otter-ompt -L${OTF2_INSTALL_DIR}/lib)
endif()
else()
message(WARNING "otter-ompt target was not generated as omp-tools.h is not available")
endif()

# Specify Otter install location
install(TARGETS otter DESTINATION lib)

# Configure version header
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/include/otter/otter-version.h.in
${CMAKE_CURRENT_SOURCE_DIR}/include/otter/otter-version.h
# Otter library compiled for serial mode
add_library(otter-serial
$<TARGET_OBJECTS:otter-events-serial>
$<TARGET_OBJECTS:otter-trace-serial>
$<TARGET_OBJECTS:otter-dtype>
)
set_target_properties(otter-serial PROPERTIES PUBLIC_HEADER "include/otter/otter-serial.h")

# Link to dependencies
target_link_libraries(otter pthread)

# # # OMPT # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Check for omp-tools.h
CHECK_INCLUDE_FILE(omp-tools.h HAVE_OMP_TOOLS_H)
if(NOT HAVE_OMP_TOOLS_H)
message(FATAL_ERROR "Can't find omp-tools.h - did you specify an OMPT-supporting compiler?")
# # # OTF2 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Add OTF2 install directory if it was specified
if(DEFINED OTF2_INSTALL_DIR)
target_include_directories(otter-events-ompt PRIVATE ${OTF2_INSTALL_DIR}/include)
target_include_directories(otter-events-serial PRIVATE ${OTF2_INSTALL_DIR}/include)
target_include_directories(otter-trace-ompt PRIVATE ${OTF2_INSTALL_DIR}/include)
target_include_directories(otter-trace-serial PRIVATE ${OTF2_INSTALL_DIR}/include)
target_include_directories(otter-dtype PRIVATE ${OTF2_INSTALL_DIR}/include)
endif()

# Flag that we should use OMPT 5.1 features
if(USE_OMPT_51)
message(STATUS "Using OMPT 5.1")
target_compile_definitions(otter-core PRIVATE USE_OMPT_MASKED)
target_compile_definitions(otter-trace PRIVATE USE_OMPT_MASKED)
target_compile_definitions(otter-events-ompt PRIVATE USE_OMPT_MASKED)
target_compile_definitions(otter-trace-ompt PRIVATE USE_OMPT_MASKED)
else()
message(STATUS "Not using OMPT 5.1")
endif()

# # # OTF2 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Add OTF2 include directory if it was specified
set(HAVE_OTF2_INCLUDE_DIR FALSE)
if(DEFINED OTF2_INCLUDE_DIR)
target_include_directories(otter-core PRIVATE ${OTF2_INCLUDE_DIR})
target_include_directories(otter-trace PRIVATE ${OTF2_INCLUDE_DIR})
set(HAVE_OTF2_INCLUDE_DIR TRUE)
message(STATUS "OTF2 include dir was specified")
endif()

target_link_libraries(otter otf2)
# Add library directory for OTF2 if it was specified
if(DEFINED OTF2_LIB_DIR)
target_link_libraries(otter -L${OTF2_LIB_DIR})
endif()

# Check for otf2.h
set(CMAKE_REQUIRED_INCLUDES $<$<BOOL:HAVE_OTF2_INCLUDE_DIR>:${OTF2_INCLUDE_DIR}>)
CHECK_INCLUDE_FILE(otf2/otf2.h HAVE_OTF2_H)
if(NOT HAVE_OTF2_H)
message(FATAL_ERROR "Can't find otf2.h - did you specify OTF2_INCLUDE_DIR?")
endif()

# Check OTF2 version found
file(READ "${OTF2_INCLUDE_DIR}/otf2/OTF2_GeneralDefinitions.h" otf2_defs_h)

string(REGEX MATCH "#define OTF2_VERSION_MAJOR[ \t]+[0-9]+" OTF2_VERSION_MAJOR_DEF "${otf2_defs_h}")
string(REGEX REPLACE "#define OTF2" "" OTF2_VERSION_MAJOR_R "${OTF2_VERSION_MAJOR_DEF}")
string(REGEX MATCH "[0-9]+" OTF2_VERSION_MAJOR "${OTF2_VERSION_MAJOR_R}")

string(REGEX MATCH "#define OTF2_VERSION_MINOR[ \t]+[0-9]+" OTF2_VERSION_MINOR_DEF "${otf2_defs_h}")
string(REGEX REPLACE "#define OTF2" "" OTF2_VERSION_MINOR_R "${OTF2_VERSION_MINOR_DEF}")
string(REGEX MATCH "[0-9]+" OTF2_VERSION_MINOR "${OTF2_VERSION_MINOR_R}")

string(REGEX MATCH "#define OTF2_VERSION_BUGFIX[ \t]+[0-9]+" OTF2_VERSION_BUGFIX_DEF "${otf2_defs_h}")
string(REGEX REPLACE "#define OTF2" "" OTF2_VERSION_BUGFIX_R "${OTF2_VERSION_BUGFIX_DEF}")
string(REGEX MATCH "[0-9]+" OTF2_VERSION_BUGFIX "${OTF2_VERSION_BUGFIX_R}")
# Specify Otter install location
install(TARGETS otter-serial LIBRARY DESTINATION lib PUBLIC_HEADER DESTINATION include/otter)

message(STATUS "Using OTF2 v${OTF2_VERSION_MAJOR}.${OTF2_VERSION_MINOR}.${OTF2_VERSION_BUGFIX}")
# Configure version header
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/include/otter/otter-version.h.in
${CMAKE_CURRENT_SOURCE_DIR}/include/otter/otter-version.h
)

if(NOT "${OTF2_VERSION_MAJOR}.${OTF2_VERSION_MINOR}" STREQUAL "2.3")
message(FATAL_ERROR "Otter requires OTF2 v2.3")
# Link to dependencies
target_link_libraries(otter-serial pthread)
target_link_libraries(otter-serial otf2)
# Add library directory for OTF2 if it was specified
if(DEFINED OTF2_INSTALL_DIR)
target_link_libraries(otter-serial -L${OTF2_INSTALL_DIR}/lib)
endif()

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# # # Build examples for demonstrating Otter # # # # # # # # # # # # # # #

message(STATUS "Detecting examples")
if (WITH_EXAMPLES)
message(STATUS "Adding examples")
add_subdirectory(src/otter/examples)
endif()

Expand Down
Loading