summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: 100214c320aee9aad2fa2beb821f4b4e0ed269fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# CMakeLists.txt - Main per-platform build script for sbc-harness project
#
# Copyright (C) 2024  Luke T. Shumaker <lukeshu@lukeshu.com>
# SPDX-License-Identifier: AGPL-3.0-or-later

cmake_minimum_required(VERSION 3.30)

if (NOT PICO_PLATFORM)
        message(FATAL_ERROR "PICO_PLATFORM must be specified; use the GNUmakefile to set this")
endif()

set(PICO_SDK_PATH "${CMAKE_SOURCE_DIR}/3rd-party/pico-sdk")
include("${PICO_SDK_PATH}/external/pico_sdk_import.cmake")

project(sbc_harness)

pico_sdk_init()

add_compile_options(-Wall -Wextra -Werror)

function(target_embed_sources arg_target arg_hdrname)
	set(embed_objs)
	foreach(embed_src IN LISTS ARGN)
		add_custom_command(
			OUTPUT            "${embed_src}.obj"
			WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
			COMMAND           mkdir -p -- "$<PATH:GET_PARENT_PATH,${CMAKE_CURRENT_BINARY_DIR}/${embed_src}>" &&
				${CMAKE_LINKER} -r -b binary -o "${CMAKE_CURRENT_BINARY_DIR}/${embed_src}.obj" "${embed_src}"
			DEPENDS           "${embed_src}"
		)
		list(APPEND embed_objs "${embed_src}.obj")
	endforeach()
	set_source_files_properties("${embed_objs}" PROPERTIES
		EXTERNAL_OBJECT true
		GENERATED true
	)

	set_source_files_properties("${arg_hdrname}" PROPERTIES
		GENERATED true
	)
	add_custom_command(
		OUTPUT  "${arg_hdrname}"
		COMMAND "${CMAKE_SOURCE_DIR}/build-aux/embed-sources.h.gen" "${embed_objs}" >"${arg_hdrname}"
		COMMAND_EXPAND_LISTS
		DEPENDS "${embed_objs}" "${CMAKE_SOURCE_DIR}/build-aux/embed-sources.h.gen"
	)

	target_sources("${arg_target}" PRIVATE "${embed_objs}" "${arg_hdrname}")
endfunction()

function(add_stack_analysis arg_outfile arg_objlib_target)
	target_compile_options("${arg_objlib_target}" PUBLIC "-fcallgraph-info=su,da")
	set_source_files_properties("${arg_outfile}" PROPERTIES
		GENERATED true
	)
	add_custom_command(
		OUTPUT  "${arg_outfile}"
		COMMAND "${CMAKE_SOURCE_DIR}/build-aux/stack.c.gen" "$<TARGET_OBJECTS:${arg_objlib_target}>" >"${arg_outfile}"
		COMMAND_EXPAND_LISTS
		DEPENDS "$<TARGET_OBJECTS:${arg_objlib_target}>" "${CMAKE_SOURCE_DIR}/build-aux/stack.c.gen"
		COMMENT "Calculating ${arg_objlib_target} required stack sizes"
	)
endfunction()

add_subdirectory(libcr)
add_subdirectory(libcr_ipc)
add_subdirectory(libmisc)
add_subdirectory(libhw)
add_subdirectory(libdhcp)
add_subdirectory(libusb)
add_subdirectory(lib9p)

add_subdirectory(cmd/sbc_harness)
add_subdirectory(cmd/srv9p)