Skip to content

Commit 71a6546

Browse files
author
Tobias Löw
committed
version 1.5
1 parent 4ed5f9f commit 71a6546

File tree

104 files changed

+16599
-10517
lines changed

Some content is hidden

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

104 files changed

+16599
-10517
lines changed

.gitlab-ci.yml

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
default:
2-
tags:
3-
- gitlab-org-docker
42
image: docker:24.0.5
53
services:
64
- docker:24.0.5-dind
@@ -14,10 +12,21 @@ stages:
1412
variables:
1513
IMAGES_PREFIX: $CI_REGISTRY_IMAGE/env_
1614
DOCKERFILE: ".github/docker/Dockerfile"
15+
RUNNER_TAG: "gitlab-org-docker"
16+
17+
18+
workflow:
19+
rules:
20+
- if: $CI_SERVER_HOST == "gitlab.idiap.ch"
21+
variables:
22+
RUNNER_TAG: "docker"
23+
- when: always
1724

1825

1926
build-docker-images-gcc:
2027
stage: docker-images
28+
tags:
29+
- $RUNNER_TAG
2130
variables:
2231
COMPILER: "gcc"
2332
script:
@@ -35,6 +44,8 @@ build-docker-images-gcc:
3544

3645
build-docker-images-clang:
3746
stage: docker-images
47+
tags:
48+
- $RUNNER_TAG
3849
variables:
3950
COMPILER: "clang"
4051
script:
@@ -52,6 +63,8 @@ build-docker-images-clang:
5263

5364
build-gafro:
5465
stage: build
66+
tags:
67+
- $RUNNER_TAG
5568
image:
5669
name: ${IMAGES_PREFIX}${COMPILER}:${COMPILER_VERSION}
5770
script:

CMakeLists.txt

Lines changed: 49 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,17 @@ endif()
88
project(gafro)
99

1010
set(${PROJECT_NAME}_VERSION_MAJOR 1)
11-
set(${PROJECT_NAME}_VERSION_MINOR 0)
11+
set(${PROJECT_NAME}_VERSION_MINOR 5)
1212
set(${PROJECT_NAME}_VERSION_PATCH 0)
1313

1414
set(${PROJECT_NAME}_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}")
1515

16-
set(CMAKE_CXX_STANDARD 20)
17-
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
18-
1916
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
2017
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
2118

22-
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
23-
2419
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
2520

26-
set(GAFRO_PREFIX_PACKAGE share/${CMAKE_PROJECT_NAME}/cmake)
21+
set(GAFRO_PREFIX_PACKAGE share/${PROJECT_NAME}/cmake)
2722
set(GAFRO_PREFIX_INCLUDE include/gafro)
2823

2924
find_package(Eigen3 3.4 REQUIRED)
@@ -33,36 +28,51 @@ add_subdirectory(src/${PROJECT_NAME}_control)
3328

3429
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
3530
add_subdirectory(tests)
36-
37-
export(EXPORT ${CMAKE_PROJECT_NAME}-config-targets
38-
FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-config-targets.cmake"
39-
NAMESPACE gafro::
40-
)
41-
42-
install(EXPORT ${CMAKE_PROJECT_NAME}-config-targets
43-
FILE ${CMAKE_PROJECT_NAME}-config-targets.cmake
44-
NAMESPACE gafro::
45-
DESTINATION ${GAFRO_PREFIX_PACKAGE}
46-
)
47-
48-
include(CMakePackageConfigHelpers)
49-
write_basic_package_version_file(
50-
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-config-version.cmake"
51-
VERSION ${${PROJECT_NAME}_VERSION}
52-
COMPATIBILITY AnyNewerVersion
53-
)
54-
55-
configure_file(cmake/${CMAKE_PROJECT_NAME}-config.cmake "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-config.cmake" COPYONLY)
56-
configure_file(cmake/${CMAKE_PROJECT_NAME}-packages.cmake "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-packages.cmake")
57-
58-
install(
59-
FILES
60-
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-config.cmake"
61-
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-config-version.cmake"
62-
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-packages.cmake"
63-
DESTINATION
64-
${GAFRO_PREFIX_PACKAGE}
65-
COMPONENT
66-
Devel
67-
)
6831
endif()
32+
33+
include(CMakePackageConfigHelpers)
34+
35+
configure_package_config_file(
36+
cmake/gafro-config.cmake
37+
"${PROJECT_BINARY_DIR}/gafro-config.cmake"
38+
INSTALL_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/"
39+
)
40+
41+
write_basic_package_version_file(
42+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
43+
VERSION ${${PROJECT_NAME}_VERSION}
44+
COMPATIBILITY AnyNewerVersion
45+
)
46+
47+
configure_file(cmake/${PROJECT_NAME}-packages.cmake "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-packages.cmake")
48+
49+
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}-config-targets
50+
LIBRARY DESTINATION lib/${PROJECT_NAME}/
51+
ARCHIVE DESTINATION lib/${PROJECT_NAME}/
52+
RUNTIME DESTINATION lib/${PROJECT_NAME}/
53+
INCLUDES DESTINATION ${GAFRO_PREFIX_INCLUDE}/
54+
)
55+
56+
install(
57+
FILES
58+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
59+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
60+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-packages.cmake"
61+
DESTINATION
62+
${GAFRO_PREFIX_PACKAGE}
63+
COMPONENT
64+
Devel
65+
)
66+
67+
install(EXPORT ${PROJECT_NAME}-config-targets
68+
FILE ${PROJECT_NAME}-config-targets.cmake
69+
NAMESPACE gafro::
70+
DESTINATION ${GAFRO_PREFIX_PACKAGE}
71+
)
72+
73+
export(EXPORT ${PROJECT_NAME}-config-targets
74+
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-targets.cmake"
75+
NAMESPACE gafro::
76+
)
77+
78+
export(PACKAGE gafro)

