Skip to content

Commit ff3d94c

Browse files
committed
Add Cmake
1 parent daa5571 commit ff3d94c

File tree

11 files changed

+138
-37
lines changed

11 files changed

+138
-37
lines changed

.github/workflows/ci.yml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ jobs:
2828
python3 \
2929
ca-certificates \
3030
clang-format-19 \
31-
cpplint
31+
cpplint \
32+
libeigen3-dev \
33+
libgtest-dev
34+
3235
3336
- name: Set up Bazel 8
3437
uses: bazel-contrib/[email protected]
@@ -59,3 +62,11 @@ jobs:
5962
run: |
6063
bazel run simple
6164
bazel run constrained_simple
65+
66+
- name: Configure and Build with CMake
67+
run: |
68+
mkdir -p build
69+
cd build
70+
cmake .. -DCMAKE_BUILD_TYPE=Release
71+
cmake --build .
72+
ctest --output-on-failure

CMakeLists.txt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
cmake_minimum_required(VERSION 3.12)
2+
project(CppNumericalSolvers VERSION 1.0.0 LANGUAGES CXX)
3+
4+
add_library(CppNumericalSolvers INTERFACE)
5+
6+
target_include_directories(CppNumericalSolvers
7+
INTERFACE
8+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
9+
$<INSTALL_INTERFACE:include>
10+
)
11+
12+
target_compile_features(CppNumericalSolvers INTERFACE cxx_std_11)
13+
14+
# Install the target
15+
install(TARGETS CppNumericalSolvers
16+
EXPORT CppNumericalSolversTargets
17+
INCLUDES DESTINATION include
18+
)
19+
20+
# Install headers
21+
install(DIRECTORY include/ DESTINATION include)
22+
23+
# Install the CMake package configuration
24+
install(EXPORT CppNumericalSolversTargets
25+
FILE CppNumericalSolversTargets.cmake
26+
NAMESPACE CppNumericalSolvers::
27+
DESTINATION lib/cmake/CppNumericalSolvers
28+
)
29+
30+
# Generate a Config file for find_package()
31+
include(CMakePackageConfigHelpers)
32+
33+
configure_package_config_file(
34+
${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
35+
${CMAKE_CURRENT_BINARY_DIR}/CppNumericalSolversConfig.cmake
36+
INSTALL_DESTINATION lib/cmake/CppNumericalSolvers
37+
)
38+
39+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CppNumericalSolversConfig.cmake
40+
DESTINATION lib/cmake/CppNumericalSolvers
41+
)
42+
43+
add_subdirectory(src/examples)
44+
45+
enable_testing()
46+
add_subdirectory(src/test)

Config.cmake.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
@PACKAGE_INIT@
2+
3+
include("${CMAKE_CURRENT_LIST_DIR}/CppNumericalSolversTargets.cmake")
4+

generator.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ def build_example(name, visibility=None):
44
srcs = ["src/examples/"+name+".cc"],
55
copts = ["-std=c++17", "-Wall", "-Wextra"],
66
deps = [
7-
"//include/cppoptlib:cppoptlib",
7+
"//include:cppoptlib",
88
"@eigen//:eigen",
99
]
1010
)
@@ -15,7 +15,7 @@ def build_test(name, visibility=None):
1515
srcs = ["src/test/"+name+".cc"],
1616
copts = ["-Iexternal/gtest/include", "-std=c++17", " -Wall", "-Wextra"],
1717
deps = [
18-
"//include/cppoptlib:cppoptlib",
18+
"//include:cppoptlib",
1919
"@eigen//:eigen",
2020
"@googletest//:gtest_main",
2121
]

include/BUILD

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
cc_library(
2+
name = "cppoptlib",
3+
hdrs = glob([
4+
"cppoptlib/*.h",
5+
"cppoptlib/solver/*.h",
6+
"cppoptlib/linesearch/*.h",
7+
"cppoptlib/utils/*.h",
8+
]),
9+
includes = ["."],
10+
visibility = ["//visibility:public"],
11+
)

include/cppoptlib/BUILD

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/examples/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Function to build examples
2+
function(build_example name)
3+
add_executable(${name} ${name}.cc)
4+
target_compile_options(${name} PRIVATE -std=c++17 -Wall -Wextra)
5+
target_link_libraries(${name} PRIVATE CppNumericalSolvers Eigen3::Eigen)
6+
endfunction()
7+
8+
# Find Eigen and GoogleTest
9+
find_package(Eigen3 REQUIRED)
10+
find_package(GTest REQUIRED)
11+
12+
# Build examples
13+
build_example(simple)
14+
build_example(constrained_simple)

src/examples/constrained_simple.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
// Copyright 2025, https://github.com/PatWie/CppNumericalSolvers
22
#include <iostream>
33

4-
#include "include/cppoptlib/constrained_function.h"
5-
#include "include/cppoptlib/function.h"
6-
#include "include/cppoptlib/solver/augmented_lagrangian.h"
7-
#include "include/cppoptlib/solver/lbfgs.h"
4+
#include "cppoptlib/constrained_function.h"
5+
#include "cppoptlib/function.h"
6+
#include "cppoptlib/solver/augmented_lagrangian.h"
7+
#include "cppoptlib/solver/lbfgs.h"
88

99
using Function2d = cppoptlib::function::Function<
1010
double, 2, cppoptlib::function::Differentiability::First>;

src/examples/simple.cc

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@
44
#include <limits>
55

66
#include "Eigen/Core"
7-
#include "include/cppoptlib/function.h"
8-
#include "include/cppoptlib/solver/bfgs.h"
9-
#include "include/cppoptlib/solver/conjugated_gradient_descent.h"
10-
#include "include/cppoptlib/solver/gradient_descent.h"
11-
#include "include/cppoptlib/solver/lbfgs.h"
12-
#include "include/cppoptlib/solver/lbfgsb.h"
13-
#include "include/cppoptlib/solver/nelder_mead.h"
14-
#include "include/cppoptlib/solver/newton_descent.h"
15-
#include "include/cppoptlib/utils/derivatives.h"
7+
#include "cppoptlib/function.h"
8+
#include "cppoptlib/solver/bfgs.h"
9+
#include "cppoptlib/solver/conjugated_gradient_descent.h"
10+
#include "cppoptlib/solver/gradient_descent.h"
11+
#include "cppoptlib/solver/lbfgs.h"
12+
#if EIGEN_VERSION_AT_LEAST(3, 4, 0)
13+
#include "cppoptlib/solver/lbfgsb.h"
14+
#endif
15+
#include "cppoptlib/solver/nelder_mead.h"
16+
#include "cppoptlib/solver/newton_descent.h"
17+
#include "cppoptlib/utils/derivatives.h"
1618

1719
using FunctionXd = cppoptlib::function::Function<
1820
double, Eigen::Dynamic, cppoptlib::function::Differentiability::Second>;

src/test/CMakeLists.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Function to build tests
2+
function(build_test name)
3+
add_executable(${name} ${name}.cc)
4+
target_compile_options(${name} PRIVATE -std=c++17 -Wall -Wextra)
5+
target_include_directories(${name} PRIVATE ${GTEST_INCLUDE_DIRS})
6+
target_link_libraries(${name} PRIVATE CppNumericalSolvers Eigen3::Eigen GTest::GTest GTest::Main)
7+
add_test(NAME ${name} COMMAND ${name})
8+
endfunction()
9+
10+
# Find Eigen and GoogleTest
11+
find_package(Eigen3 REQUIRED)
12+
find_package(GTest REQUIRED)
13+
14+
# Build tests
15+
build_test(verify)
16+
17+

0 commit comments

Comments
 (0)