Skip to content

Commit 3f610d0

Browse files
authored
Implemented install and enabled basic tests for standalone bindings (#1)
1 parent f95ddf1 commit 3f610d0

92 files changed

Lines changed: 3193 additions & 35 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ unset(__C_BINDINGS_VERSION)
66

77
list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
88

9-
#include (bindings)
9+
include(CTest)
10+
11+
include(bindings)
1012

1113
if (BUILD_TESTING)
1214
add_subdirectory(tests)
1315
endif()
1416

15-
#include(export)
17+
include(export)

cmake/bindings.cmake

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
function(generate_gt_bindings)
2-
set(BINDINGS_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src)
3-
set(BINDINGS_CMAKE_DIR ${CMAKE_SOURCE_DIR}/cmake/)
2+
set(BINDINGS_SOURCE_DIR ${PROJECT_SOURCE_DIR}/src)
3+
set(BINDINGS_CMAKE_DIR ${PROJECT_SOURCE_DIR}/cmake)
4+
set(BINDINGS_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
45
configure_file(cmake/gt_bindings.cmake.in
56
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/bindings_for_build/gt_bindings.cmake
67
@ONLY)
8+
unset(BINDINGS_SOURCE_DIR)
9+
unset(BINDINGS_CMAKE_DIR)
10+
unset(BINDINGS_INCLUDE_DIR)
711
endfunction()
812

913
generate_gt_bindings()

cmake/export.cmake

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# TODO export package
2+
3+
#include(GNUInstallDirs)
4+
5+
# install(FILES src/dotprod.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dotprod)
6+
7+
# install(EXPORT dotprod-targets
8+
# FILE dotprod-targets.cmake
9+
# NAMESPACE Dotprod::
10+
# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake
11+
# )
12+
13+
include(CMakePackageConfigHelpers)
14+
15+
write_basic_package_version_file(gt_c_bindings-config-version.cmake
16+
VERSION ${PROJECT_VERSION}
17+
COMPATIBILITY SameMajorVersion
18+
)
19+
20+
set(gt_c_bindings_MODULE_PATH lib/cmake)
21+
set(gt_c_bindings_SOURCES_PATH src)
22+
set(gt_c_bindings_INCLUDE_PATH include)
23+
24+
configure_package_config_file(cmake/gt_c_bindings-config.cmake.in
25+
${CMAKE_CURRENT_BINARY_DIR}/gt_c_bindings-config.cmake
26+
PATH_VARS gt_c_bindings_MODULE_PATH gt_c_bindings_SOURCES_PATH gt_c_bindings_INCLUDE_PATH
27+
INSTALL_DESTINATION lib/cmake
28+
)
29+
30+
install(
31+
FILES
32+
${CMAKE_CURRENT_BINARY_DIR}/gt_c_bindings-config.cmake
33+
${CMAKE_CURRENT_BINARY_DIR}/gt_c_bindings-config-version.cmake
34+
DESTINATION lib/cmake
35+
)
36+
37+
set(BINDINGS_CMAKE_DIR "\${gt_c_bindings_MODULE_PATH}") #TODO refactor the variable names gt_c_bindings_MODULE_PATH, etc.
38+
set(BINDINGS_SOURCE_DIR "\${gt_c_bindings_SOURCES_PATH}")
39+
set(BINDINGS_INCLUDE_DIR "\${gt_c_bindings_INCLUDE_PATH}")
40+
message(STATUS "${BINDINGS_INCLUDE_PATH}")
41+
configure_file(cmake/gt_bindings.cmake.in
42+
${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/build-install/lib/cmake/gt_bindings.cmake
43+
@ONLY)
44+
45+
set(CMAKE_SOURCES
46+
"${PROJECT_SOURCE_DIR}/cmake/gt_bindings_generate.cmake"
47+
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/build-install/lib/cmake/gt_bindings.cmake"
48+
)
49+
set(CBINDINGS_SOURCES
50+
"${PROJECT_SOURCE_DIR}/src/c_bindings/generator.cpp"
51+
"${PROJECT_SOURCE_DIR}/src/c_bindings/generator_main.cpp"
52+
"${PROJECT_SOURCE_DIR}/src/c_bindings/array_descriptor.f90"
53+
"${PROJECT_SOURCE_DIR}/src/c_bindings/handle.f90"
54+
"${PROJECT_SOURCE_DIR}/src/c_bindings/handle.cpp"
55+
)
56+
57+
install(DIRECTORY include/ DESTINATION include)
58+
install(FILES ${CMAKE_SOURCES} DESTINATION "lib/cmake")
59+
install(FILES ${CBINDINGS_SOURCES} DESTINATION "src/c_bindings")

cmake/gt_bindings.cmake.in

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ option(GT_ENABLE_BINDINGS_GENERATION "If turned off, bindings will not be genera
3131

3232
set(BINDINGS_SOURCE_DIR @BINDINGS_SOURCE_DIR@)
3333
set(BINDINGS_CMAKE_DIR @BINDINGS_CMAKE_DIR@)
34+
set(BINDINGS_INCLUDE_DIR @BINDINGS_INCLUDE_DIR@)
3435

3536
add_library(c_bindings_generator ${BINDINGS_SOURCE_DIR}/c_bindings/generator.cpp)
36-
target_link_libraries(c_bindings_generator GridTools::gridtools)
37+
# PUBLIC to make export.hpp available in the sources passed to add_bindings_library()
38+
target_include_directories(c_bindings_generator PUBLIC ${BINDINGS_INCLUDE_DIR})
3739

3840
add_library(c_bindings_handle ${BINDINGS_SOURCE_DIR}/c_bindings/handle.cpp)
39-
target_link_libraries(c_bindings_handle GridTools::gridtools)
41+
target_include_directories(c_bindings_handle PRIVATE ${BINDINGS_INCLUDE_DIR})
4042

4143
# gt_enable_bindings_library_fortran()
4244
#
@@ -88,6 +90,7 @@ macro(gt_add_bindings_library target_name)
8890

8991
add_library(${target_name} ${ARG_SOURCES})
9092
target_link_libraries(${target_name} PRIVATE c_bindings_generator)
93+
# target_include_directories(${target_name} PRIVATE ${PROJECT_SOURCE_DIR}/include) #TODO probably wrong
9194

9295
if(GT_ENABLE_BINDINGS_GENERATION)
9396
# generator
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
@PACKAGE_INIT@
2+
3+
get_filename_component(GT_C_BINDINGS_CONFIG_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
4+
5+
message(STATUS "GridTools C Bindings version @PROJECT_VERSION@ found at ${GT_C_BINDINGS_CONFIG_CMAKE_DIR}")
6+
7+
set_and_check(gt_c_bindings_MODULE_PATH @PACKAGE_gt_c_bindings_MODULE_PATH@)
8+
set_and_check(gt_c_bindings_SOURCES_PATH @PACKAGE_gt_c_bindings_SOURCES_PATH@)
9+
set_and_check(gt_c_bindings_INCLUDE_PATH @PACKAGE_gt_c_bindings_INCLUDE_PATH@)

example/simple/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
simple.f90
2+
simple.h
3+

example/simple/CMakeLists.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
cmake_minimum_required(VERSION 3.12.4) #TODO replace with generated version
2+
3+
project(simple_example LANGUAGES CXX C Fortran)
4+
5+
find_package(gt_c_bindings)
6+
7+
# 3) find installed GridTools version
8+
find_package(gt_c_bindings)
9+
# @GridTools_VERSION@ REQUIRED
10+
# HINTS @CMAKE_INSTALL_PREFIX@/lib/cmake)
11+
# 4) extend the CMake module path such that bindings generator can be include within CMake
12+
list(APPEND CMAKE_MODULE_PATH "${gt_c_bindings_MODULE_PATH}")
13+
14+
# 5) include c bindings module
15+
include(gt_bindings)
16+
17+
gt_add_bindings_library(simple SOURCES simple.cpp)
18+
# target_link_libraries(simple PRIVATE gt_c_bindings::gt_c_bindings)
19+
20+
add_executable(driver driver.f90)
21+
target_link_libraries(driver simple_fortran)

example/simple/driver.f90

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
! GridTools
2+
!
3+
! Copyright (c) 2014-2019, ETH Zurich
4+
! All rights reserved.
5+
!
6+
! Please, refer to the LICENSE file in the root directory.
7+
! SPDX-License-Identifier: BSD-3-Clause
8+
9+
program main
10+
use iso_c_binding
11+
use gt_handle
12+
use simple
13+
implicit none
14+
integer, parameter :: i = 9
15+
16+
call print_number_from_cpp(i)
17+
18+
end

example/simple/simple.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* GridTools
3+
*
4+
* Copyright (c) 2014-2019, ETH Zurich
5+
* All rights reserved.
6+
*
7+
* Please, refer to the LICENSE file in the root directory.
8+
* SPDX-License-Identifier: BSD-3-Clause
9+
*/
10+
11+
#include <c_bindings/export.hpp>
12+
#include <iostream>
13+
14+
// In this example, we demonstrate how the c_bindings library can be used to export functions to C and Fortran.
15+
16+
namespace {
17+
void print_number(int i) {
18+
std::cout << "Printing from C++: " << i << std::endl;
19+
}
20+
21+
GT_EXPORT_BINDING_1(print_number_from_cpp, print_number);
22+
} // namespace
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* GridTools
3+
*
4+
* Copyright (c) 2014-2019, ETH Zurich
5+
* All rights reserved.
6+
*
7+
* Please, refer to the LICENSE file in the root directory.
8+
* SPDX-License-Identifier: BSD-3-Clause
9+
*/
10+
11+
#pragma once
12+
13+
#include <stdbool.h>
14+
15+
enum gt_fortran_array_kind {
16+
gt_fk_Bool,
17+
gt_fk_Int,
18+
gt_fk_Short,
19+
gt_fk_Long,
20+
gt_fk_LongLong,
21+
gt_fk_Float,
22+
gt_fk_Double,
23+
gt_fk_LongDouble,
24+
gt_fk_SignedChar
25+
};
26+
typedef enum gt_fortran_array_kind gt_fortran_array_kind;
27+
28+
struct gt_fortran_array_descriptor {
29+
gt_fortran_array_kind type;
30+
int rank;
31+
int dims[7];
32+
void *data;
33+
bool is_acc_present;
34+
// TODO: add support for strides, bounds end type gt_fortran_array_descriptor
35+
};
36+
typedef struct gt_fortran_array_descriptor gt_fortran_array_descriptor;

0 commit comments

Comments
 (0)