cmake/gafro-config.cmake

Lines changed: 8 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,12 @@
1-
include("${CMAKE_CURRENT_LIST_DIR}/gafro-packages.cmake")
2-
include("${CMAKE_CURRENT_LIST_DIR}/gafro-config-targets.cmake")
1+
@PACKAGE_INIT@
32

4-
function(register_target TARGET INCLUDES_VAR LIBRARIES_VAR)
5-
if(TARGET ${TARGET})
6-
# Resolve include directories
7-
get_target_property(TARGET_INCLUDE_DIRS ${TARGET} INTERFACE_INCLUDE_DIRECTORIES)
8-
set(TARGET_INCLUDE_DIRS "${TARGET_INCLUDE_DIRS}" CACHE PATH "${TARGET} include directories")
3+
get_filename_component(gafro_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
94

10-
# Append to existing include directories
11-
list(APPEND ${INCLUDES_VAR} ${TARGET_INCLUDE_DIRS})
12-
list(REMOVE_DUPLICATES ${INCLUDES_VAR})
13-
# Propagate to caller
14-
set(${INCLUDES_VAR} ${${INCLUDES_VAR}} PARENT_SCOPE)
5+
if(NOT TARGET gafro::gafro)
6+
include("${gafro_CMAKE_DIR}/gafro-config-targets.cmake")
7+
include("${gafro_CMAKE_DIR}/gafro-packages.cmake")
8+
endif()
159

16-
# Resolve release and debug libraries.
17-
get_target_property(TARGET_LIBRARY_DEBUG ${TARGET} IMPORTED_LOCATION_DEBUG)
18-
get_target_property(TARGET_LIBRARY_RELEASE ${TARGET} IMPORTED_LOCATION_RELEASE)
10+
get_target_property(gafro_INCLUDE_DIRS gafro::gafro INTERFACE_INCLUDE_DIRECTORIES)
1911

20-
# For non-Windows, substitude RelWithDebInfo for release library. Can't for Windows as it
21-
# links the debug runtime so is more optimised debug than release with debug info.
22-
if(NOT WIN32 AND NOT TARGET_LIBRARY_RELEASE)
23-
get_target_property(TARGET_LIBRARY_RELEASE ${TARGET} IMPORTED_LOCATION_REL_WITH_DEB_INFO)
24-
endif(NOT WIN32 AND NOT TARGET_LIBRARY_RELEASE)
25-
26-
# Try with no config specified.
27-
if(NOT TARGET_LIBRARY_RELEASE)
28-
get_target_property(TARGET_LIBRARY_RELEASE ${TARGET} IMPORTED_LOCATION)
29-
30-
if(NOT TARGET_LIBRARY_RELEASE)
31-
get_target_property(TARGET_LIBRARY_RELEASE ${TARGET} IMPORTED_LOCATION_NOCONFIG)
32-
endif(NOT TARGET_LIBRARY_RELEASE)
33-
endif(NOT TARGET_LIBRARY_RELEASE)
34-
35-
# Get any supporting libraries for the target.
36-
get_target_property(TARGET_SUPPORT_LIBRARIES ${TARGET} INTERFACE_LINK_LIBRARIES)
37-
38-
# Extent the library list.
39-
set(TARGET_LIBRARIES)
40-
if(TARGET_LIBRARY_DEBUG)
41-
list(APPEND TARGET_LIBRARIES debug "${TARGET_LIBRARY_DEBUG}" optimized "${TARGET_LIBRARY_RELEASE}")
42-
else(TARGET_LIBRARY_DEBUG)
43-
44-
set(TARGET_LIBRARIES "${TARGET_LIBRARY_RELEASE}")
45-
endif(TARGET_LIBRARY_DEBUG)
46-
47-
list(APPEND ${LIBRARIES_VAR} ${TARGET_LIBRARIES})
48-
if(TARGET_SUPPORT_LIBRARIES)
49-
list(APPEND ${LIBRARIES_VAR} ${TARGET_SUPPORT_LIBRARIES})
50-
endif(TARGET_SUPPORT_LIBRARIES)
51-
52-
# Export to caller.
53-
set(${LIBRARIES_VAR} ${${LIBRARIES_VAR}} PARENT_SCOPE)
54-
55-
endif(TARGET ${TARGET})
56-
endfunction(register_target)
57-
58-
register_target(gafro::gafro gafro_INCLUDE_DIRS gafro_LIBRARIES)
59-
register_target(gafro::gafro_control gafro_control_INCLUDE_DIRS gafro_control_LIBRARIES)
12+
check_required_components(gafro)

cmake/gafro-packages.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
find_package(Eigen3 3.4 REQUIRED)
2-
find_package(orwell)
2+
find_package(orwell QUIET)

package.xml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
<?xml version="1.0"?>
22
<package format="2">
33
<name>gafro</name>
4-
<version>1.0.0</version>
4+
<version>1.5.0</version>
55
<description>The gafro package</description>
66

7-
<maintainer email="tobias.loew@idiap.ch">Tobias Löw</maintainer>
8-
<author email="tobias.loew@idiap.ch">Tobias Löw</author>
7+
<maintainer email="tobias.loew@gafro.ch">Tobias Löw</maintainer>
8+
<author email="tobias.loew@gafro.ch">Tobias Löw</author>
99

1010
<license>GPLv3</license>
1111

12+
<build_depend>orwell</build_depend>
13+
<build_depend>sackmesser</build_depend>
14+
1215
<export>
1316
<build_type>cmake</build_type>
1417
</export>

src/gafro/CMakeLists.txt

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,50 @@
11
configure_file(${CMAKE_CURRENT_LIST_DIR}/gafro_package_config.h.in "${CMAKE_CURRENT_BINARY_DIR}/gafro_package_config.hpp")
22

3-
add_library(${PROJECT_NAME})
4-
3+
add_library(gafro INTERFACE)
4+
add_library(gafro::gafro ALIAS gafro)
55

66
include(CheckCXXCompilerFlag)
77
check_cxx_compiler_flag("-march=native" MARCH_NATIVE_SUPPORTED)
88
check_cxx_compiler_flag("-msse4" MSSE2_SUPPORTED)
99

1010
if (MARCH_NATIVE_SUPPORTED)
11-
target_compile_options(${PROJECT_NAME} PUBLIC "-march=native")
11+
target_compile_options(${PROJECT_NAME} INTERFACE "-march=native")
1212
endif()
1313

1414
if (MSSE2_SUPPORTED)
15-
target_compile_options(${PROJECT_NAME} PUBLIC "-msse4")
15+
target_compile_options(${PROJECT_NAME} INTERFACE "-msse4")
1616
endif()
1717

1818

19-
target_compile_options(${PROJECT_NAME} PUBLIC "-O3")
20-
target_compile_options(${PROJECT_NAME} PUBLIC "-Wall")
21-
target_compile_options(${PROJECT_NAME} PUBLIC "-Wpedantic")
22-
# target_compile_options(${PROJECT_NAME} PUBLIC "-Werror")
23-
target_compile_options(${PROJECT_NAME} PUBLIC "-fno-builtin")
19+
target_compile_options(${PROJECT_NAME} INTERFACE "-O3")
20+
target_compile_options(${PROJECT_NAME} INTERFACE "-Wall")
21+
target_compile_options(${PROJECT_NAME} INTERFACE "-Wpedantic")
22+
# target_compile_options(${PROJECT_NAME} INTERFACE "-Werror")
23+
target_compile_options(${PROJECT_NAME} INTERFACE "-fno-builtin")
24+
25+
target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_20)
2426

