Skip to content

Commit c753b49

Browse files
committed
Update nrfx-blink-sdk example to use native CMake Swift support, require CMake 3.29
1 parent 09c61b7 commit c753b49

File tree

1 file changed

+47
-27
lines changed

1 file changed

+47
-27
lines changed

nrfx-blink-sdk/CMakeLists.txt

Lines changed: 47 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,52 @@
1-
cmake_minimum_required(VERSION 3.20.0)
1+
cmake_minimum_required(VERSION 3.29)
22
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
3-
project(blinky)
3+
4+
# Use the armv7em-none-none-eabi target triple for Swift
5+
set(CMAKE_Swift_COMPILER_TARGET armv7em-none-none-eabi)
6+
# Enable "wmo" as needed by Embedded Swift
7+
set(CMAKE_Swift_COMPILATION_MODE wholemodule)
8+
# FIXME: Skip checking if the compiler works
9+
set(CMAKE_Swift_COMPILER_WORKS true)
10+
11+
# Create a new project called "blinky" and enable "Swift" as a supported language
12+
project(blinky Swift)
13+
14+
# Set global Swift compiler flags
15+
add_compile_options(
16+
# Enable Embedded Swift
17+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-enable-experimental-feature Embedded>"
18+
19+
# Enable function sections to enable dead code stripping on elf
20+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -function-sections>"
21+
22+
# Use software floating point operations matching GCC
23+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -mfloat-abi=soft>"
24+
25+
# Use compacted C enums matching GCC
26+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -fshort-enums>"
27+
28+
# Assortment of defines for Zephyr
29+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -DKERNEL -Xcc -DNRF52840_XXAA -Xcc -DPICOLIBC_INTEGER_PRINTF_SCANF -Xcc -D_FORTIFY_SOURCE=1 -Xcc -D_POSIX_C_SOURCE=200809 -Xcc -D__LINUX_ERRNO_EXTENSIONS__ -Xcc -D__PROGRAM_START -Xcc -D__ZEPHYR__=1>"
30+
31+
# Add Libc include paths
32+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xcc -I -Xcc ${ZEPHYR_SDK_INSTALL_DIR}/arm-zephyr-eabi/picolibc/include>"
33+
)
434

535
target_sources(app PRIVATE Stubs.c)
636

7-
if(APPLE)
8-
execute_process(COMMAND xcrun -f swiftc OUTPUT_VARIABLE SWIFTC OUTPUT_STRIP_TRAILING_WHITESPACE)
9-
else()
10-
execute_process(COMMAND which swiftc OUTPUT_VARIABLE SWIFTC OUTPUT_STRIP_TRAILING_WHITESPACE)
11-
endif()
12-
13-
add_custom_command(
14-
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o
15-
COMMAND
16-
${SWIFTC}
17-
-target armv7em-none-none-eabi -Xcc -mfloat-abi=soft -Xcc -fshort-enums
18-
-Xfrontend -function-sections -enable-experimental-feature Embedded -wmo -parse-as-library
19-
$$\( echo '$<TARGET_PROPERTY:app,INCLUDE_DIRECTORIES>' | sed 's/;$$//' | tr '\;' '\\n' | sed -e 's/\\\(.*\\\)/-Xcc -I\\1/g' \)
20-
$$\( echo '$<TARGET_PROPERTY:app,COMPILE_DEFINITIONS>' | sed 's/;$$/' | tr '\;' '\\n' | sed -e 's/\\\(.*\\\)/-Xcc \\1/g' \)
21-
-Xcc -DKERNEL -Xcc -DNRF52840_XXAA -Xcc -DPICOLIBC_INTEGER_PRINTF_SCANF -Xcc -D_FORTIFY_SOURCE=1 -Xcc -D_POSIX_C_SOURCE=200809 -Xcc -D__LINUX_ERRNO_EXTENSIONS__ -Xcc -D__PROGRAM_START -Xcc -D__ZEPHYR__=1
22-
-Xcc -I/opt/nordic/ncs/toolchains/20d68df7e5/opt/zephyr-sdk/arm-zephyr-eabi/picolibc/include
23-
-import-bridging-header ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h
24-
${CMAKE_CURRENT_LIST_DIR}/main.swift
25-
-c -o ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o
26-
DEPENDS
27-
${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h
28-
${CMAKE_CURRENT_LIST_DIR}/Main.swift
37+
add_library(app_swift STATIC Main.swift)
38+
add_dependencies(app_swift syscall_list_h_target)
39+
target_compile_options(app_swift PRIVATE
40+
-parse-as-library
41+
42+
# FIXME: add dependency on BridgingHeader.h
43+
-import-bridging-header ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h
2944
)
30-
add_custom_target(swift-blinky-swiftcode DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o)
31-
target_link_libraries(app PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o)
32-
add_dependencies(app swift-blinky-swiftcode)
45+
46+
# Copy include paths from C target to Swift target
47+
target_include_directories(app_swift PRIVATE
48+
"$<TARGET_PROPERTY:app,INCLUDE_DIRECTORIES>"
49+
)
50+
51+
# Link the Swift target into the primary target
52+
target_link_libraries(app PRIVATE app_swift)

0 commit comments

Comments
 (0)