Add cmake functions for adding binaries and tests. Change-Id: Ib93cd5d087d4018d8c7d947d3d10e1f031d8e590
diff --git a/CMakeLists.txt b/CMakeLists.txt index c4b0d6a..cd80428 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -1,10 +1,13 @@ -cmake_minimum_required (VERSION 3.1) +cmake_minimum_required (VERSION 3.10) set(CMAKE_C_ABI_COMPILED ON) set(CMAKE_CXX_ABI_COMPILED ON) set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/riscv_baremetal.cmake") +list(APPEND CMAKE_MODULE_PATH + ${CMAKE_CURRENT_LIST_DIR}/cmake/ +) project(springbok_project) @@ -19,13 +22,18 @@ set(LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/springbok/matcha.ld") +include(vec_cc_binary) +include(vec_cc_test) + add_subdirectory(springbok) add_subdirectory(hello_vec) + add_subdirectory(vector_tests) -add_subdirectory(vector_load_tests) +add_subdirectory(vector_load_store_tests) add_subdirectory(vector_vadd_vsub_tests) add_subdirectory(vector_executive) add_subdirectory(vector_vset_tests) + add_subdirectory(pw_unit_test_demo) add_subdirectory(test_vsetvl)
diff --git a/cmake/riscv_baremetal.cmake b/cmake/riscv_baremetal.cmake index 62e6c5a..9c8b93b 100644 --- a/cmake/riscv_baremetal.cmake +++ b/cmake/riscv_baremetal.cmake
@@ -40,3 +40,16 @@ set( CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" ) set( CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" ) set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -nostartfiles " ) +set( VEC_DEFAULT_COPTS + "-Wall" + "-Werror" + "-O0" + "-g3" + "-ggdb" + "-ffreestanding" + "-ffunction-sections" + "-fstack-usage" + "-mstrict-align" +) + +set( VEC_DEFAULT_LINKOPTS -specs=nano.specs -Wl,--gc-sections -Wl,--print-memory-usage -Wl,-Map=${PROJECT_NAME}.map) \ No newline at end of file
diff --git a/cmake/vec_cc_binary.cmake b/cmake/vec_cc_binary.cmake new file mode 100644 index 0000000..97fd63c --- /dev/null +++ b/cmake/vec_cc_binary.cmake
@@ -0,0 +1,40 @@ +function(vec_cc_binary) + cmake_parse_arguments( + _RULE + "" + "NAME" + "SRCS;COPTS;DEFINES;LINKOPTS;DATA;DEPS;LABELS" + ${ARGN} + ) + +set(_NAME "${_RULE_NAME}") +project(${_RULE_NAME}) +set (CMAKE_CXX_STANDARD 17) + +set(_ELF_NAME "${_RULE_NAME}.elf") +add_executable(${_ELF_NAME}) +target_include_directories(${_ELF_NAME} PUBLIC include) +set_target_properties(${_ELF_NAME} PROPERTIES LINK_DEPENDS "${LINKER_SCRIPT}") + +target_sources(${_ELF_NAME} + PRIVATE + ${_RULE_SRCS} +) + +target_link_libraries(${_ELF_NAME} + PUBLIC + ${_RULE_DEPS} +) + +target_compile_options(${_ELF_NAME} + PUBLIC + ${VEC_DEFAULT_COPTS} + ${_RULE_COPTS} +) + +target_link_options(${_ELF_NAME} + PUBLIC + ${_RULE_LINKOPTS} + ${VEC_DEFAULT_LINKOPTS} +) +endfunction()
diff --git a/cmake/vec_cc_test.cmake b/cmake/vec_cc_test.cmake new file mode 100644 index 0000000..ff355ba --- /dev/null +++ b/cmake/vec_cc_test.cmake
@@ -0,0 +1,28 @@ +function(vec_cc_test) + cmake_parse_arguments( + _RULE + "" + "NAME" + "SRCS;COPTS;DEFINES;LINKOPTS;DATA;DEPS;LABELS" + ${ARGN} + ) + +set(_NAME "${_RULE_NAME}") +project(${_RULE_NAME}) +set (CMAKE_CXX_STANDARD 17) + +vec_cc_binary( + NAME + ${_RULE_NAME} + SRCS + ${_RULE_SRCS} + DEPS + pw_unit_test + pw_unit_test.main + pw_assert_basic + ${_RULE_DEPS} + LINKOPTS + ${_RULE_LINKOPTS} +) + +endfunction()
diff --git a/hello_vec/CMakeLists.txt b/hello_vec/CMakeLists.txt index 59efb80..4f84c45 100644 --- a/hello_vec/CMakeLists.txt +++ b/hello_vec/CMakeLists.txt
@@ -1,35 +1,10 @@ -cmake_minimum_required(VERSION 3.10) - -project(hello_vec) - -set(TARGET hello_vec) -set(ELF ${TARGET}.elf) - -add_executable(${ELF} main.cpp) - -target_include_directories(${ELF} PUBLIC include) - -set_target_properties(${ELF} PROPERTIES LINK_DEPENDS "${LINKER_SCRIPT}") - -target_link_libraries(${ELF} springbok) - -set_target_properties( - ${ELF} - PROPERTIES - LINK_FLAGS - "-specs=nano.specs \ - -Wl,--gc-sections \ - -Wl,--print-memory-usage \ - -Wl,-Map=${PROJECT_NAME}.map \ - -T${LINKER_SCRIPT}") - -target_compile_options(${ELF} PUBLIC - -Wall - -Werror - -O3 - -g3 - -ggdb - -ffreestanding - -ffunction-sections - -fstack-usage - -mstrict-align) +vec_cc_binary( + NAME + hello_vec + SRCS + main.cpp + DEPS + springbok + LINKOPTS + -T${LINKER_SCRIPT} +) \ No newline at end of file
diff --git a/pw_unit_test_demo/CMakeLists.txt b/pw_unit_test_demo/CMakeLists.txt index 3bfaee0..b690644 100644 --- a/pw_unit_test_demo/CMakeLists.txt +++ b/pw_unit_test_demo/CMakeLists.txt
@@ -1,42 +1,12 @@ -cmake_minimum_required(VERSION 3.10) -project(pw_unit_test_demo) -set (CMAKE_CXX_STANDARD 17) - -set(TARGET pw_unit_test_demo) -set(ELF ${TARGET}.elf) - -add_executable(${ELF} ${TARGET}.cpp) - -target_include_directories(${ELF} PUBLIC include) - -set_target_properties(${ELF} PROPERTIES LINK_DEPENDS "${LINKER_SCRIPT}") - - -target_link_libraries(${ELF} springbok) -target_link_libraries(${ELF} pw_unit_test) -target_link_libraries(${ELF} pw_unit_test.main) -target_link_libraries(${ELF} pw_assert_basic) - - -set_target_properties( - ${ELF} - PROPERTIES - LINK_FLAGS - "-specs=nano.specs \ - -Wl,--gc-sections \ - -Wl,--print-memory-usage \ - -Wl,-Map=${PROJECT_NAME}.map \ - -T${LINKER_SCRIPT} \ - -Xlinker --defsym=__itcm_length__=256K") - -target_compile_options(${ELF} PUBLIC - -Wall - -Werror - -O3 - -g3 - -ggdb - -ffreestanding - -ffunction-sections - -fstack-usage - -mstrict-align) +vec_cc_test( + NAME + pw_unit_test_demo + SRCS + pw_unit_test_demo.cpp + DEPS + springbok + LINKOPTS + -T${LINKER_SCRIPT} + -Xlinker --defsym=__itcm_length__=128K +)
diff --git a/springbok/CMakeLists.txt b/springbok/CMakeLists.txt index 41acb68..0ba73f6 100644 --- a/springbok/CMakeLists.txt +++ b/springbok/CMakeLists.txt
@@ -1,34 +1,29 @@ -cmake_minimum_required(VERSION 3.1) enable_language(ASM) add_library(springbok INTERFACE) add_library(springbok_intrinsic STATIC) -target_sources(springbok_intrinsic PRIVATE - crt0.s - springbok_gloss.cpp) +target_sources(springbok_intrinsic + PRIVATE + crt0.s + springbok_gloss.cpp +) target_include_directories(springbok_intrinsic PUBLIC include) target_link_libraries(springbok INTERFACE - springbok_intrinsic + springbok_intrinsic ) target_include_directories(springbok INTERFACE include) -target_compile_options(springbok_intrinsic PUBLIC - -Wall - -Werror - -Os - -g3 - -ggdb - -ffreestanding - -ffunction-sections - -fstack-usage - -mstrict-align) +target_compile_options(springbok_intrinsic + PUBLIC + ${VEC_DEFAULT_COPTS} +) target_link_options(springbok -INTERFACE --Wl,--whole-archive ${CMAKE_CURRENT_BINARY_DIR}/libspringbok_intrinsic.a -Wl,--no-whole-archive + INTERFACE + -Wl,--whole-archive ${CMAKE_CURRENT_BINARY_DIR}/libspringbok_intrinsic.a -Wl,--no-whole-archive )
diff --git a/test_vsetvl/CMakeLists.txt b/test_vsetvl/CMakeLists.txt index cd7a075..3e062f7 100644 --- a/test_vsetvl/CMakeLists.txt +++ b/test_vsetvl/CMakeLists.txt
@@ -1,42 +1,12 @@ -cmake_minimum_required(VERSION 3.10) -project(test_vsetvl) -set (CMAKE_CXX_STANDARD 17) - -set(TARGET test_vsetvl) -set(ELF ${TARGET}.elf) - -add_executable(${ELF} ${TARGET}.cpp) - -target_include_directories(${ELF} PUBLIC include) - -set_target_properties(${ELF} PROPERTIES LINK_DEPENDS "${LINKER_SCRIPT}") - - -target_link_libraries(${ELF} springbok) -target_link_libraries(${ELF} pw_unit_test) -target_link_libraries(${ELF} pw_unit_test.main) -target_link_libraries(${ELF} pw_assert_basic) - - -set_target_properties( - ${ELF} - PROPERTIES - LINK_FLAGS - "-specs=nano.specs \ - -Wl,--gc-sections \ - -Wl,--print-memory-usage \ - -Wl,-Map=${PROJECT_NAME}.map \ - -T${LINKER_SCRIPT} \ - -Xlinker --defsym=__itcm_length__=256K") - -target_compile_options(${ELF} PUBLIC - -Wall - -Werror - -O3 - -g3 - -ggdb - -ffreestanding - -ffunction-sections - -fstack-usage - -mstrict-align) +vec_cc_test( + NAME + test_vsetvl + SRCS + test_vsetvl.cpp + DEPS + springbok + LINKOPTS + -T${LINKER_SCRIPT} + -Xlinker --defsym=__itcm_length__=256K +)
diff --git a/test_vsetvl/test_vsetvl.cpp b/test_vsetvl/test_vsetvl.cpp index 8eb5912..ad5911e 100644 --- a/test_vsetvl/test_vsetvl.cpp +++ b/test_vsetvl/test_vsetvl.cpp
@@ -1,5 +1,5 @@ #include <riscv_vector.h> -#include <springbok_intrinsics.h> +#include <springbok.h> #include <stdio.h> #include <stdlib.h>
diff --git a/vector_executive/CMakeLists.txt b/vector_executive/CMakeLists.txt index 1f762cc..4c9d003 100644 --- a/vector_executive/CMakeLists.txt +++ b/vector_executive/CMakeLists.txt
@@ -1,33 +1,12 @@ -cmake_minimum_required(VERSION 3.10) -project(vector_executive) - -set(TARGET vector_executive) -set(ELF ${TARGET}.elf) - -add_executable(${ELF} ${TARGET}.c) - -set_target_properties(${ELF} PROPERTIES LINK_DEPENDS "${LINKER_SCRIPT}") - -target_link_libraries(${ELF} springbok) - -set_target_properties( - ${ELF} - PROPERTIES - LINK_FLAGS - "-specs=nano.specs \ - -Wl,--gc-sections \ - -Wl,--print-memory-usage \ - -Wl,-Map=${PROJECT_NAME}.map \ - -T${LINKER_SCRIPT}") - -target_compile_options(${ELF} PUBLIC - -Wall - -Werror - -O3 - -g3 - -ggdb - -ffreestanding - -ffunction-sections - -fstack-usage - -mstrict-align) +vec_cc_binary( + NAME + vector_executive + SRCS + vector_executive.c + DEPS + springbok + LINKOPTS + -T${LINKER_SCRIPT} + -Xlinker --defsym=__itcm_length__=128K +) \ No newline at end of file
diff --git a/vector_load_store_tests/CMakeLists.txt b/vector_load_store_tests/CMakeLists.txt new file mode 100644 index 0000000..359d042 --- /dev/null +++ b/vector_load_store_tests/CMakeLists.txt
@@ -0,0 +1,13 @@ + +vec_cc_binary( + NAME + vector_load_store_tests + SRCS + vector_load_store_tests.c + DEPS + springbok + vector_tests + LINKOPTS + -T${LINKER_SCRIPT} + -Xlinker --defsym=__itcm_length__=128K +)
diff --git a/vector_load_tests/include/vector_load_store_tests.h b/vector_load_store_tests/include/vector_load_store_tests.h similarity index 100% rename from vector_load_tests/include/vector_load_store_tests.h rename to vector_load_store_tests/include/vector_load_store_tests.h
diff --git a/vector_load_tests/vector_load_store_tests.c b/vector_load_store_tests/vector_load_store_tests.c similarity index 100% rename from vector_load_tests/vector_load_store_tests.c rename to vector_load_store_tests/vector_load_store_tests.c
diff --git a/vector_load_tests/CMakeLists.txt b/vector_load_tests/CMakeLists.txt deleted file mode 100644 index 7d13871..0000000 --- a/vector_load_tests/CMakeLists.txt +++ /dev/null
@@ -1,35 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -project(vector_load_tests) - - -set(TARGET vector_load_tests) -set(ELF ${TARGET}.elf) - -add_executable(${ELF} vector_load_store_tests.c) - -target_include_directories(${ELF} PUBLIC include) - -set_target_properties(${ELF} PROPERTIES LINK_DEPENDS "${LINKER_SCRIPT}") - -target_link_libraries(${ELF} vector_tests) - -set_target_properties( - ${ELF} - PROPERTIES - LINK_FLAGS - "-T${LINKER_SCRIPT} \ - -specs=nano.specs \ - -Wl,--gc-sections \ - -Wl,--print-memory-usage \ - -Wl,-Map=${PROJECT_NAME}.map") - -target_compile_options(${ELF} PUBLIC - -nostdlib - -ffreestanding - -ffunction-sections - -Wall - -Werror - -O3 - -g) -
diff --git a/vector_tests/CMakeLists.txt b/vector_tests/CMakeLists.txt index d7f6bc1..e939871 100644 --- a/vector_tests/CMakeLists.txt +++ b/vector_tests/CMakeLists.txt
@@ -1,4 +1,3 @@ -cmake_minimum_required(VERSION 3.1) enable_language(ASM) add_library(vector_tests @@ -10,12 +9,5 @@ target_link_libraries(vector_tests springbok) target_compile_options(vector_tests PUBLIC - -Wall - -Werror - -O3 - -g3 - -ggdb - -ffreestanding - -ffunction-sections - -fstack-usage - -mstrict-align) + ${VEC_DEFAULT_COPTS} +)
diff --git a/vector_vadd_vsub_tests/CMakeLists.txt b/vector_vadd_vsub_tests/CMakeLists.txt index 008773a..dc52f7a 100644 --- a/vector_vadd_vsub_tests/CMakeLists.txt +++ b/vector_vadd_vsub_tests/CMakeLists.txt
@@ -1,42 +1,20 @@ -cmake_minimum_required(VERSION 3.10) set (OPERAND_TYPES VV VX VI) foreach(OPERAND_TYPE ${OPERAND_TYPES}) -project(vector_vadd_vsub_tests_${OPERAND_TYPE}) - -string(TOLOWER ${OPERAND_TYPE} OP_SUFFIX) - -set(TARGET vector_vadd_vsub_tests_${OP_SUFFIX}) -set(ELF ${TARGET}.elf) - -add_executable(${ELF} vector_vadd_vsub_tests.c) - -target_include_directories(${ELF} PUBLIC include) - -set_target_properties(${ELF} PROPERTIES LINK_DEPENDS "${LINKER_SCRIPT}") - -target_link_libraries(${ELF} vector_tests) - -set_target_properties( - ${ELF} - PROPERTIES - LINK_FLAGS - "-T${LINKER_SCRIPT} \ - -specs=nano.specs \ - -Wl,--gc-sections \ - -Wl,--print-memory-usage \ - -Wl,-Map=${PROJECT_NAME}.map") - -target_compile_options(${ELF} PUBLIC - -nostdlib - -ffreestanding - -ffunction-sections - -Wall - -Werror - -Wno-unused-value - -O3 - -g - -D=TEST_${OPERAND_TYPE}) - +vec_cc_binary( + NAME + vector_vadd_vsub_${OPERAND_TYPE}_tests + SRCS + vector_vadd_vsub_tests.c + DEPS + springbok + vector_tests + COPTS + -Wno-unused-value + -D=TEST_${OPERAND_TYPE} + LINKOPTS + -T${LINKER_SCRIPT} + -Xlinker --defsym=__itcm_length__=128K +) endforeach()
diff --git a/vector_vset_tests/CMakeLists.txt b/vector_vset_tests/CMakeLists.txt index ba64c6b..1fa1776 100644 --- a/vector_vset_tests/CMakeLists.txt +++ b/vector_vset_tests/CMakeLists.txt
@@ -1,35 +1,13 @@ -cmake_minimum_required(VERSION 3.10) -project(vector_vset_tests) - - -set(TARGET vector_vset_tests) -set(ELF ${TARGET}.elf) - -add_executable(${ELF} vector_vset_tests.c) - -target_include_directories(${ELF} PUBLIC include) - -set_target_properties(${ELF} PROPERTIES LINK_DEPENDS "${LINKER_SCRIPT}") - -target_link_libraries(${ELF} vector_tests) - -set_target_properties( - ${ELF} - PROPERTIES - LINK_FLAGS - "-T${LINKER_SCRIPT} \ - -specs=nano.specs \ - -Wl,--gc-sections \ - -Wl,--print-memory-usage \ - -Wl,-Map=${PROJECT_NAME}.map") - -target_compile_options(${ELF} PUBLIC - -nostdlib - -ffreestanding - -ffunction-sections - -Wall - -Werror - -O3 - -g) - +vec_cc_binary( + NAME + vector_vset_tests + SRCS + vector_vset_tests.c + DEPS + springbok + vector_tests + LINKOPTS + -T${LINKER_SCRIPT} + -Xlinker --defsym=__itcm_length__=128K +)