2527
add_subdirectory(algebra)
2628
add_subdirectory(physics)
2729
add_subdirectory(robot)
2830
add_subdirectory(optimization)
2931

30-
include(GenerateExportHeader)
31-
generate_export_header(${PROJECT_NAME})
32+
# include(GenerateExportHeader)
33+
# generate_export_header(${PROJECT_NAME})
3234

3335
set_target_properties(${PROJECT_NAME} PROPERTIES
34-
VERSION ${${PROJECT_NAME}_VERSION}
35-
SOVERSION 1
36-
INTERFACE_GAFRO_MAJOR_VERSION 1
36+
INTERFACE_VERSION ${${PROJECT_NAME}_VERSION}
3737
)
3838

3939
target_include_directories(${PROJECT_NAME}
40-
PUBLIC
40+
INTERFACE
4141
$<INSTALL_INTERFACE:${${PROJECT_NAME}_PREFIX_INCLUDE}>
4242
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>/..
4343
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
4444

4545
$<BUILD_INTERFACE:${EIGEN3_INCLUDE_DIRS}>
4646
$<INSTALL_INTERFACE:${EIGEN3_INCLUDE_DIRS}>
4747

48-
PRIVATE
4948
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>/..
5049
)
5150

@@ -54,20 +53,13 @@ target_include_directories(${PROJECT_NAME}
5453
)
5554

