Skip to content

Commit 1f58323

Browse files
Stefan SchoberStefan Schober
authored andcommitted
Merge remote-tracking branch 'refs/remotes/origin/main'
2 parents 2b7bb75 + 759c00f commit 1f58323

File tree

7 files changed

+735
-0
lines changed

7 files changed

+735
-0
lines changed

cmake/qpc_sdk_import.cmake

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# This is a copy of <QPC_SDK_PATH>/3rd-party/cmake/qpc_import.cmake
2+
3+
# This can be dropped into an external project to help locate this SDK
4+
# It should be include()ed prior to project()
5+
message(STATUS "qpc_import.cmake starting...")
6+
7+
if (DEFINED ENV{QPC_SDK_PATH} AND (NOT QPC_SDK_PATH))
8+
set(QPC_SDK_PATH $ENV{QPC_SDK_PATH})
9+
message("Using QPC_SDK_PATH from environment ('${QPC_SDK_PATH}')")
10+
endif ()
11+
12+
if (DEFINED ENV{QPC_FETCH_FROM_GIT} AND (NOT QPC_FETCH_FROM_GIT))
13+
set(QPC_FETCH_FROM_GIT $ENV{QPC_FETCH_FROM_GIT})
14+
message("Using QPC_FETCH_FROM_GIT from environment ('${QPC_FETCH_FROM_GIT}')")
15+
endif ()
16+
17+
if (DEFINED ENV{QPC_FETCH_FROM_GIT_PATH} AND (NOT QPC_FETCH_FROM_GIT_PATH))
18+
set(QPC_FETCH_FROM_GIT_PATH $ENV{QPC_FETCH_FROM_GIT_PATH})
19+
message("Using QPC_FETCH_FROM_GIT_PATH from environment ('${QPC_FETCH_FROM_GIT_PATH}')")
20+
endif ()
21+
22+
if (QPC_FETCH_FROM_GIT AND DEFINED ENV{QPC_URL} AND (NOT QPC_URL))
23+
set(QPC_URL $ENV{QPC_URL})
24+
message("Using QPC_URL from environment ('${QPC_URL}')")
25+
endif ()
26+
27+
if(QPC_FETCH_FROM_GIT AND (NOT QPC_URL))
28+
set(QPC_URL "https://github.com/stefan/qpc.git")
29+
message(STATUS "using QPC_URL ('${QPC_URL}') since not specified")
30+
endif()
31+
32+
set(QPC_SDK_PATH "${QPC_SDK_PATH}" CACHE PATH "Path to the QPC SDK")
33+
set(QPC_URL "${QPC_URL}" CACHE PATH "URL to retrieve the QPC SDK from git")
34+
set(QPC_FETCH_FROM_GIT "${QPC_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
35+
set(QPC_FETCH_FROM_GIT_PATH "${QPC_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
36+
37+
if (NOT QPC_SDK_PATH)
38+
if (QPC_FETCH_FROM_GIT)
39+
include(FetchContent)
40+
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
41+
if (QPC_FETCH_FROM_GIT_PATH)
42+
get_filename_component(FETCHCONTENT_BASE_DIR "${QPC_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
43+
endif ()
44+
# GIT_SUBMODULES_RECURSE was added in 3.17
45+
FetchContent_Declare(
46+
QPC
47+
GIT_REPOSITORY "${QPC_URL}"
48+
GIT_TAG master
49+
GIT_SUBMODULES_RECURSE FALSE
50+
GIT_SHALLOW ON
51+
)
52+
53+
if (NOT QPC)
54+
message("Downloading QPC SDK")
55+
FetchContent_Populate(QPC)
56+
message("QPC source dir = '${qpc_SOURCE_DIR}', QPC binary dir = '${qpc_BINARY_DIR}'")
57+
set(QPC_SDK_PATH ${qpc_SOURCE_DIR})
58+
endif ()
59+
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
60+
else ()
61+
message(FATAL_ERROR
62+
"SDK location was not specified. Please set QPC_SDK_PATH or set QPC_FETCH_FROM_GIT to on to fetch from git."
63+
)
64+
endif ()
65+
endif ()
66+
67+
get_filename_component(QPC_SDK_PATH "${QPC_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
68+
if (NOT EXISTS ${QPC_SDK_PATH})
69+
message(FATAL_ERROR "Directory '${QPC_SDK_PATH}' not found")
70+
endif ()
71+
72+
set(QPC_INIT_CMAKE_FILE ${QPC_SDK_PATH}/qpc_sdk_init.cmake)
73+
if (NOT EXISTS ${QPC_INIT_CMAKE_FILE})
74+
message(FATAL_ERROR "Directory '${QPC_SDK_PATH}' does not appear to contain the QPC SDK")
75+
endif ()
76+
77+
set(QPC_SDK_PATH ${QPC_SDK_PATH} CACHE PATH "Path to the QPC SDK" FORCE)
78+
79+
include(${QPC_INIT_CMAKE_FILE})

cmake/toolchain/tc_armkeil.cmake

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# Append current directory to CMAKE_MODULE_PATH for making device specific cmake modules visible
2+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
3+
4+
# Target definition
5+
set(CMAKE_SYSTEM_NAME Generic)
6+
set(CMAKE_SYSTEM_PROCESSOR arm)
7+
8+
#---------------------------------------------------------------------------------------
9+
# Set toolchain paths
10+
#---------------------------------------------------------------------------------------
11+
set(TOOLCHAIN arm)
12+
13+
if(NOT DEFINED TOOLCHAIN_PREFIX)
14+
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux)
15+
set(TOOLCHAIN_PREFIX "/usr")
16+
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
17+
set(TOOLCHAIN_PREFIX "/usr/local")
18+
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
19+
if($ENV{MINGW_PREFIX} MATCHES "^.*/(mingw|clang)64$")
20+
set(TOOLCHAIN_PREFIX $ENV{MINGW_PREFIX})
21+
# STRING(REGEX REPLACE "^.*/(mingw|clang)64$" "/\\164" TOOLCHAIN_PREFIX $ENV{MINGW_PREFIX})
22+
elseif(EXISTS "C:/Keil")
23+
set(TOOLCHAIN_PREFIX "C:/Keil")
24+
else()
25+
message(STATUS "Please specify the TOOLCHAIN_PREFIX !\n For example: -DTOOLCHAIN_PREFIX=\"C:/Program Files/GNU Tools ARM Embedded\" ")
26+
endif()
27+
else()
28+
set(TOOLCHAIN_PREFIX "/usr")
29+
message(STATUS "No TOOLCHAIN_PREFIX specified, using default: " ${TOOLCHAIN_PREFIX})
30+
endif()
31+
endif()
32+
set(TOOLCHAIN_BIN_DIR ${TOOLCHAIN_PREFIX}/bin)
33+
set(TOOLCHAIN_INC_DIR ${TOOLCHAIN_PREFIX}/${TOOLCHAIN}/include)
34+
set(TOOLCHAIN_LIB_DIR ${TOOLCHAIN_PREFIX}/${TOOLCHAIN}/lib)
35+
36+
# Set system depended extensions
37+
if(WIN32)
38+
set(TOOLCHAIN_EXT ".exe" )
39+
else()
40+
set(TOOLCHAIN_EXT "" )
41+
endif()
42+
43+
# Perform compiler test with static library
44+
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
45+
46+
#---------------------------------------------------------------------------------------
47+
# Set compiler/linker flags
48+
#---------------------------------------------------------------------------------------
49+
50+
# Object build options
51+
# -O0 No optimizations, reduce compilation time and make debugging produce the expected results.
52+
# -mthumb Generat thumb instructions.
53+
# -fno-builtin Do not use built-in functions provided by GCC.
54+
# -Wall Print only standard warnings, for all use Wextra
55+
# -ffunction-sections Place each function item into its own section in the output file.
56+
# -fdata-sections Place each data item into its own section in the output file.
57+
# -fomit-frame-pointer Omit the frame pointer in functions that don’t need one.
58+
# -mabi=aapcs Defines enums to be a variable sized type.
59+
set(OBJECT_GEN_FLAGS "--thumb --gnu --split_sections")
60+
61+
set(CMAKE_C_FLAGS "${OBJECT_GEN_FLAGS} --c99 " CACHE INTERNAL "C Compiler options")
62+
set(CMAKE_CXX_FLAGS "${OBJECT_GEN_FLAGS} --cpp11 " CACHE INTERNAL "C++ Compiler options")
63+
set(CMAKE_ASM_FLAGS "${OBJECT_GEN_FLAGS} " CACHE INTERNAL "ASM Compiler options")
64+
65+
66+
# -Wl,--gc-sections Perform the dead code elimination.
67+
# --specs=nano.specs Link with newlib-nano.
68+
# --specs=nosys.specs No syscalls, provide empty implementations for the POSIX system calls.
69+
set(MAPFILE "${CMAKE_PROJECT_NAME}.map" CACHE INTERNAL "Linker Map File")
70+
set(CMAKE_EXE_LINKER_FLAGS "" CACHE INTERNAL "Linker options")
71+
72+
#---------------------------------------------------------------------------------------
73+
# Set debug/release build configuration Options
74+
#---------------------------------------------------------------------------------------
75+
76+
# Options for DEBUG build
77+
# -Og Enables optimizations that do not interfere with debugging.
78+
# -g Produce debugging information in the operating system’s native format.
79+
set(CMAKE_C_FLAGS_DEBUG "-O0 --debug" CACHE INTERNAL "C Compiler options for debug build type")
80+
set(CMAKE_CXX_FLAGS_DEBUG "-O0 --debug" CACHE INTERNAL "C++ Compiler options for debug build type")
81+
set(CMAKE_ASM_FLAGS_DEBUG "--debug" CACHE INTERNAL "ASM Compiler options for debug build type")
82+
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "--debug" CACHE INTERNAL "Linker options for debug build type")
83+
84+
# Options for RELEASE build
85+
# -Os Optimize for size. -Os enables all -O2 optimizations.
86+
# -flto Runs the standard link-time optimizer.
87+
set(CMAKE_C_FLAGS_RELEASE "-Ospace --no_debug" CACHE INTERNAL "C Compiler options for release build type")
88+
set(CMAKE_CXX_FLAGS_RELEASE "-Ospace --no_debug" CACHE INTERNAL "C++ Compiler options for release build type")
89+
set(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "ASM Compiler options for release build type")
90+
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "--no_debug" CACHE INTERNAL "Linker options for release build type")
91+
# set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-g3 -flto" CACHE INTERNAL "Linker options for release build type")
92+
93+
94+
#---------------------------------------------------------------------------------------
95+
# Set compilers
96+
#---------------------------------------------------------------------------------------
97+
set(CMAKE_C_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}cc${TOOLCHAIN_EXT} CACHE INTERNAL "C Compiler")
98+
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}c++${TOOLCHAIN_EXT} CACHE INTERNAL "C++ Compiler")
99+
set(CMAKE_ASM_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}cc${TOOLCHAIN_EXT} CACHE INTERNAL "ASM Compiler")
100+
101+
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PREFIX}/${${TOOLCHAIN}} ${CMAKE_PREFIX_PATH})
102+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
103+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
104+
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
105+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
106+

