From cbb377b4b6e537f8e1f0e70e672ed6cd1e7ec2fc Mon Sep 17 00:00:00 2001 From: James Benton Date: Fri, 5 May 2017 17:00:33 +0100 Subject: [PATCH] Add "crt-lite", builds an empty crt0 without C runtime stuff (such as malloc and devoptap). --- CMakeLists.txt | 10 ++++++++++ cmake/wut-toolchain.cmake | 14 ++++++++++++++ crt-lite/CMakeLists.txt | 15 +++++++++++++++ crt-lite/crt0.s | 15 +++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 crt-lite/CMakeLists.txt create mode 100644 crt-lite/crt0.s diff --git a/CMakeLists.txt b/CMakeLists.txt index 50849f07..c924a688 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,16 @@ externalproject_add(crt -DCMAKE_INSTALL_PREFIX:string= -DCMAKE_TOOLCHAIN_FILE:string=${CMAKE_SOURCE_DIR}/cmake/wut-toolchain.cmake) +externalproject_add(crt-lite + SOURCE_DIR "${CMAKE_SOURCE_DIR}/crt-lite" + CMAKE_GENERATOR "Unix Makefiles" + INSTALL_DIR "${CMAKE_BINARY_DIR}/staging" + CMAKE_CACHE_ARGS + -DDEVKITPPC:string=${DEVKITPPC} + -DWUT_ROOT:string=${CMAKE_SOURCE_DIR} + -DCMAKE_INSTALL_PREFIX:string= + -DCMAKE_TOOLCHAIN_FILE:string=${CMAKE_SOURCE_DIR}/cmake/wut-toolchain.cmake) + externalproject_add(rpl SOURCE_DIR "${CMAKE_SOURCE_DIR}/rpl" CMAKE_GENERATOR "Unix Makefiles" diff --git a/cmake/wut-toolchain.cmake b/cmake/wut-toolchain.cmake index 28bb81cf..8bd75c26 100644 --- a/cmake/wut-toolchain.cmake +++ b/cmake/wut-toolchain.cmake @@ -70,3 +70,17 @@ macro(add_rpx target) COMMAND "${ELF_TO_RPL}" "$" "$.rpx" COMMENT "Converting $ to rpx") endmacro() + +macro(add_rpx_lite target) + add_executable(${ARGV}) + set_target_properties(${target} PROPERTIES + COMPILE_FLAGS "${RPX_COMPILE_FLAGS}" + LINK_FLAGS "${RPX_LINKER_FLAGS}") + + target_include_directories(${target} PRIVATE "${WUT_ROOT}/include") + target_link_libraries(${target} crt-lite) + + add_custom_command(TARGET ${target} POST_BUILD + COMMAND "${ELF_TO_RPL}" "$" "$.rpx" + COMMENT "Converting $ to rpx") +endmacro() diff --git a/crt-lite/CMakeLists.txt b/crt-lite/CMakeLists.txt new file mode 100644 index 00000000..c07de00b --- /dev/null +++ b/crt-lite/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.2) +project(wut-crt-lite) + +include(../cmake/wut-toolchain.cmake) + +set_property(SOURCE crt0.S PROPERTY LANGUAGE C) + +add_library(crt-lite + crt0.S) +set_target_properties(crt-lite PROPERTIES + COMPILE_FLAGS "-fno-builtin -ffreestanding" + LINKER_FLAGS "-fPIC") +target_include_directories(crt-lite PRIVATE "../include") + +install(TARGETS crt-lite ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") diff --git a/crt-lite/crt0.s b/crt-lite/crt0.s new file mode 100644 index 00000000..65701059 --- /dev/null +++ b/crt-lite/crt0.s @@ -0,0 +1,15 @@ +.extern main +.extern exit + +.global _start +_start: + bl main + b exit + +.global __wrap___eabi +__wrap___eabi: + blr + +.global __init +__init: + blr