5655
target_link_libraries(${PROJECT_NAME}
57-
PUBLIC
56+
INTERFACE
5857
$<BUILD_INTERFACE:${EIGEN3_LIBRARIES}>
5958
$<INSTALL_INTERFACE:${EIGEN3_LIBRARIES}>
60-
PRIVATE
6159
)
6260

6361
# Only do that when using the gafro source code directly, not from a submodule
64-
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
65-
install(TARGETS ${PROJECT_NAME} EXPORT ${CMAKE_PROJECT_NAME}-config-targets
66-
LIBRARY DESTINATION lib/${PROJECT_NAME}/
67-
ARCHIVE DESTINATION lib/${PROJECT_NAME}/
68-
RUNTIME DESTINATION lib/${PROJECT_NAME}/
69-
INCLUDES DESTINATION ${GAFRO_PREFIX_INCLUDE}/
70-
)
62+
# if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
7163

7264
install(
7365
FILES
@@ -82,4 +74,4 @@ if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
8274
COMPONENT
8375
Devel
8476
)
85-
endif()
77+
# endif()

src/gafro/algebra.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <gafro/algebra/AbstractExpression.hxx>
2828
#include <gafro/algebra/CommutatorProduct.hpp>
2929
#include <gafro/algebra/GeometricProduct.hpp>
30+
#include <gafro/algebra/Grade.hpp>
3031
#include <gafro/algebra/InnerProduct.hpp>
3132
#include <gafro/algebra/OuterProduct.hpp>
3233
#include <gafro/algebra/Reflection.hpp>
@@ -44,11 +45,16 @@
4445
#include <gafro/algebra/cga/Point.hxx>
4546
#include <gafro/algebra/cga/PointPair.hxx>
4647
#include <gafro/algebra/cga/Sphere.hxx>
48+
#include <gafro/algebra/cga/TangentVector.hxx>
4749
#include <gafro/algebra/cga/Vector.hxx>
4850
//
51+
#include <gafro/algebra/cga/ConformalTransformation.hpp>
52+
#include <gafro/algebra/cga/Dilator.hpp>
4953
#include <gafro/algebra/cga/Motor.hxx>
5054
#include <gafro/algebra/cga/MotorGenerator.hxx>
5155
#include <gafro/algebra/cga/Rotor.hxx>
5256
#include <gafro/algebra/cga/RotorGenerator.hxx>
57+
#include <gafro/algebra/cga/SimilarityTransformation.hpp>
5358
#include <gafro/algebra/cga/Translator.hxx>
54-
#include <gafro/algebra/cga/TranslatorGenerator.hxx>
59+
#include <gafro/algebra/cga/TranslatorGenerator.hxx>
60+
#include <gafro/algebra/cga/Transversion.hpp>

src/gafro/algebra/Algebra.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ namespace gafro
6363
template <class T, int... index>
6464
class Multivector;
6565

66+
private:
67+
template <class T, int grade>
68+
class GradeConstructor;
69+
70+
public:
71+
template <class T, int grade>
72+
using Grade = typename GradeConstructor<T, grade>::Type;
73+
6674
constexpr static int dim = math::pow2<M::dim>();
6775

6876
class BladeBitmap

0 commit comments

Comments
 (0)