cmake/toolchain/tc_gnuarm.cmake

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
# Append current directory to CMAKE_MODULE_PATH for making device specific cmake modules visible
2+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
3+
4+
# Target definition
5+
set(CMAKE_SYSTEM_NAME Generic)
6+
set(CMAKE_SYSTEM_PROCESSOR arm)
7+
8+
#---------------------------------------------------------------------------------------
9+
# Set toolchain paths
10+
#---------------------------------------------------------------------------------------
11+
set(TOOLCHAIN arm-none-eabi)
12+
13+
if(NOT DEFINED TOOLCHAIN_PREFIX)
14+
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux)
15+
set(TOOLCHAIN_PREFIX "/usr")
16+
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
17+
set(TOOLCHAIN_PREFIX "/usr/local")
18+
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
19+
if($ENV{MINGW_PREFIX} MATCHES "^.*/(mingw|clang)64$")
20+
set(TOOLCHAIN_PREFIX $ENV{MINGW_PREFIX})
21+
# STRING(REGEX REPLACE "^.*/(mingw|clang)64$" "/\\164" TOOLCHAIN_PREFIX $ENV{MINGW_PREFIX})
22+
else()
23+
message(STATUS "Please specify the TOOLCHAIN_PREFIX !\n For example: -DTOOLCHAIN_PREFIX=\"C:/Program Files/GNU Tools ARM Embedded\" ")
24+
endif()
25+
else()
26+
set(TOOLCHAIN_PREFIX "/usr")
27+
message(STATUS "No TOOLCHAIN_PREFIX specified, using default: " ${TOOLCHAIN_PREFIX})
28+
endif()
29+
endif()
30+
set(TOOLCHAIN_BIN_DIR ${TOOLCHAIN_PREFIX}/bin)
31+
set(TOOLCHAIN_INC_DIR ${TOOLCHAIN_PREFIX}/${TOOLCHAIN}/include)
32+
set(TOOLCHAIN_LIB_DIR ${TOOLCHAIN_PREFIX}/${TOOLCHAIN}/lib)
33+
34+
# Set system depended extensions
35+
if(WIN32)
36+
set(TOOLCHAIN_EXT ".exe" )
37+
else()
38+
set(TOOLCHAIN_EXT "" )
39+
endif()
40+
41+
# Perform compiler test with static library
42+
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
43+
44+
#---------------------------------------------------------------------------------------
45+
# Set compiler/linker flags
46+
#---------------------------------------------------------------------------------------
47+
48+
# Object build options
49+
# -O0 No optimizations, reduce compilation time and make debugging produce the expected results.
50+
# -mthumb Generat thumb instructions.
51+
# -fno-builtin Do not use built-in functions provided by GCC.
52+
# -Wall Print only standard warnings, for all use Wextra
53+
# -ffunction-sections Place each function item into its own section in the output file.
54+
# -fdata-sections Place each data item into its own section in the output file.
55+
# -fomit-frame-pointer Omit the frame pointer in functions that don’t need one.
56+
# -mabi=aapcs Defines enums to be a variable sized type.
57+
set(OBJECT_GEN_FLAGS "-mthumb -fno-builtin -Wall -ffunction-sections -fdata-sections -fomit-frame-pointer -fmessage-length=0")
58+
59+
set(CMAKE_C_FLAGS "${OBJECT_GEN_FLAGS} -std=gnu17 " CACHE INTERNAL "C Compiler options")
60+
set(CMAKE_CXX_FLAGS "${OBJECT_GEN_FLAGS} -std=gnu++17 " CACHE INTERNAL "C++ Compiler options")
61+
set(CMAKE_ASM_FLAGS "${OBJECT_GEN_FLAGS} -x assembler-with-cpp " CACHE INTERNAL "ASM Compiler options")
62+
63+
64+
# -Wl,--gc-sections Perform the dead code elimination.
65+
# --specs=nano.specs Link with newlib-nano.
66+
# --specs=nosys.specs No syscalls, provide empty implementations for the POSIX system calls.
67+
# set(MAPFILE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.map" CACHE INTERNAL "Linker Map File")
68+
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--gc-sections,--cref --specs=nano.specs --specs=nosys.specs -mthumb -nostartfiles -static" CACHE INTERNAL "Linker options")
69+
70+
#---------------------------------------------------------------------------------------
71+
# Set debug/release build configuration Options
72+
#---------------------------------------------------------------------------------------
73+
74+
# Options for DEBUG build
75+
# -Og Enables optimizations that do not interfere with debugging.
76+
# -g Produce debugging information in the operating system’s native format.
77+
set(CMAKE_C_FLAGS_DEBUG "-Og -g3" CACHE INTERNAL "C Compiler options for debug build type")
78+
set(CMAKE_CXX_FLAGS_DEBUG "-Og -g3" CACHE INTERNAL "C++ Compiler options for debug build type")
79+
set(CMAKE_ASM_FLAGS_DEBUG "-g3" CACHE INTERNAL "ASM Compiler options for debug build type")
80+
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-g3" CACHE INTERNAL "Linker options for debug build type")
81+
82+
# Options for SPY build are identical to DEBUG build
83+
set(CMAKE_C_FLAGS_SPY "${CMAKE_C_FLAGS_DEBUG}" CACHE INTERNAL "C Compiler options for spy build type")
84+
set(CMAKE_CXX_FLAGS_SPY "${CMAKE_CXX_FLAGS_DEBUG}" CACHE INTERNAL "C++ Compiler options for spy build type")
85+
set(CMAKE_ASM_FLAGS_SPY "${CMAKE_ASM_FLAGS_DEBUG}" CACHE INTERNAL "ASM Compiler options for spy build type")
86+
set(CMAKE_EXE_LINKER_FLAGS_SPY "${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE INTERNAL "Linker options for spy build type")
87+
88+
# Options for RELEASE build
89+
# -Os Optimize for size. -Os enables all -O2 optimizations.
90+
# -flto Runs the standard link-time optimizer.
91+
set(CMAKE_C_FLAGS_RELEASE "-Os -g0" CACHE INTERNAL "C Compiler options for release build type")
92+
set(CMAKE_CXX_FLAGS_RELEASE "-Os -g0" CACHE INTERNAL "C++ Compiler options for release build type")
93+
set(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "ASM Compiler options for release build type")
94+
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-g0" CACHE INTERNAL "Linker options for release build type")
95+
# set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-g3 -flto" CACHE INTERNAL "Linker options for release build type")
96+
97+
#---------------------------------------------------------------------------------------
98+
# Set compilers
99+
#---------------------------------------------------------------------------------------
100+
set(CMAKE_C_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-gcc${TOOLCHAIN_EXT} CACHE INTERNAL "C Compiler")
101+
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-g++${TOOLCHAIN_EXT} CACHE INTERNAL "C++ Compiler")
102+
set(CMAKE_ASM_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-gcc${TOOLCHAIN_EXT} CACHE INTERNAL "ASM Compiler")
103+
104+
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PREFIX}/${${TOOLCHAIN}} ${CMAKE_PREFIX_PATH})
105+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
106+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
107+
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
108+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

0 commit comments

Comments
 (0)