Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add lfc.cmake #195

Merged
merged 1 commit into from
Jan 23, 2025
Merged

Add lfc.cmake #195

merged 1 commit into from
Jan 23, 2025

Conversation

erlingrj
Copy link
Collaborator

This PR adds a cmake file that defines three functions that are useful for cmake-based build systems, such as Zephyr/west.

Here is an example using lfc.cmake:
https://github.com/lf-lang/lf-zephyr-uc-template/blob/d2f00313c58a76f15e40dee08efb545dd21b7bca/CMakeLists.txt

Copy link
Contributor

Benchmark results after merging this PR:

Benchmark results

Performance:

PingPongUc:
Best Time: 130.275 msec
Worst Time: 134.717 msec
Median Time: 132.602 msec

PingPongC:
Best Time: 166.384 msec
Worst Time: 176.204 msec
Median Time: 168.929 msec

ReactionLatencyUc:
Best latency: 46266 nsec
Median latency: 59279 nsec
Worst latency: 663019 nsec

ReactionLatencyC:
Best latency: 44880 nsec
Median latency: 59433 nsec
Worst latency: 641402 nsec

Memory usage:

PingPongUc:
text data bss dec hex filename
40596 760 8496 49852 c2bc bin/PingPongUc

PingPongC:
text data bss dec hex filename
45826 880 360 47066 b7da bin/PingPongC

ReactionLatencyUc:
text data bss dec hex filename
30417 744 2080 33241 81d9 bin/ReactionLatencyUc

ReactionLatencyC:
text data bss dec hex filename
41536 848 360 42744 a6f8 bin/ReactionLatencyC

Copy link
Contributor

Memory usage after merging this PR will be:

Memory Report

action_empty_test_c

from to increase (%)
text 60423 60423 0.00
data 752 752 0.00
bss 11360 11360 0.00
total 72535 72535 0.00

action_microstep_test_c

from to increase (%)
text 61262 61262 0.00
data 760 760 0.00
bss 11424 11424 0.00
total 73446 73446 0.00

action_overwrite_test_c

from to increase (%)
text 61099 61099 0.00
data 752 752 0.00
bss 11424 11424 0.00
total 73275 73275 0.00

action_test_c

from to increase (%)
text 61035 61035 0.00
data 760 760 0.00
bss 11424 11424 0.00
total 73219 73219 0.00

deadline_test_c

from to increase (%)
text 56665 56665 0.00
data 768 768 0.00
bss 10784 10784 0.00
total 68217 68217 0.00

delayed_conn_test_c

from to increase (%)
text 62027 62027 0.00
data 752 752 0.00
bss 10272 10272 0.00
total 73051 73051 0.00

event_payload_pool_test_c

from to increase (%)
text 18331 18331 0.00
data 624 624 0.00
bss 320 320 0.00
total 19275 19275 0.00

event_queue_test_c

from to increase (%)
text 27616 27616 0.00
data 736 736 0.00
bss 480 480 0.00
total 28832 28832 0.00

nanopb_test_c

from to increase (%)
text 42886 42886 0.00
data 904 904 0.00
bss 320 320 0.00
total 44110 44110 0.00

port_test_c

from to increase (%)
text 61975 61975 0.00
data 752 752 0.00
bss 10272 10272 0.00
total 72999 72999 0.00

reaction_queue_test_c

from to increase (%)
text 27448 27448 0.00
data 736 736 0.00
bss 480 480 0.00
total 28664 28664 0.00

request_shutdown_test_c

from to increase (%)
text 61234 61234 0.00
data 752 752 0.00
bss 11424 11424 0.00
total 73410 73410 0.00

startup_test_c

from to increase (%)
text 56364 56364 0.00
data 760 760 0.00
bss 10784 10784 0.00
total 67908 67908 0.00

tcp_channel_test_c

from to increase (%)
text 96430 96430 0.00
data 1256 1256 0.00
bss 21376 21376 0.00
total 119062 119062 0.00

timer_test_c

from to increase (%)
text 56255 56255 0.00
data 752 752 0.00
bss 10784 10784 0.00
total 67791 67791 0.00

Copy link
Contributor

Coverage after merging lfc-cmake into main will be

