summaryrefslogtreecommitdiff
path: root/tools/cmake
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2022-11-17 20:18:01 +1100
committerjacqueline <me@jacqueline.id.au>2022-11-17 20:18:01 +1100
commit42c387807fe0313b21b5280d9d55d4d641fe429c (patch)
treeb18ff7cd57ea7a603d56f07f73d5bc08c64500f8 /tools/cmake
parentc252132f397414bd996e957bc06ce842fdb33012 (diff)
downloadtangara-fw-42c387807fe0313b21b5280d9d55d4d641fe429c.tar.gz
Basic libmad build
Diffstat (limited to 'tools/cmake')
-rw-r--r--tools/cmake/common.cmake27
-rw-r--r--tools/cmake/extra-libs.cmake1
-rw-r--r--tools/cmake/libmad.cmake19
3 files changed, 47 insertions, 0 deletions
diff --git a/tools/cmake/common.cmake b/tools/cmake/common.cmake
new file mode 100644
index 00000000..53a6a243
--- /dev/null
+++ b/tools/cmake/common.cmake
@@ -0,0 +1,27 @@
+# For more information about build system see
+# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+# Build only the subset of components that we actually depend on.
+set(COMPONENTS "")
+
+# External dependencies
+list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/lib/result")
+list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/lib/lvgl")
+list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/lib/catch2")
+
+include($ENV{IDF_PATH}/tools/cmake/project.cmake)
+
+# Additional warnings used when compiling our components.
+# Unable to be used due to issues in ESP-IDF includes are: -Wpedantic
+# -Wuseless-cast -Wconversion -Wold-style-cast -Wsign-conversion -Wcast-align
+set(EXTRA_WARNINGS "-Wshadow" "-Wnon-virtual-dtor" "-Wunused"
+ "-Woverloaded-virtual" "-Wmisleading-indentation" "-Wduplicated-cond"
+ "-Wduplicated-branches" "-Wlogical-op" "-Wnull-dereference"
+ "-Wdouble-promotion" "-Wformat=2" "-Wimplicit-fallthrough")
+
+# Extra build flags that should apply to the entire build. This should mostly
+# just be used to setting flags that our external dependencies requires.
+# Otherwise, prefer adding per-component build flags to keep things neat.
+idf_build_set_property(COMPILE_OPTIONS "-DLV_CONF_INCLUDE_SIMPLE" APPEND)
diff --git a/tools/cmake/extra-libs.cmake b/tools/cmake/extra-libs.cmake
new file mode 100644
index 00000000..2d665b63
--- /dev/null
+++ b/tools/cmake/extra-libs.cmake
@@ -0,0 +1 @@
+include($ENV{PROJ_PATH}/tools/cmake/libmad.cmake)
diff --git a/tools/cmake/libmad.cmake b/tools/cmake/libmad.cmake
new file mode 100644
index 00000000..5126bd69
--- /dev/null
+++ b/tools/cmake/libmad.cmake
@@ -0,0 +1,19 @@
+set(LIBMAD_SRC "$ENV{PROJ_PATH}/lib/libmad")
+set(LIBMAD_BIN "${CMAKE_CURRENT_BINARY_DIR}/libmad")
+
+externalproject_add(libmad_build
+ SOURCE_DIR "${LIBMAD_SRC}"
+ PREFIX "${LIBMAD_BIN}"
+ CONFIGURE_COMMAND ${LIBMAD_SRC}/configure CC=${CMAKE_C_COMPILER} --srcdir=${LIBMAD_SRC} --prefix=${LIBMAD_BIN} --host=xtensa-elf --disable-debugging --disable-shared
+ BUILD_COMMAND "make"
+ INSTALL_COMMAND "make install"
+ BUILD_BYPRODUCTS "${LIBMAD_BIN}/libmad.a"
+)
+
+ add_library(libmad STATIC IMPORTED GLOBAL)
+ add_dependencies(libmad libmad_build)
+
+ set_target_properties(libmad PROPERTIES IMPORTED_LOCATION
+ "${LIBMAD_BIN}/libmad.a")
+ set_target_properties(libmad PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+ "${LIBMAD_BIN}")