Skip to content

Commit e24e546

Browse files
committed
f
1 parent d2e1726 commit e24e546

File tree

3 files changed

+70
-30
lines changed

3 files changed

+70
-30
lines changed

CMakeLists.txt

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
1+
option(TARGET_STM "Build for STM32F0 using ARM toolchain" OFF)
2+
13
cmake_minimum_required(VERSION 3.14)
24
project(MotorControllerLib)
35

46
set(CMAKE_CXX_STANDARD 17)
57
set(CMAKE_CXX_STANDARD_REQUIRED ON)
68

9+
if(TARGET_STM)
10+
message(STATUS "Configuring build for STM32F0")
11+
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/cmake/arm-gcc-toolchain.cmake")
12+
set(CMAKE_CXX_STANDARD 17)
13+
else()
14+
message(STATUS "Configuring build for native Linux")
15+
set(CMAKE_CXX_STANDARD 17)
16+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
17+
endif()
18+
719
# === Library Target ===
820
add_library(Odrive STATIC
921
src/lib.cpp
@@ -17,34 +29,37 @@ install(TARGETS Odrive
1729

1830
install(DIRECTORY inc/ DESTINATION include)
1931

20-
# === Enable Testing ===
21-
include(CTest) # enables BUILD_TESTING option
22-
if(BUILD_TESTING)
32+
if(NOT CMAKE_CROSSCOMPILING)
33+
# === Enable Testing ===
34+
include(CTest) # enables BUILD_TESTING option
35+
if(BUILD_TESTING)
2336

24-
# Fetch GoogleTest
25-
include(FetchContent)
26-
FetchContent_Declare(
27-
googletest
28-
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
29-
)
30-
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
31-
FetchContent_MakeAvailable(googletest)
37+
# Fetch GoogleTest
38+
include(FetchContent)
39+
FetchContent_Declare(
40+
googletest
41+
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
42+
)
43+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
44+
FetchContent_MakeAvailable(googletest)
3245

33-
# === Test Executable ===
34-
add_executable(utils_test
35-
test/test_can_header.cpp
36-
test/test_can_msg.cpp
37-
)
46+
# === Test Executable ===
47+
add_executable(utils_test
48+
test/test_can_header.cpp
49+
test/test_can_msg.cpp
50+
)
3851

39-
target_include_directories(utils_test PRIVATE ${CMAKE_SOURCE_DIR}/inc)
52+
target_include_directories(utils_test PRIVATE ${CMAKE_SOURCE_DIR}/inc)
4053

41-
target_link_libraries(utils_test
42-
PRIVATE
43-
Odrive # <-- your library
44-
GTest::gtest_main
45-
)
54+
target_link_libraries(utils_test
55+
PRIVATE
56+
Odrive # <-- your library
57+
GTest::gtest_main
58+
)
4659

47-
include(GoogleTest)
48-
gtest_discover_tests(utils_test)
60+
include(GoogleTest)
61+
gtest_discover_tests(utils_test)
4962

50-
endif()
63+
endif()
64+
65+
endif()

README.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,25 @@ class Logging {
8383
# Compile Library and UnitTest
8484

8585
```bash
86+
# Linux Target
87+
# Option 1:
8688
mkdir build && cd build
87-
8889
cmake .. && cd ..
90+
make
8991

90-
# Create build folder based on CMakeLists.txt
91-
# Install Location to your application
92+
# Option 2:
9293
cmake -B build -DCMAKE_INSTALL_PREFIX=lib -DBUILD_TESTING=OFF
93-
9494
cmake --build build
95-
9695
cmake --install build
9796
```
9897

98+
```cpp
99+
# STM Target
100+
cmake -B build_stm -DCMAKE_INSTALL_PREFIX=lib_stm -DBUILD_TESTING=OFF -DTARGET_STM=ON
101+
cmake --build build_stm
102+
cmake --install build_stm
103+
```
104+
99105
# Testing and Validation
100106

101107
```bash

cmake/arm-gcc-toolchain.cmake

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Set compiler
2+
set(CMAKE_SYSTEM_NAME Generic)
3+
set(CMAKE_SYSTEM_PROCESSOR cortex-m0)
4+
5+
# Specify cross compiler
6+
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
7+
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
8+
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
9+
10+
# No standard C library, no OS
11+
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
12+
set(CMAKE_EXE_LINKER_FLAGS_INIT "")
13+
set(CMAKE_C_FLAGS_INIT "-mcpu=cortex-m0 -mthumb -mfloat-abi=soft -fno-exceptions -ffunction-sections -fdata-sections")
14+
set(CMAKE_CXX_FLAGS_INIT "${CMAKE_C_FLAGS_INIT} -fno-rtti")
15+
set(CMAKE_ASM_FLAGS_INIT "-mcpu=cortex-m0 -mthumb")
16+
17+
# Prevent default CMake stdlib linkage
18+
set(CMAKE_CXX_STANDARD_LIBRARIES "")
19+
set(CMAKE_C_STANDARD_LIBRARIES "")

0 commit comments

Comments
 (0)