71.03%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
src
   action.c77.69%65.63%100%81.18%134–135, 24, 42–45, 48, 50–51, 54–56, 62–63, 70–72, 72, 72–75, 81–82, 93–94
   builtin_triggers.c90.91%70%100%96.77%14, 18, 40, 43
   connection.c78.52%51.16%100%88.66%10, 104, 11, 110, 123–124, 136–137, 14, 14, 143, 145, 16–17, 21–22, 22, 22–23, 25, 27–28, 33, 48, 48, 48–49, 55, 60–62, 97
   environment.c82.18%60%92.31%86.76%12–13, 18, 20–21, 31, 35–36, 42–43, 59–60, 64–65, 97–99
   event.c95.35%92.86%100%96.15%14–15
   federated.c5.39%2.88%7.69%6.45%10, 100, 100, 100–101, 104, 107–108, 108, 108–109, 111–112, 114, 118–119, 12, 121–123, 126, 128–133, 135–137, 14, 14, 14, 140–142, 142, 142–143, 143, 143–145, 147, 15, 150–151, 153–157, 159, 16, 160–164, 166, 166, 166–169, 17, 171, 171, 171–173, 173, 173–174, 178–179, 179, 179, 18, 18, 18, 182–183, 187–189, 191, 191, 191, 193–197, 200, 200, 200–203, 206–207, 207, 207–208, 21, 210–211, 214–215, 22, 220–221, 221, 221–222, 224, 226, 226, 226–229, 229, 229, 229, 229, 229, 23, 23, 23, 230–238, 238, 238–239, 24, 241, 243–249, 25, 25, 25, 250–251, 255, 258, 258, 258–259, 26, 260, 264, 267–268, 268, 268, 268–269, 27, 270–276, 278, 28, 28, 28, 284–286, 29, 29, 29, 29, 29, 298–299, 30, 302–305, 307, 307, 307–308, 312–313, 313, 313, 315, 317–318, 318, 318–319, 319, 319, 32, 320, 320, 320–321, 321, 321–322, 322, 322–323, 323, 323, 325, 325, 325–326, 326, 326–327, 327, 327–328, 328, 328, 330, 35, 35, 35, 35, 35–36, 40–41, 45–46, 48–51, 53, 53, 53–54, 54, 54, 56, 56, 56–58, 58, 58–60, 64–65, 69–70, 72–75, 77, 79, 79, 79–80, 80, 80–81, 81, 81–82, 82, 82, 85–86, 88–89, 9, 90–91, 93, 93, 93–96, 98
   logging.c88.52%83.33%100%89.36%25, 38–40, 47, 60–61
   network_channel.c69.23%62.50%100%70.59%40, 40, 40, 45–48, 57
   port.c78.08%45.83%100%93.33%10, 10, 10, 16, 20, 25, 25–27, 27, 27–28, 39, 39, 39–40
   queues.c89.94%80.36%100%94.06%108, 113, 119, 21–23, 47–48, 60–61, 84–88, 91–92
   reaction.c71.19%54.55%100%79.71%15, 17, 21, 28–31, 31, 31–32, 42, 45, 47, 52–53, 53, 53–55, 55, 55–56, 73, 89–91, 91, 91–94, 94, 94–95
   reactor.c69.33%51.52%100%82.28%10, 101–102, 14–19, 22, 28, 30, 32–37, 37, 37–38, 38, 38, 43, 55, 58–59, 59, 59–60, 60, 60–61, 63, 77–78, 81–82, 82, 82–83, 83, 83–84, 86, 91
   serialization.c50%50%50%50%16–17, 26–27, 33–35, 38–40
   tag.c40.19%31.48%60%47.92%14, 14–15, 17, 17–18, 23–24, 24, 24, 24, 24–25, 27, 27, 27, 27, 27–28, 30, 30, 30–31, 33–34, 34, 34–35, 37, 37, 37, 37, 37–38, 40, 40, 40, 40, 40–41, 43, 53–54, 63, 63–64, 83–85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85–87, 89
   timer.c95%66.67%100%100%14, 25
   trigger.c100%100%100%100%
   util.c41.67%33.33%33.33%46.67%12–13, 13, 13–16, 18–20, 4–5
src/platform/posix
   posix.c53.15%30%66.67%56.58%100–101, 101, 101–103, 107, 16, 18, 20–21, 35–37, 39–41, 49–50, 55–60, 60, 60–63, 63, 63–65, 68, 74–75, 79, 82, 93–95, 95, 95–97, 99
   tcp_ip_channel.c64.93%51.01%94.12%74.36%100, 103–104, 104, 104–105, 119–120, 122, 124, 128–129, 137, 140–141, 141, 141–142, 147–148, 148, 148–149, 155–156, 156, 156–158, 172, 175, 179, 179, 179, 179, 179–180, 180, 180–181, 181, 181–182, 184, 186, 186, 186–187, 196, 203–204, 208–209, 213, 213, 213–215, 215, 215–216, 218, 218, 218–219, 219, 219, 221, 223–224, 228, 228, 228–229, 249, 262–263, 263, 263–264, 270, 275–276, 276, 276–277, 277, 277–278, 280–281, 281, 281–282, 282, 282, 284–287, 297, 297–298, 298, 298–299, 323–324,

Copy link
Collaborator

@LasseRosenow LasseRosenow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My mind gets twisted reading so much cmake 😵‍💫, but it looks very good to me.
I like how small and concise the user file has become :)

A little bit jealous of the function feature :O

Nice work! 💪

@erlingrj
Copy link
Collaborator Author

My mind gets twisted reading so much cmake 😵‍💫, but it looks very good to me. I like how small and concise the user file has become :)

A little bit jealous of the function feature :O

Nice work! 💪

Yes, CMake is terrible

@LasseRosenow
Copy link
Collaborator

LasseRosenow commented Jan 23, 2025

One small question: In the RIOT make based solution I had the issue that just specifying LF_MAIN didn't work with federated programs, because in that case the path is more complex and the generated code is not under src-gen/${LF_MAIN}/Makefile anymore, but under src-gen/${LF_MAIN}/r1/Makefile.
That is why I introduced the FEDERATE variable there.

Is the idea in this case to write something like this:
lf_build_generated_code(app ${CMAKE_CURRENT_SOURCE_DIR}/src-gen/${LF_MAIN}/r1)
?

Copy link
Member

@tanneberger tanneberger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks fine to me.

@erlingrj
Copy link
Collaborator Author

One small question: In the RIOT make based solution I had the issue that just specifying LF_MAIN didn't work with federated programs, because in that case the path is more complex and the generated code is not under src-gen/${LF_MAIN}/Makefile anymore, but under src-gen/${LF_MAIN}/r1/Makefile. That is why I introduced the FEDERATE variable there.

Is the idea in this case to write something like this: lf_build_generated_code(app ${CMAKE_CURRENT_SOURCE_DIR}/src-gen/${LF_MAIN}/r1) ?

Yes exactly! In the federated zephyr CMake template I have a FEDERATE variable and we use this to find the correct src-gen path

@erlingrj erlingrj merged commit d271c84 into main Jan 23, 2025
8 checks passed
@erlingrj erlingrj deleted the lfc-cmake branch January 23, 2025 16:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants