|
1 |
| -cmake_minimum_required(VERSION 3.20.0) |
| 1 | +cmake_minimum_required(VERSION 3.29) |
2 | 2 | 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 | +) |
4 | 34 |
|
5 | 35 | target_sources(app PRIVATE Stubs.c)
|
6 | 36 |
|
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 |
29 | 44 | )
|
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