From ee3bb10df4f00374de607ef54bd57ab3aef69e80 Mon Sep 17 00:00:00 2001 From: fincs Date: Wed, 23 Jan 2019 19:30:07 +0100 Subject: [PATCH 01/32] First pass at adopting a devkitPro-style build system, see details: - Added wut_rules and wut/rpx/rpl.specs to share/ - Replaced wut's CMake-based buildsystem with a standard Makefile - Conflated all wut libraries into a single libwut.a library - wut's old buildsystems (CMake & plain make) are broken as a result, this will be fixed in the future - Docs, tests and samples are not buildable either at the moment - wutcrt/wutnewlib: - RPX start function is __rpx_start, while RPL is __rpl_start - __init/fini_wut_* functions are no longer weak - __init_wut/__fini_wut are instead weak - Removed _exit implementation - exit syscall now points to _Exit instead of pointing to itself - wutstdc++: - Renamed .cc files to .cpp - Temporarily disabled, due to an issue that will be addressed shortly - wutdevoptab: - Fixed uninitialized variable warnings in __wut_fs_read/write --- .gitignore | 3 + .gitmodules | 0 CMakeLists.txt | 38 ---- Makefile | 164 ++++++++++++++++++ cafe/CMakeLists.txt | 87 ---------- libraries/CMakeLists.txt | 18 -- libraries/libgfd/CMakeLists.txt | 15 -- libraries/libwhb/CMakeLists.txt | 42 ----- libraries/nn_swkbd/CMakeLists.txt | 14 -- libraries/wutcrt/CMakeLists.txt | 16 -- libraries/wutcrt/crt0_rpl.s | 4 +- libraries/wutcrt/crt0_rpx.s | 4 +- libraries/wutcrt/wut_crt.c | 53 ++---- libraries/wutdevoptab/CMakeLists.txt | 34 ---- libraries/wutdevoptab/devoptab_fs_read.c | 2 +- libraries/wutdevoptab/devoptab_fs_write.c | 2 +- libraries/wutmalloc/CMakeLists.txt | 9 - libraries/wutmalloc/wut_malloc.c | 2 +- libraries/wutnewlib/CMakeLists.txt | 15 -- libraries/wutnewlib/wut_newlib.c | 5 +- libraries/wutstdc++/CMakeLists.txt | 24 --- .../{wut_gthread.cc => wut_gthread.cpp} | 0 ...t_gthread_cond.cc => wut_gthread_cond.cpp} | 0 ...t_gthread_keys.cc => wut_gthread_keys.cpp} | 0 ...gthread_mutex.cc => wut_gthread_mutex.cpp} | 0 ...t_gthread_once.cc => wut_gthread_once.cpp} | 0 ...tex.cc => wut_gthread_recursive_mutex.cpp} | 0 ...hread_thread.cc => wut_gthread_thread.cpp} | 0 .../{wut_stdcpp.cc => wut_stdcpp.cpp} | 0 share/rpl.specs | 2 + share/rpx.specs | 2 + share/wut.specs | 4 + share/wut_rules | 52 ++++++ 33 files changed, 252 insertions(+), 359 deletions(-) delete mode 100644 .gitmodules delete mode 100644 CMakeLists.txt create mode 100644 Makefile delete mode 100644 cafe/CMakeLists.txt delete mode 100644 libraries/CMakeLists.txt delete mode 100644 libraries/libgfd/CMakeLists.txt delete mode 100644 libraries/libwhb/CMakeLists.txt delete mode 100644 libraries/nn_swkbd/CMakeLists.txt delete mode 100644 libraries/wutcrt/CMakeLists.txt delete mode 100644 libraries/wutdevoptab/CMakeLists.txt delete mode 100644 libraries/wutmalloc/CMakeLists.txt delete mode 100644 libraries/wutnewlib/CMakeLists.txt delete mode 100644 libraries/wutstdc++/CMakeLists.txt rename libraries/wutstdc++/{wut_gthread.cc => wut_gthread.cpp} (100%) rename libraries/wutstdc++/{wut_gthread_cond.cc => wut_gthread_cond.cpp} (100%) rename libraries/wutstdc++/{wut_gthread_keys.cc => wut_gthread_keys.cpp} (100%) rename libraries/wutstdc++/{wut_gthread_mutex.cc => wut_gthread_mutex.cpp} (100%) rename libraries/wutstdc++/{wut_gthread_once.cc => wut_gthread_once.cpp} (100%) rename libraries/wutstdc++/{wut_gthread_recursive_mutex.cc => wut_gthread_recursive_mutex.cpp} (100%) rename libraries/wutstdc++/{wut_gthread_thread.cc => wut_gthread_thread.cpp} (100%) rename libraries/wutstdc++/{wut_stdcpp.cc => wut_stdcpp.cpp} (100%) create mode 100644 share/rpl.specs create mode 100644 share/rpx.specs create mode 100644 share/wut.specs create mode 100644 share/wut_rules diff --git a/.gitignore b/.gitignore index b1d67809..a6f793c3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,12 @@ build/ +release/ +debug/ lib/ *.a *.o *.d *.elf +*.bz2 docs/html/ .vs/ CMakeSettings.json diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e69de29b..00000000 diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 27b298d5..00000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -set(WUT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}") -set(ENV{WUT_ROOT} "${WUT_ROOT}") -set(CMAKE_TOOLCHAIN_FILE "${WUT_ROOT}/share/wut.toolchain.cmake") - -project(wut) -option(WUT_BUILD_DOCS "Build documentation" OFF) - -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/lib") -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/lib") - -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/lib") -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/lib") - -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/bin") -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/bin") - -if(WUT_BUILD_DOCS) - add_subdirectory(docs) -endif() - -find_program(WUT_RPLIMPORTGEN NAMES rplimportgen PATHS "${DEVKITPRO}/tools/bin") -if(NOT WUT_RPLIMPORTGEN) - message(FATAL_ERROR "Could not find rplimportgen.") -endif() - -add_subdirectory(cafe) -add_subdirectory(libraries) - -install(DIRECTORY "${CMAKE_SOURCE_DIR}/include/" - DESTINATION "${CMAKE_INSTALL_PREFIX}/include" - FILES_MATCHING PATTERN "*.h*") - -install(DIRECTORY "${CMAKE_SOURCE_DIR}/share/" - DESTINATION "${CMAKE_INSTALL_PREFIX}/share") diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..144a239a --- /dev/null +++ b/Makefile @@ -0,0 +1,164 @@ + +TOPDIR ?= $(CURDIR) +include $(TOPDIR)/share/wut_rules + +export WUT_MAJOR := 1 +export WUT_MINOR := 0 +export WUT_PATCH := 0 + +VERSION := $(WUT_MAJOR).$(WUT_MINOR).$(WUT_PATCH) + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +#--------------------------------------------------------------------------------- +TARGET := wut +#BUILD := build +SOURCES := cafe \ + libraries/wutcrt \ + libraries/wutnewlib \ + libraries/wutstdc++ \ + libraries/wutmalloc \ + libraries/wutdevoptab \ + libraries/libwhb/src \ + libraries/libgfd/src \ + libraries/nn_swkbd +DATA := data +INCLUDES := include \ + libraries/libwhb/include \ + libraries/libgfd/include \ + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +CFLAGS := -g -Wall -Werror -save-temps \ + -ffunction-sections -fdata-sections \ + $(MACHDEP) \ + $(BUILD_CFLAGS) + +CFLAGS += $(INCLUDE) -D__WIIU__ -D__WUT__ + +CXXFLAGS := $(CFLAGS) -std=gnu++17 + +ASFLAGS := -g $(MACHDEP) + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export TOPDIR := $(CURDIR) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +DEFFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.def))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SRC := $(DEFFILES:.def=.o) $(SFILES:.s=.o) $(CFILES:.c=.o) $(CPPFILES:.cpp=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SRC) +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I. + +.PHONY: all dist-bin dist-src dist install clean + +#--------------------------------------------------------------------------------- +all: lib/libwut.a lib/libwutd.a + +dist-bin: all + @tar --exclude=*~ -cjf wut-$(VERSION).tar.bz2 include lib share -C libraries/libwhb include -C ../libgfd include + +dist-src: + @tar --exclude=*~ -cjf wut-src-$(VERSION).tar.bz2 cafe include libraries share Makefile + +dist: dist-src dist-bin + +install: dist-bin + mkdir -p $(DESTDIR)$(DEVKITPRO)/wut + bzip2 -cd wut-$(VERSION).tar.bz2 | tar -xf - -C $(DESTDIR)$(DEVKITPRO)/wut + +lib: + @[ -d $@ ] || mkdir -p $@ + +release: + @[ -d $@ ] || mkdir -p $@ + +debug: + @[ -d $@ ] || mkdir -p $@ + +lib/libwut.a : lib release $(SOURCES) $(INCLUDES) + @$(MAKE) BUILD=release OUTPUT=$(CURDIR)/$@ \ + BUILD_CFLAGS="-DNDEBUG=1 -O2" \ + DEPSDIR=$(CURDIR)/release \ + --no-print-directory -C release \ + -f $(CURDIR)/Makefile + +lib/libwutd.a : lib debug $(SOURCES) $(INCLUDES) + @$(MAKE) BUILD=debug OUTPUT=$(CURDIR)/$@ \ + BUILD_CFLAGS="-DDEBUG=1 -Og" \ + DEPSDIR=$(CURDIR)/debug \ + --no-print-directory -C debug \ + -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -rf release debug lib + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT) : $(OFILES) + +$(OFILES_SRC) : $(HFILES) + +#--------------------------------------------------------------------------------- +%_bin.h %.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- + diff --git a/cafe/CMakeLists.txt b/cafe/CMakeLists.txt deleted file mode 100644 index bf4b0bf9..00000000 --- a/cafe/CMakeLists.txt +++ /dev/null @@ -1,87 +0,0 @@ -cmake_minimum_required(VERSION 3.2) - -# Load up the in-tree toolchain -set(WUT_ROOT "{CMAKE_CURRENT_SOURCE_DIR}/.." CACHE STRING "") -set(WUT_RPLIMPORTGEN "" CACHE STRING "") -set(ENV{WUT_ROOT} ${WUT_ROOT}) -set(CMAKE_TOOLCHAIN_FILE $ENV{WUT_ROOT}/share/wut.toolchain.cmake) - -project(cafe C CXX) -enable_language(ASM) - -macro(add_cafe_library target) - add_custom_command( - OUTPUT ${target}.s - COMMAND ${WUT_RPLIMPORTGEN} ${CMAKE_CURRENT_SOURCE_DIR}/${target}.def ${target}.s - DEPENDS ${target}.def) - - add_library(${target} STATIC ${target}.s) - install(TARGETS ${target} ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") -endmacro() - -add_cafe_library(avm) -add_cafe_library(camera) -add_cafe_library(coreinit) -add_cafe_library(dc) -add_cafe_library(dmae) -add_cafe_library(drmapp) -add_cafe_library(erreula) -add_cafe_library(gx2) -add_cafe_library(h264) -add_cafe_library(lzma920) -add_cafe_library(mic) -add_cafe_library(nfc) -add_cafe_library(nio_prof) -add_cafe_library(nlibcurl) -add_cafe_library(nlibnss) -add_cafe_library(nlibnss2) -add_cafe_library(nn_ac) -add_cafe_library(nn_acp) -add_cafe_library(nn_act) -add_cafe_library(nn_aoc) -add_cafe_library(nn_boss) -add_cafe_library(nn_ccr) -add_cafe_library(nn_cmpt) -add_cafe_library(nn_dlp) -add_cafe_library(nn_ec) -add_cafe_library(nn_fp) -add_cafe_library(nn_hai) -add_cafe_library(nn_hpad) -add_cafe_library(nn_idbe) -add_cafe_library(nn_ndm) -add_cafe_library(nn_nets2) -add_cafe_library(nn_nfp) -add_cafe_library(nn_nim) -add_cafe_library(nn_olv) -add_cafe_library(nn_pdm) -add_cafe_library(nn_save) -add_cafe_library(nn_sl) -add_cafe_library(nn_spm) -add_cafe_library(nn_temp) -add_cafe_library(nn_uds) -add_cafe_library(nn_vctl) -add_cafe_library(nsysccr) -add_cafe_library(nsyshid) -add_cafe_library(nsyskbd) -add_cafe_library(nsysnet) -add_cafe_library(nsysuhs) -add_cafe_library(nsysuvd) -add_cafe_library(ntag) -add_cafe_library(padscore) -add_cafe_library(proc_ui) -add_cafe_library(snd_core) -add_cafe_library(snd_user) -add_cafe_library(sndcore2) -add_cafe_library(snduser2) -add_cafe_library(swkbd) -add_cafe_library(sysapp) -add_cafe_library(tcl) -add_cafe_library(tve) -add_cafe_library(uac) -add_cafe_library(uac_rpl) -add_cafe_library(usb_mic) -add_cafe_library(uvc) -add_cafe_library(uvd) -add_cafe_library(vpad) -add_cafe_library(vpadbase) -add_cafe_library(zlib125) diff --git a/libraries/CMakeLists.txt b/libraries/CMakeLists.txt deleted file mode 100644 index 4e7c66fd..00000000 --- a/libraries/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -cmake_minimum_required(VERSION 3.2) - -# Load up the in-tree toolchain -set(WUT_ROOT "{CMAKE_CURRENT_SOURCE_DIR}/.." CACHE STRING "") -set(ENV{WUT_ROOT} ${WUT_ROOT}) -set(CMAKE_TOOLCHAIN_FILE $ENV{WUT_ROOT}/share/wut.toolchain.cmake) - -project(libraries C) - -add_definitions(-Wall -Werror) -add_subdirectory(libgfd) -add_subdirectory(libwhb) -add_subdirectory(nn_swkbd) -add_subdirectory(wutcrt) -add_subdirectory(wutdevoptab) -add_subdirectory(wutmalloc) -add_subdirectory(wutnewlib) -add_subdirectory(wutstdc++) diff --git a/libraries/libgfd/CMakeLists.txt b/libraries/libgfd/CMakeLists.txt deleted file mode 100644 index d031a826..00000000 --- a/libraries/libgfd/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(libgfd) - -add_library(gfd STATIC - src/gfd.c - include/gfd.h) - -target_include_directories(gfd PRIVATE "../../include") -target_include_directories(gfd PUBLIC "include") - -install(TARGETS gfd - ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") -install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ - DESTINATION "${CMAKE_INSTALL_PREFIX}/include" - FILES_MATCHING PATTERN "*.h*") diff --git a/libraries/libwhb/CMakeLists.txt b/libraries/libwhb/CMakeLists.txt deleted file mode 100644 index 31d85433..00000000 --- a/libraries/libwhb/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(libwhb) - -add_library(whb STATIC - src/commandserver.c - src/console.c - src/crash.c - src/file.c - src/gfx.c - src/gfx_heap.c - src/gfx_heap.h - src/gfx_shader.c - src/gfx_texture.c - src/libmanager.c - src/log.c - src/log_cafe.c - src/log_udp.c - src/proc.c - src/sdcard.c - include/whb/align.h - include/whb/commandserver.h - include/whb/crash.h - include/whb/file.h - include/whb/gfx.h - include/whb/libmanager.h - include/whb/log_cafe.h - include/whb/log_console.h - include/whb/log.h - include/whb/log_udp.h - include/whb/proc.h - include/whb/sdcard.h) - -target_include_directories(whb PRIVATE "../../include") -target_include_directories(whb PRIVATE "../libgfd/include") -target_include_directories(whb PUBLIC "include") - -install(TARGETS whb - ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") -install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ - DESTINATION "${CMAKE_INSTALL_PREFIX}/include" - FILES_MATCHING PATTERN "*.h*") - diff --git a/libraries/nn_swkbd/CMakeLists.txt b/libraries/nn_swkbd/CMakeLists.txt deleted file mode 100644 index 702c4deb..00000000 --- a/libraries/nn_swkbd/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(nn_swkbd CXX) - -add_library(nn_swkbd - nn_swkbd.cpp) - -target_include_directories(nn_swkbd - PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include" "${WUT_ROOT}/include") - -install(TARGETS nn_swkbd - ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") -install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/" - DESTINATION "${CMAKE_INSTALL_PREFIX}/include" - FILES_MATCHING PATTERN "*.h*") diff --git a/libraries/wutcrt/CMakeLists.txt b/libraries/wutcrt/CMakeLists.txt deleted file mode 100644 index b293b824..00000000 --- a/libraries/wutcrt/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(wutcrt C ASM) - -add_library(wutcrt - crt0_rpx.s - wut_crt.c) - -add_library(wutcrtrpl - crt0_rpl.s - wut_crt.c) - -target_include_directories(wutcrt PRIVATE "${WUT_ROOT}/include") -target_include_directories(wutcrtrpl PRIVATE "${WUT_ROOT}/include") - -install(TARGETS wutcrt wutcrtrpl - ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") diff --git a/libraries/wutcrt/crt0_rpl.s b/libraries/wutcrt/crt0_rpl.s index 82ac12e1..1ed6d91a 100644 --- a/libraries/wutcrt/crt0_rpl.s +++ b/libraries/wutcrt/crt0_rpl.s @@ -3,8 +3,8 @@ .extern __init_wut .extern __fini_wut -.global _start -_start: +.global __rpl_start +__rpl_start: stwu 1, -0x14(1) mflr 0 stw 0, 0x18(1) diff --git a/libraries/wutcrt/crt0_rpx.s b/libraries/wutcrt/crt0_rpx.s index 319bfdeb..c80c6696 100644 --- a/libraries/wutcrt/crt0_rpx.s +++ b/libraries/wutcrt/crt0_rpx.s @@ -3,8 +3,8 @@ .extern __init_wut .extern __fini_wut -.global _start -_start: +.global __rpx_start +__rpx_start: stwu 1, -0x14(1) mflr 0 stw 0, 0x18(1) diff --git a/libraries/wutcrt/wut_crt.c b/libraries/wutcrt/wut_crt.c index 80d80978..7eecbbfa 100644 --- a/libraries/wutcrt/wut_crt.c +++ b/libraries/wutcrt/wut_crt.c @@ -1,48 +1,23 @@ -extern void __init_wut_newlib() __attribute__((weak)); -extern void __init_wut_devoptab() __attribute__((weak)); -extern void __init_wut_stdcpp() __attribute__((weak)); +void __init_wut_newlib(); +void __init_wut_stdcpp(); +void __init_wut_devoptab(); -extern void __fini_wut_devoptab() __attribute__((weak)); -extern void __fini_wut_newlib() __attribute__((weak)); -extern void __fini_wut_stdcpp() __attribute__((weak)); +void __fini_wut_newlib(); +void __fini_wut_stdcpp(); +void __fini_wut_devoptab(); -void +void __attribute__((weak)) __init_wut() { - if (__init_wut_newlib) { - __init_wut_newlib(); - } - - if (__init_wut_devoptab) { - __init_wut_devoptab(); - } - - if (__init_wut_stdcpp) { - __init_wut_stdcpp(); - } + __init_wut_newlib(); + //__init_wut_stdcpp(); + __init_wut_devoptab(); } -void +void __attribute__((weak)) __fini_wut() { - if (__fini_wut_stdcpp) { - __fini_wut_stdcpp(); - } - - if (__fini_wut_devoptab) { - __fini_wut_devoptab(); - } - - if (__fini_wut_newlib) { - __fini_wut_newlib(); - } -} - -// Forward newlib _exit to the coreinit.rpl _Exit -extern void _Exit(int status); - -void -_exit(int status) -{ - _Exit(status); + __fini_wut_devoptab(); + //__fini_wut_stdcpp(); + __fini_wut_newlib(); } diff --git a/libraries/wutdevoptab/CMakeLists.txt b/libraries/wutdevoptab/CMakeLists.txt deleted file mode 100644 index cdd1f3bf..00000000 --- a/libraries/wutdevoptab/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(wutdevoptab C) - -add_library(wutdevoptab - devoptab_fs.c - devoptab_fs_chdir.c - devoptab_fs_chmod.c - devoptab_fs_close.c - devoptab_fs_dirclose.c - devoptab_fs_dirnext.c - devoptab_fs_diropen.c - devoptab_fs_dirreset.c - devoptab_fs_fchmod.c - devoptab_fs_fstat.c - devoptab_fs_fsync.c - devoptab_fs_getmtime.c - devoptab_fs_link.c - devoptab_fs_mkdir.c - devoptab_fs_open.c - devoptab_fs_read.c - devoptab_fs_rename.c - devoptab_fs_rmdir.c - devoptab_fs_seek.c - devoptab_fs_stat.c - devoptab_fs_statvfs.c - devoptab_fs_truncate.c - devoptab_fs_unlink.c - devoptab_fs_utils.c - devoptab_fs_write.c) - -target_include_directories(wutdevoptab PRIVATE "${WUT_ROOT}/include") - -install(TARGETS wutdevoptab - ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") diff --git a/libraries/wutdevoptab/devoptab_fs_read.c b/libraries/wutdevoptab/devoptab_fs_read.c index 33df4ea9..52e1e582 100644 --- a/libraries/wutdevoptab/devoptab_fs_read.c +++ b/libraries/wutdevoptab/devoptab_fs_read.c @@ -6,7 +6,7 @@ __wut_fs_read(struct _reent *r, char *ptr, size_t len) { - FSStatus status; + FSStatus status = 0; FSCmdBlock cmd; uint8_t *alignedReadBuffer; uint32_t bytes, bytesRead; diff --git a/libraries/wutdevoptab/devoptab_fs_write.c b/libraries/wutdevoptab/devoptab_fs_write.c index cffdb167..93b8ef24 100644 --- a/libraries/wutdevoptab/devoptab_fs_write.c +++ b/libraries/wutdevoptab/devoptab_fs_write.c @@ -6,7 +6,7 @@ __wut_fs_write(struct _reent *r, const char *ptr, size_t len) { - FSStatus status; + FSStatus status = 0; FSCmdBlock cmd; uint8_t *alignedWriteBuffer; uint32_t bytes, bytesWritten; diff --git a/libraries/wutmalloc/CMakeLists.txt b/libraries/wutmalloc/CMakeLists.txt deleted file mode 100644 index 80ff1962..00000000 --- a/libraries/wutmalloc/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(wutmalloc C) - -add_library(wutmalloc - wut_malloc.c) -target_include_directories(wutmalloc PRIVATE "${WUT_ROOT}/include") - -install(TARGETS wutmalloc - ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") diff --git a/libraries/wutmalloc/wut_malloc.c b/libraries/wutmalloc/wut_malloc.c index a929006f..0663219e 100644 --- a/libraries/wutmalloc/wut_malloc.c +++ b/libraries/wutmalloc/wut_malloc.c @@ -5,7 +5,7 @@ #include // Limit sbrk heap to 128kb -uint32_t __attribute__((weak)) __wut_heap_max_size = 128 * 1024; +uint32_t __wut_heap_max_size = 128 * 1024; void * _malloc_r(struct _reent *r, size_t size) diff --git a/libraries/wutnewlib/CMakeLists.txt b/libraries/wutnewlib/CMakeLists.txt deleted file mode 100644 index 9b011d98..00000000 --- a/libraries/wutnewlib/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(wutnewlib C) - -add_library(wutnewlib - wut_clock.c - wut_gettod_r.c - wut_lock.c - wut_malloc_lock.c - wut_nanosleep.c - wut_newlib.c - wut_sbrk.c) -target_include_directories(wutnewlib PRIVATE "${WUT_ROOT}/include") - -install(TARGETS wutnewlib - ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") diff --git a/libraries/wutnewlib/wut_newlib.c b/libraries/wutnewlib/wut_newlib.c index 70fd641f..d4af5987 100644 --- a/libraries/wutnewlib/wut_newlib.c +++ b/libraries/wutnewlib/wut_newlib.c @@ -1,6 +1,9 @@ #include "wut_newlib.h" #include +// Forward newlib _exit to the coreinit.rpl _Exit +extern void _Exit(int status); + static void __init_wut_syscall_array() { @@ -11,7 +14,7 @@ __init_wut_syscall_array() __syscalls.lock_release = __wut_lock_release; __syscalls.malloc_lock = __wut_malloc_lock; __syscalls.malloc_unlock = __wut_malloc_unlock; - __syscalls.exit = exit; + __syscalls.exit = _Exit; __syscalls.gettod_r = __wut_gettod_r; __syscalls.clock_gettime = __wut_clock_gettime; __syscalls.clock_settime = __wut_clock_settime; diff --git a/libraries/wutstdc++/CMakeLists.txt b/libraries/wutstdc++/CMakeLists.txt deleted file mode 100644 index 7d16c48b..00000000 --- a/libraries/wutstdc++/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(wutstdc++ CXX) - -add_library(wutstdc++ - wut_gthread.cc - wut_gthread_cond.cc - wut_gthread_keys.cc - wut_gthread_mutex.cc - wut_gthread_once.cc - wut_gthread_recursive_mutex.cc - wut_gthread_thread.cc - wut_stdcpp.cc) - -target_compile_definitions(wutstdc++ - PRIVATE _GLIBCXX_HAS_GTHREADS) - -target_include_directories(wutstdc++ - PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include" "${WUT_ROOT}/include") - -install(TARGETS wutstdc++ - ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib") -install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/" - DESTINATION "${CMAKE_INSTALL_PREFIX}/include" - FILES_MATCHING PATTERN "*.h*") diff --git a/libraries/wutstdc++/wut_gthread.cc b/libraries/wutstdc++/wut_gthread.cpp similarity index 100% rename from libraries/wutstdc++/wut_gthread.cc rename to libraries/wutstdc++/wut_gthread.cpp diff --git a/libraries/wutstdc++/wut_gthread_cond.cc b/libraries/wutstdc++/wut_gthread_cond.cpp similarity index 100% rename from libraries/wutstdc++/wut_gthread_cond.cc rename to libraries/wutstdc++/wut_gthread_cond.cpp diff --git a/libraries/wutstdc++/wut_gthread_keys.cc b/libraries/wutstdc++/wut_gthread_keys.cpp similarity index 100% rename from libraries/wutstdc++/wut_gthread_keys.cc rename to libraries/wutstdc++/wut_gthread_keys.cpp diff --git a/libraries/wutstdc++/wut_gthread_mutex.cc b/libraries/wutstdc++/wut_gthread_mutex.cpp similarity index 100% rename from libraries/wutstdc++/wut_gthread_mutex.cc rename to libraries/wutstdc++/wut_gthread_mutex.cpp diff --git a/libraries/wutstdc++/wut_gthread_once.cc b/libraries/wutstdc++/wut_gthread_once.cpp similarity index 100% rename from libraries/wutstdc++/wut_gthread_once.cc rename to libraries/wutstdc++/wut_gthread_once.cpp diff --git a/libraries/wutstdc++/wut_gthread_recursive_mutex.cc b/libraries/wutstdc++/wut_gthread_recursive_mutex.cpp similarity index 100% rename from libraries/wutstdc++/wut_gthread_recursive_mutex.cc rename to libraries/wutstdc++/wut_gthread_recursive_mutex.cpp diff --git a/libraries/wutstdc++/wut_gthread_thread.cc b/libraries/wutstdc++/wut_gthread_thread.cpp similarity index 100% rename from libraries/wutstdc++/wut_gthread_thread.cc rename to libraries/wutstdc++/wut_gthread_thread.cpp diff --git a/libraries/wutstdc++/wut_stdcpp.cc b/libraries/wutstdc++/wut_stdcpp.cpp similarity index 100% rename from libraries/wutstdc++/wut_stdcpp.cc rename to libraries/wutstdc++/wut_stdcpp.cpp diff --git a/share/rpl.specs b/share/rpl.specs new file mode 100644 index 00000000..8d211a5e --- /dev/null +++ b/share/rpl.specs @@ -0,0 +1,2 @@ +*wut_entry: +--entry=__rpl_start diff --git a/share/rpx.specs b/share/rpx.specs new file mode 100644 index 00000000..9d2a1adc --- /dev/null +++ b/share/rpx.specs @@ -0,0 +1,2 @@ +*wut_entry: +--entry=__rpx_start diff --git a/share/wut.specs b/share/wut.specs new file mode 100644 index 00000000..75905bcd --- /dev/null +++ b/share/wut.specs @@ -0,0 +1,4 @@ +%rename link old_link + +*link: +%(old_link) -T %:getenv(DEVKITPRO /wut/share/wut.ld) --gc-sections --emit-relocs -z nocopyreloc %(wut_entry) diff --git a/share/wut_rules b/share/wut_rules new file mode 100644 index 00000000..6e3aa48a --- /dev/null +++ b/share/wut_rules @@ -0,0 +1,52 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=/devkitPro") +endif + +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=/devkitPro/devkitPPC") +endif + +include $(DEVKITPPC)/base_rules + +PORTLIBS := $(PORTLIBS_PATH)/wiiu $(PORTLIBS_PATH)/ppc + +export PATH := $(PORTLIBS_PATH)/wiiu/bin:$(PORTLIBS_PATH)/ppc/bin:$(PATH) + +WUT_ROOT ?= $(DEVKITPRO)/wut + +RPXSPECS := -specs=$(WUT_ROOT)/share/wut.specs -specs=$(WUT_ROOT)/share/rpx.specs +RPLSPECS := -specs=$(WUT_ROOT)/share/wut.specs -specs=$(WUT_ROOT)/share/rpl.specs + +MACHDEP = -DESPRESSO -mcpu=750 -meabi -mhard-float + +#--------------------------------------------------------------------------------- +%.rpx: %.elf + @cp $< $*.strip.elf + @$(STRIP) -g $*.strip.elf + @elf2rpl $*.strip.elf $@ + @rm $*.strip.elf + @echo built ... $(notdir $@) + +#--------------------------------------------------------------------------------- +%.rpl: %.elf + @cp $< $*.strip.elf + @$(STRIP) -g $*.strip.elf + @elf2rpl --rpl $*.strip.elf $@ + @rm $*.strip.elf + @echo built ... $(notdir $@) + +#--------------------------------------------------------------------------------- +%.elf: + @echo linking ... $(notdir $@) + @$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@ + @$(NM) -CSn $@ > $(notdir $*.lst) + +#--------------------------------------------------------------------------------- +%.o: %.def + @echo $(notdir $<) + @rplimportgen $< $*.s + $(CC) -x assembler-with-cpp $(ASFLAGS) -c $*.s -o $@ $(ERROR_FILTER) From 26ac7b3ff2940745fb21cce3c1721b2b6ebdeb1c Mon Sep 17 00:00:00 2001 From: fincs Date: Wed, 23 Jan 2019 19:43:05 +0100 Subject: [PATCH 02/32] wutmalloc: Bugfixes, see details: - Added (dummy) __init/fini_wut_malloc stubs called by wutcrt in order to ensure that wutmalloc gets linked in - malloc/realloc/calloc now properly set errno to ENOMEM during failure - realloc no longer fails if ptr==NULL (in this case it works like a regular malloc) - realloc no longer does an out of bounds copy if the new size is smaller than the old size - free(NULL) is now supported as per the C standard - Disabled sbrk/malloc-lock support code in wutnewlib because newlib's malloc is replaced with wutmalloc --- libraries/wutcrt/wut_crt.c | 4 ++++ libraries/wutmalloc/wut_malloc.c | 41 +++++++++++++++++++++++++------- libraries/wutnewlib/wut_newlib.c | 12 +++++----- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/libraries/wutcrt/wut_crt.c b/libraries/wutcrt/wut_crt.c index 7eecbbfa..076957ec 100644 --- a/libraries/wutcrt/wut_crt.c +++ b/libraries/wutcrt/wut_crt.c @@ -1,7 +1,9 @@ +void __init_wut_malloc(); void __init_wut_newlib(); void __init_wut_stdcpp(); void __init_wut_devoptab(); +void __fini_wut_malloc(); void __fini_wut_newlib(); void __fini_wut_stdcpp(); void __fini_wut_devoptab(); @@ -9,6 +11,7 @@ void __fini_wut_devoptab(); void __attribute__((weak)) __init_wut() { + __init_wut_malloc(); __init_wut_newlib(); //__init_wut_stdcpp(); __init_wut_devoptab(); @@ -20,4 +23,5 @@ __fini_wut() __fini_wut_devoptab(); //__fini_wut_stdcpp(); __fini_wut_newlib(); + __fini_wut_malloc(); } diff --git a/libraries/wutmalloc/wut_malloc.c b/libraries/wutmalloc/wut_malloc.c index 0663219e..c4857218 100644 --- a/libraries/wutmalloc/wut_malloc.c +++ b/libraries/wutmalloc/wut_malloc.c @@ -3,41 +3,64 @@ #include #include #include +#include // Limit sbrk heap to 128kb uint32_t __wut_heap_max_size = 128 * 1024; +void +__init_wut_malloc(void) +{ +} + +void +__fini_wut_malloc(void) +{ +} + void * _malloc_r(struct _reent *r, size_t size) { - return MEMAllocFromDefaultHeap(size); + void *ptr = MEMAllocFromDefaultHeap(size); + if (!ptr) { + r->_errno = ENOMEM; + } + return ptr; } void _free_r(struct _reent *r, void *ptr) { - MEMFreeToDefaultHeap(ptr); + if (ptr) { + MEMFreeToDefaultHeap(ptr); + } } void * _realloc_r(struct _reent *r, void *ptr, size_t size) { - void *new_ptr = _malloc_r(r, size); - if (!ptr || !new_ptr) { + void *new_ptr = MEMAllocFromDefaultHeap(size); + if (!new_ptr) { + r->_errno = ENOMEM; return new_ptr; } - memcpy(new_ptr, ptr, MEMGetSizeForMBlockExpHeap(ptr)); - _free_r(r, ptr); + if (ptr) { + size_t old_size = MEMGetSizeForMBlockExpHeap(ptr); + memcpy(new_ptr, ptr, old_size <= size ? old_size : size); + MEMFreeToDefaultHeap(ptr); + } return new_ptr; } void * _calloc_r(struct _reent *r, size_t num, size_t size) { - void *ptr = _malloc_r(r, num * size); + void *ptr = MEMAllocFromDefaultHeap(num * size); if (ptr) { memset(ptr, 0, num * size); + } else { + r->_errno = ENOMEM; } return ptr; @@ -75,13 +98,13 @@ _malloc_usable_size_r(struct _reent *r, void *ptr) void * _valloc_r(struct _reent *r, size_t size) { - return _memalign_r(r, OS_PAGE_SIZE, size); + return MEMAllocFromDefaultHeapEx(size, OS_PAGE_SIZE); } void * _pvalloc_r(struct _reent *r, size_t size) { - return _memalign_r(r, OS_PAGE_SIZE, (size + (OS_PAGE_SIZE - 1)) & ~(OS_PAGE_SIZE - 1)); + return MEMAllocFromDefaultHeapEx((size + (OS_PAGE_SIZE - 1)) & ~(OS_PAGE_SIZE - 1), OS_PAGE_SIZE); } int diff --git a/libraries/wutnewlib/wut_newlib.c b/libraries/wutnewlib/wut_newlib.c index d4af5987..4eda7d09 100644 --- a/libraries/wutnewlib/wut_newlib.c +++ b/libraries/wutnewlib/wut_newlib.c @@ -7,13 +7,13 @@ extern void _Exit(int status); static void __init_wut_syscall_array() { - __syscalls.sbrk_r = __wut_sbrk_r; + //__syscalls.sbrk_r = __wut_sbrk_r; __syscalls.lock_init = __wut_lock_init; __syscalls.lock_close = __wut_lock_close; __syscalls.lock_acquire = __wut_lock_acquire; __syscalls.lock_release = __wut_lock_release; - __syscalls.malloc_lock = __wut_malloc_lock; - __syscalls.malloc_unlock = __wut_malloc_unlock; + //__syscalls.malloc_lock = __wut_malloc_lock; + //__syscalls.malloc_unlock = __wut_malloc_unlock; __syscalls.exit = _Exit; __syscalls.gettod_r = __wut_gettod_r; __syscalls.clock_gettime = __wut_clock_gettime; @@ -25,13 +25,13 @@ __init_wut_syscall_array() void __init_wut_newlib() { - __init_wut_sbrk_heap(); - __init_wut_malloc_lock(); + //__init_wut_sbrk_heap(); + //__init_wut_malloc_lock(); __init_wut_syscall_array(); } void __fini_wut_newlib() { - __fini_wut_sbrk_heap(); + //__fini_wut_sbrk_heap(); } From 3e179891e9c1b1ad6211a33c13bc06aa480fa48a Mon Sep 17 00:00:00 2001 From: fincs Date: Thu, 24 Jan 2019 22:56:48 +0100 Subject: [PATCH 03/32] Make sure .fexports/.dexports sections don't get garbage collected --- share/wut.ld | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/wut.ld b/share/wut.ld index e666586b..775e7c66 100644 --- a/share/wut.ld +++ b/share/wut.ld @@ -143,8 +143,8 @@ SECTIONS } > relmem . = ORIGIN(loadmem); - .fexports ALIGN(32) : { *(.fexports) } > loadmem - .dexports ALIGN(32) : { *(.dexports) } > loadmem + .fexports ALIGN(32) : { KEEP( *(.fexports) ) } > loadmem + .dexports ALIGN(32) : { KEEP( *(.dexports) ) } > loadmem .fimport_avm ALIGN(16) : { *(.fimport_avm) } > loadmem .fimport_camera ALIGN(16) : { *(.fimport_camera) } > loadmem From 0b920cf9b9eef766f982faac2300f75a235d2507 Mon Sep 17 00:00:00 2001 From: fincs Date: Thu, 24 Jan 2019 22:59:02 +0100 Subject: [PATCH 04/32] Automatically link wutstdc++ when C++ is used --- libraries/wutcrt/wut_crt.c | 12 ++++++++---- libraries/wutstdc++/wut_stdcpp.cpp | 11 +++++++++++ share/wut.specs | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/libraries/wutcrt/wut_crt.c b/libraries/wutcrt/wut_crt.c index 076957ec..fa15cdbf 100644 --- a/libraries/wutcrt/wut_crt.c +++ b/libraries/wutcrt/wut_crt.c @@ -1,11 +1,11 @@ void __init_wut_malloc(); void __init_wut_newlib(); -void __init_wut_stdcpp(); +extern void __init_wut_stdcpp() __attribute__((weak)); void __init_wut_devoptab(); void __fini_wut_malloc(); void __fini_wut_newlib(); -void __fini_wut_stdcpp(); +extern void __fini_wut_stdcpp() __attribute__((weak)); void __fini_wut_devoptab(); void __attribute__((weak)) @@ -13,7 +13,9 @@ __init_wut() { __init_wut_malloc(); __init_wut_newlib(); - //__init_wut_stdcpp(); + if (__init_wut_stdcpp) { + __init_wut_stdcpp(); + } __init_wut_devoptab(); } @@ -21,7 +23,9 @@ void __attribute__((weak)) __fini_wut() { __fini_wut_devoptab(); - //__fini_wut_stdcpp(); + if (__fini_wut_stdcpp) { + __fini_wut_stdcpp(); + } __fini_wut_newlib(); __fini_wut_malloc(); } diff --git a/libraries/wutstdc++/wut_stdcpp.cpp b/libraries/wutstdc++/wut_stdcpp.cpp index f15f6df2..530e950e 100644 --- a/libraries/wutstdc++/wut_stdcpp.cpp +++ b/libraries/wutstdc++/wut_stdcpp.cpp @@ -1,5 +1,16 @@ #include "wut_gthread.h" +__asm__ __volatile__( + "\t.section\t.text.__wrap___gxx_personality_v0,\"ax\",@progbits\n" + "\t.align\t2\n" + "\t.globl\t__wrap___gxx_personality_v0\n" + "\t.type\t__wrap___gxx_personality_v0, @function\n" + "__wrap___gxx_personality_v0:\n" + "\t.cfi_startproc\n" + "\tb\t__real___gxx_personality_v0\n" + "\t.cfi_endproc" +); + extern "C" void __init_wut_stdcpp() { diff --git a/share/wut.specs b/share/wut.specs index 75905bcd..6b44cfdb 100644 --- a/share/wut.specs +++ b/share/wut.specs @@ -1,4 +1,4 @@ %rename link old_link *link: -%(old_link) -T %:getenv(DEVKITPRO /wut/share/wut.ld) --gc-sections --emit-relocs -z nocopyreloc %(wut_entry) +%(old_link) -T %:getenv(DEVKITPRO /wut/share/wut.ld) --gc-sections --emit-relocs -z nocopyreloc -wrap __gxx_personality_v0 %(wut_entry) From 370eeb28e94ccfcff981842bc55a16258fec252c Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 16:44:42 +1000 Subject: [PATCH 05/32] wutstdc++: Move __gxx_personality to dedicated Assembly file I was getting issues with __volatile__ for unknown reason, so moving this to a dedicated file sidesteps the issue entirely and passes this straight to GAS. --- libraries/wutstdc++/wut_stdcpp.cpp | 11 ----------- libraries/wutstdc++/wut_stdcpp_personality.s | 10 ++++++++++ 2 files changed, 10 insertions(+), 11 deletions(-) create mode 100644 libraries/wutstdc++/wut_stdcpp_personality.s diff --git a/libraries/wutstdc++/wut_stdcpp.cpp b/libraries/wutstdc++/wut_stdcpp.cpp index 530e950e..f15f6df2 100644 --- a/libraries/wutstdc++/wut_stdcpp.cpp +++ b/libraries/wutstdc++/wut_stdcpp.cpp @@ -1,16 +1,5 @@ #include "wut_gthread.h" -__asm__ __volatile__( - "\t.section\t.text.__wrap___gxx_personality_v0,\"ax\",@progbits\n" - "\t.align\t2\n" - "\t.globl\t__wrap___gxx_personality_v0\n" - "\t.type\t__wrap___gxx_personality_v0, @function\n" - "__wrap___gxx_personality_v0:\n" - "\t.cfi_startproc\n" - "\tb\t__real___gxx_personality_v0\n" - "\t.cfi_endproc" -); - extern "C" void __init_wut_stdcpp() { diff --git a/libraries/wutstdc++/wut_stdcpp_personality.s b/libraries/wutstdc++/wut_stdcpp_personality.s new file mode 100644 index 00000000..13b9e7f3 --- /dev/null +++ b/libraries/wutstdc++/wut_stdcpp_personality.s @@ -0,0 +1,10 @@ +.section .text.__wrap___gxx_personality_v0,"ax",@progbits +.align 2 + +.globl __wrap___gxx_personality_v0 +.type __wrap___gxx_personality_v0, @function + +__wrap___gxx_personality_v0: + .cfi_startproc + b __real___gxx_personality_v0 + .cfi_endproc From 5f1da6432ca40334e10219cb65e38fe90ff3f09c Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 18:39:03 +1000 Subject: [PATCH 06/32] samples: Move all into cmake directory, WUT_ROOT->DEVKITPRO/wut --- samples/{ => cmake}/CMakeLists.txt | 4 ++-- samples/{ => cmake}/content/README.txt | 0 samples/{ => cmake}/content/pos_col_shader.gsh | Bin samples/{ => cmake}/content/pos_col_shader.psh | 0 samples/{ => cmake}/content/pos_col_shader.vsh | 0 samples/{ => cmake}/curl/CMakeLists.txt | 2 +- samples/{ => cmake}/curl/main.c | 0 .../{ => cmake}/custom_default_heap/CMakeLists.txt | 2 +- samples/{ => cmake}/custom_default_heap/exports.def | 0 samples/{ => cmake}/custom_default_heap/main.c | 0 samples/{ => cmake}/gx2_triangle/CMakeLists.txt | 2 +- samples/{ => cmake}/gx2_triangle/main.c | 0 samples/{ => cmake}/helloworld/CMakeLists.txt | 2 +- samples/{ => cmake}/helloworld/main.c | 0 samples/{ => cmake}/helloworld_cpp/CMakeLists.txt | 2 +- samples/{ => cmake}/helloworld_cpp/main.cpp | 0 samples/{ => cmake}/my_first_rpl/CMakeLists.txt | 2 +- samples/{ => cmake}/my_first_rpl/exports.def | 0 samples/{ => cmake}/my_first_rpl/my_first_rpl.c | 0 samples/{ => cmake}/swkbd/CMakeLists.txt | 2 +- samples/{ => cmake}/swkbd/main.cpp | 0 21 files changed, 9 insertions(+), 9 deletions(-) rename samples/{ => cmake}/CMakeLists.txt (74%) rename samples/{ => cmake}/content/README.txt (100%) rename samples/{ => cmake}/content/pos_col_shader.gsh (100%) rename samples/{ => cmake}/content/pos_col_shader.psh (100%) rename samples/{ => cmake}/content/pos_col_shader.vsh (100%) rename samples/{ => cmake}/curl/CMakeLists.txt (85%) rename samples/{ => cmake}/curl/main.c (100%) rename samples/{ => cmake}/custom_default_heap/CMakeLists.txt (89%) rename samples/{ => cmake}/custom_default_heap/exports.def (100%) rename samples/{ => cmake}/custom_default_heap/main.c (100%) rename samples/{ => cmake}/gx2_triangle/CMakeLists.txt (86%) rename samples/{ => cmake}/gx2_triangle/main.c (100%) rename samples/{ => cmake}/helloworld/CMakeLists.txt (85%) rename samples/{ => cmake}/helloworld/main.c (100%) rename samples/{ => cmake}/helloworld_cpp/CMakeLists.txt (90%) rename samples/{ => cmake}/helloworld_cpp/main.cpp (100%) rename samples/{ => cmake}/my_first_rpl/CMakeLists.txt (85%) rename samples/{ => cmake}/my_first_rpl/exports.def (100%) rename samples/{ => cmake}/my_first_rpl/my_first_rpl.c (100%) rename samples/{ => cmake}/swkbd/CMakeLists.txt (88%) rename samples/{ => cmake}/swkbd/main.cpp (100%) diff --git a/samples/CMakeLists.txt b/samples/cmake/CMakeLists.txt similarity index 74% rename from samples/CMakeLists.txt rename to samples/cmake/CMakeLists.txt index 1f6f3a9b..aefae08e 100644 --- a/samples/CMakeLists.txt +++ b/samples/cmake/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.2) -set(CMAKE_TOOLCHAIN_FILE $ENV{WUT_ROOT}/share/wut.toolchain.cmake) +set(CMAKE_TOOLCHAIN_FILE $ENV{DEVKITPRO}/wut/share/wut.toolchain.cmake) project(samples) -include("${WUT_ROOT}/share/wut.cmake" REQUIRED) +include("${DEVKITPRO}/wut/share/wut.cmake" REQUIRED) add_subdirectory(curl) add_subdirectory(custom_default_heap) diff --git a/samples/content/README.txt b/samples/cmake/content/README.txt similarity index 100% rename from samples/content/README.txt rename to samples/cmake/content/README.txt diff --git a/samples/content/pos_col_shader.gsh b/samples/cmake/content/pos_col_shader.gsh similarity index 100% rename from samples/content/pos_col_shader.gsh rename to samples/cmake/content/pos_col_shader.gsh diff --git a/samples/content/pos_col_shader.psh b/samples/cmake/content/pos_col_shader.psh similarity index 100% rename from samples/content/pos_col_shader.psh rename to samples/cmake/content/pos_col_shader.psh diff --git a/samples/content/pos_col_shader.vsh b/samples/cmake/content/pos_col_shader.vsh similarity index 100% rename from samples/content/pos_col_shader.vsh rename to samples/cmake/content/pos_col_shader.vsh diff --git a/samples/curl/CMakeLists.txt b/samples/cmake/curl/CMakeLists.txt similarity index 85% rename from samples/curl/CMakeLists.txt rename to samples/cmake/curl/CMakeLists.txt index e4dd5bdb..2d3b5e48 100644 --- a/samples/curl/CMakeLists.txt +++ b/samples/cmake/curl/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.2) project(curl C) -include("${WUT_ROOT}/share/wut.cmake" REQUIRED) +include("${DEVKITPRO}/wut/share/wut.cmake" REQUIRED) add_executable(curl main.c) diff --git a/samples/curl/main.c b/samples/cmake/curl/main.c similarity index 100% rename from samples/curl/main.c rename to samples/cmake/curl/main.c diff --git a/samples/custom_default_heap/CMakeLists.txt b/samples/cmake/custom_default_heap/CMakeLists.txt similarity index 89% rename from samples/custom_default_heap/CMakeLists.txt rename to samples/cmake/custom_default_heap/CMakeLists.txt index a3de1747..bf1f6bd8 100644 --- a/samples/custom_default_heap/CMakeLists.txt +++ b/samples/cmake/custom_default_heap/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.2) project(custom_default_heap C) -include("${WUT_ROOT}/share/wut.cmake" REQUIRED) +include("${DEVKITPRO}/wut/share/wut.cmake" REQUIRED) add_executable(custom_default_heap main.c) diff --git a/samples/custom_default_heap/exports.def b/samples/cmake/custom_default_heap/exports.def similarity index 100% rename from samples/custom_default_heap/exports.def rename to samples/cmake/custom_default_heap/exports.def diff --git a/samples/custom_default_heap/main.c b/samples/cmake/custom_default_heap/main.c similarity index 100% rename from samples/custom_default_heap/main.c rename to samples/cmake/custom_default_heap/main.c diff --git a/samples/gx2_triangle/CMakeLists.txt b/samples/cmake/gx2_triangle/CMakeLists.txt similarity index 86% rename from samples/gx2_triangle/CMakeLists.txt rename to samples/cmake/gx2_triangle/CMakeLists.txt index 231f3d56..fcd4114a 100644 --- a/samples/gx2_triangle/CMakeLists.txt +++ b/samples/cmake/gx2_triangle/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.2) project(gx2_triangle C) -include("${WUT_ROOT}/share/wut.cmake" REQUIRED) +include("${DEVKITPRO}/wut/share/wut.cmake" REQUIRED) add_executable(gx2_triangle main.c) diff --git a/samples/gx2_triangle/main.c b/samples/cmake/gx2_triangle/main.c similarity index 100% rename from samples/gx2_triangle/main.c rename to samples/cmake/gx2_triangle/main.c diff --git a/samples/helloworld/CMakeLists.txt b/samples/cmake/helloworld/CMakeLists.txt similarity index 85% rename from samples/helloworld/CMakeLists.txt rename to samples/cmake/helloworld/CMakeLists.txt index 7fe9844e..e5a5d203 100644 --- a/samples/helloworld/CMakeLists.txt +++ b/samples/cmake/helloworld/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.2) project(helloworld C) -include("${WUT_ROOT}/share/wut.cmake" REQUIRED) +include("${DEVKITPRO}/wut/share/wut.cmake" REQUIRED) add_executable(helloworld main.c) diff --git a/samples/helloworld/main.c b/samples/cmake/helloworld/main.c similarity index 100% rename from samples/helloworld/main.c rename to samples/cmake/helloworld/main.c diff --git a/samples/helloworld_cpp/CMakeLists.txt b/samples/cmake/helloworld_cpp/CMakeLists.txt similarity index 90% rename from samples/helloworld_cpp/CMakeLists.txt rename to samples/cmake/helloworld_cpp/CMakeLists.txt index 5c8496a1..7bac5e28 100644 --- a/samples/helloworld_cpp/CMakeLists.txt +++ b/samples/cmake/helloworld_cpp/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.2) project(helloworld_cpp CXX) -include("${WUT_ROOT}/share/wut.cmake" REQUIRED) +include("${DEVKITPRO}/wut/share/wut.cmake" REQUIRED) add_executable(helloworld_cpp main.cpp) diff --git a/samples/helloworld_cpp/main.cpp b/samples/cmake/helloworld_cpp/main.cpp similarity index 100% rename from samples/helloworld_cpp/main.cpp rename to samples/cmake/helloworld_cpp/main.cpp diff --git a/samples/my_first_rpl/CMakeLists.txt b/samples/cmake/my_first_rpl/CMakeLists.txt similarity index 85% rename from samples/my_first_rpl/CMakeLists.txt rename to samples/cmake/my_first_rpl/CMakeLists.txt index dd8e0474..afcebab9 100644 --- a/samples/my_first_rpl/CMakeLists.txt +++ b/samples/cmake/my_first_rpl/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.2) project(my_first_rpl C) -include("${WUT_ROOT}/share/wut.cmake" REQUIRED) +include("${DEVKITPRO}/wut/share/wut.cmake" REQUIRED) add_executable(my_first_rpl my_first_rpl.c) diff --git a/samples/my_first_rpl/exports.def b/samples/cmake/my_first_rpl/exports.def similarity index 100% rename from samples/my_first_rpl/exports.def rename to samples/cmake/my_first_rpl/exports.def diff --git a/samples/my_first_rpl/my_first_rpl.c b/samples/cmake/my_first_rpl/my_first_rpl.c similarity index 100% rename from samples/my_first_rpl/my_first_rpl.c rename to samples/cmake/my_first_rpl/my_first_rpl.c diff --git a/samples/swkbd/CMakeLists.txt b/samples/cmake/swkbd/CMakeLists.txt similarity index 88% rename from samples/swkbd/CMakeLists.txt rename to samples/cmake/swkbd/CMakeLists.txt index 44ad7544..e64457c6 100644 --- a/samples/swkbd/CMakeLists.txt +++ b/samples/cmake/swkbd/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.2) project(swkbd CXX) -include("${WUT_ROOT}/share/wut.cmake" REQUIRED) +include("${DEVKITPRO}/wut/share/wut.cmake" REQUIRED) add_executable(swkbd main.cpp) diff --git a/samples/swkbd/main.cpp b/samples/cmake/swkbd/main.cpp similarity index 100% rename from samples/swkbd/main.cpp rename to samples/cmake/swkbd/main.cpp From 37afdf9095a3fa5a171f04b60e1d3ae3dde76640 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 19:01:33 +1000 Subject: [PATCH 07/32] samples: port helloworld to make --- .gitignore | 1 + samples/make/Makefile | 9 ++ samples/make/helloworld/Makefile | 138 ++++++++++++++++++++++++++ samples/make/helloworld/source/main.c | 39 ++++++++ 4 files changed, 187 insertions(+) create mode 100644 samples/make/Makefile create mode 100644 samples/make/helloworld/Makefile create mode 100644 samples/make/helloworld/source/main.c diff --git a/.gitignore b/.gitignore index a6f793c3..49e2a460 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ lib/ *.o *.d *.elf +*.rpx *.bz2 docs/html/ .vs/ diff --git a/samples/make/Makefile b/samples/make/Makefile new file mode 100644 index 00000000..6b9495ec --- /dev/null +++ b/samples/make/Makefile @@ -0,0 +1,9 @@ +MAKEFILES := $(shell find . -mindepth 2 -name Makefile) + +DATESTRING := $(shell date +%Y)$(shell date +%m)$(shell date +%d) + +all: + @for i in $(MAKEFILES); do $(MAKE) -C `dirname $$i` || exit 1; done; + +clean: + @for i in $(MAKEFILES); do $(MAKE) -C `dirname $$i` clean || exit 1; done; diff --git a/samples/make/helloworld/Makefile b/samples/make/helloworld/Makefile new file mode 100644 index 00000000..17aab4c9 --- /dev/null +++ b/samples/make/helloworld/Makefile @@ -0,0 +1,138 @@ +#------------------------------------------------------------------------------- +.SUFFIXES: +#------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=/devkitpro") +endif + +TOPDIR ?= $(CURDIR) + +ifeq ($(strip $(WUT_ROOT)),) +include $(DEVKITPRO)/wut/share/wut_rules +else +include $(WUT_ROOT)/share/wut_rules +endif + +#------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +#------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := include + +#------------------------------------------------------------------------------- +# options for code generation +#------------------------------------------------------------------------------- +CFLAGS := -g -Wall -O2 -ffunction-sections \ + $(MACHDEP) + +CFLAGS += $(INCLUDE) -D__WIIU__ -D__WUT__ + +CXXFLAGS := $(CFLAGS) + +ASFLAGS := -g $(ARCH) +LDFLAGS = -g $(ARCH) $(RPXSPECS) -Wl,-Map,$(notdir $*.map) + +LIBS := -lwut + +#------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level +# containing include and lib +#------------------------------------------------------------------------------- +LIBDIRS := $(PORTLIBS) $(WUT_ROOT) + + +#------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) +export TOPDIR := $(CURDIR) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#------------------------------------------------------------------------------- + export LD := $(CC) +#------------------------------------------------------------------------------- +else +#------------------------------------------------------------------------------- + export LD := $(CXX) +#------------------------------------------------------------------------------- +endif +#------------------------------------------------------------------------------- + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SRC) +export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) clean all + +#------------------------------------------------------------------------------- +all: $(BUILD) + +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(TARGET).rpx + +#------------------------------------------------------------------------------- +else +.PHONY: all + +DEPENDS := $(OFILES:.o=.d) + +#------------------------------------------------------------------------------- +# main targets +#------------------------------------------------------------------------------- +all : $(OUTPUT).rpx + +$(OUTPUT).rpx : $(OFILES) + +$(OFILES_SRC) : $(HFILES_BIN) + +#------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#------------------------------------------------------------------------------- +%.bin.o %_bin.h : %.bin +#------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +-include $(DEPENDS) + +#------------------------------------------------------------------------------- +endif +#------------------------------------------------------------------------------- diff --git a/samples/make/helloworld/source/main.c b/samples/make/helloworld/source/main.c new file mode 100644 index 00000000..489fc478 --- /dev/null +++ b/samples/make/helloworld/source/main.c @@ -0,0 +1,39 @@ +#include +#include + +#include +#include +#include + +int +main(int argc, char **argv) +{ + int last_tm_sec = -1; + OSCalendarTime tm; + + WHBProcInit(); + WHBLogConsoleInit(); + WHBLogPrintf("Hello World!"); + + while(WHBProcIsRunning()) { + OSTicksToCalendarTime(OSGetTime(), &tm); + + if (tm.tm_sec != last_tm_sec) { + WHBLogPrintf("%02d/%02d/%04d %02d:%02d:%02d I'm still here.", + tm.tm_mday, tm.tm_mon, tm.tm_year, + tm.tm_hour, tm.tm_min, tm.tm_sec); + last_tm_sec = tm.tm_sec; + } + + WHBLogConsoleDraw(); + OSSleepTicks(OSMillisecondsToTicks(100)); + } + + WHBLogPrintf("Exiting... good bye."); + WHBLogConsoleDraw(); + OSSleepTicks(OSMillisecondsToTicks(1000)); + + WHBLogConsoleFree(); + WHBProcShutdown(); + return 0; +} From aa122e0366bfecc47e2f30977146140b9a99ecf5 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 19:17:52 +1000 Subject: [PATCH 08/32] travis: Fixups for new build system --- .travis.yml | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3253c239..6456db8c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,15 +5,13 @@ matrix: - os: linux dist: xenial sudo: required - env: DEPLOY_FILE=wut.7z + env: DEPLOY_FILE=wut-*.tar.bz2 addons: apt: sources: - ubuntu-toolchain-r-test - sourceline: 'ppa:cginternals/backports-ppa' - packages: - - p7zip-full cache: directories: @@ -33,26 +31,20 @@ install: script: - cd "$TRAVIS_BUILD_DIR" # Build wut - - mkdir build && cd build - - cmake -DCMAKE_INSTALL_PREFIX=wut_install ../ - - make -j4 install + - make -j4 install DESTDIR=wut_install - export WUT_ROOT=$PWD/wut_install - cd ../ # Build tests - - cd tests - - mkdir build && cd build - - cmake ../ - - make -j4 VERBOSE=TRUE - - cd ../../ + - echo Tests disabled for now +# - cd tests +# - mkdir build && cd build +# - cmake ../ +# - make -j4 VERBOSE=TRUE +# - cd ../../ # Build samples - - cd samples - - mkdir build && cd build - - cmake -DCMAKE_INSTALL_PREFIX=$WUT_ROOT/samples ../ - - make -j4 VERBOSE=TRUE install + - cd samples/make + - make -j4 - cd ../../ - # Create deploy zips - - cd $WUT_ROOT - - 7z a $DEPLOY_FILE . deploy: provider: releases From 592110eeb3449ab15f57c4ad595981b32eaefa1b Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 19:21:17 +1000 Subject: [PATCH 09/32] travis: remove spurious cd --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6456db8c..e2d321a0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,7 +33,6 @@ script: # Build wut - make -j4 install DESTDIR=wut_install - export WUT_ROOT=$PWD/wut_install - - cd ../ # Build tests - echo Tests disabled for now # - cd tests From b7a12a04a791499ed6500d8d92e1be68f45dfe77 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 19:25:27 +1000 Subject: [PATCH 10/32] travis: Update WUT_ROOT temporary location --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e2d321a0..6e766c8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,7 +32,7 @@ script: - cd "$TRAVIS_BUILD_DIR" # Build wut - make -j4 install DESTDIR=wut_install - - export WUT_ROOT=$PWD/wut_install + - export WUT_ROOT=$PWD/wut_install/opt/devkitpro/wut # Build tests - echo Tests disabled for now # - cd tests From 81285c71f66088997c9558c0e148dde4b3b501f7 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 19:28:27 +1000 Subject: [PATCH 11/32] samples: port helloworld_cpp to make --- samples/make/helloworld_cpp/Makefile | 138 ++++++++++++++++++++ samples/make/helloworld_cpp/source/main.cpp | 70 ++++++++++ 2 files changed, 208 insertions(+) create mode 100644 samples/make/helloworld_cpp/Makefile create mode 100644 samples/make/helloworld_cpp/source/main.cpp diff --git a/samples/make/helloworld_cpp/Makefile b/samples/make/helloworld_cpp/Makefile new file mode 100644 index 00000000..17aab4c9 --- /dev/null +++ b/samples/make/helloworld_cpp/Makefile @@ -0,0 +1,138 @@ +#------------------------------------------------------------------------------- +.SUFFIXES: +#------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=/devkitpro") +endif + +TOPDIR ?= $(CURDIR) + +ifeq ($(strip $(WUT_ROOT)),) +include $(DEVKITPRO)/wut/share/wut_rules +else +include $(WUT_ROOT)/share/wut_rules +endif + +#------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +#------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := include + +#------------------------------------------------------------------------------- +# options for code generation +#------------------------------------------------------------------------------- +CFLAGS := -g -Wall -O2 -ffunction-sections \ + $(MACHDEP) + +CFLAGS += $(INCLUDE) -D__WIIU__ -D__WUT__ + +CXXFLAGS := $(CFLAGS) + +ASFLAGS := -g $(ARCH) +LDFLAGS = -g $(ARCH) $(RPXSPECS) -Wl,-Map,$(notdir $*.map) + +LIBS := -lwut + +#------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level +# containing include and lib +#------------------------------------------------------------------------------- +LIBDIRS := $(PORTLIBS) $(WUT_ROOT) + + +#------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) +export TOPDIR := $(CURDIR) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#------------------------------------------------------------------------------- + export LD := $(CC) +#------------------------------------------------------------------------------- +else +#------------------------------------------------------------------------------- + export LD := $(CXX) +#------------------------------------------------------------------------------- +endif +#------------------------------------------------------------------------------- + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SRC) +export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) clean all + +#------------------------------------------------------------------------------- +all: $(BUILD) + +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(TARGET).rpx + +#------------------------------------------------------------------------------- +else +.PHONY: all + +DEPENDS := $(OFILES:.o=.d) + +#------------------------------------------------------------------------------- +# main targets +#------------------------------------------------------------------------------- +all : $(OUTPUT).rpx + +$(OUTPUT).rpx : $(OFILES) + +$(OFILES_SRC) : $(HFILES_BIN) + +#------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#------------------------------------------------------------------------------- +%.bin.o %_bin.h : %.bin +#------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + +-include $(DEPENDS) + +#------------------------------------------------------------------------------- +endif +#------------------------------------------------------------------------------- diff --git a/samples/make/helloworld_cpp/source/main.cpp b/samples/make/helloworld_cpp/source/main.cpp new file mode 100644 index 00000000..9938773f --- /dev/null +++ b/samples/make/helloworld_cpp/source/main.cpp @@ -0,0 +1,70 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include + +int +hello_thread() +{ + int last_tm_sec = -1; + uint32_t ip = 0; + WHBLogPrintf("Hello World from a std::thread!"); + + if (!nn::ac::GetAssignedAddress(&ip)) { + WHBLogPrintf("GetAssignedAddress failed!"); + } + + WHBLogPrintf("My IP is: %u.%u.%u.%u", + (ip >> 24) & 0xFF, + (ip >> 16) & 0xFF, + (ip >> 8) & 0xFF, + (ip >> 0) & 0xFF); + + while(WHBProcIsRunning()) { + OSCalendarTime tm; + OSTicksToCalendarTime(OSGetTime(), &tm); + + if (tm.tm_sec != last_tm_sec) { + WHBLogPrintf("%02d/%02d/%04d %02d:%02d:%02d I'm still here.", + tm.tm_mday, tm.tm_mon, tm.tm_year, + tm.tm_hour, tm.tm_min, tm.tm_sec); + last_tm_sec = tm.tm_sec; + } + + WHBLogConsoleDraw(); + OSSleepTicks(OSMillisecondsToTicks(100)); + } + + WHBLogPrintf("Exiting... good bye."); + WHBLogConsoleDraw(); + OSSleepTicks(OSMillisecondsToTicks(1000)); + return 0; +} + +int +main(int argc, char **argv) +{ + nn::ac::ConfigIdNum configId; + + nn::ac::Initialize(); + nn::ac::GetStartupId(&configId); + nn::ac::Connect(configId); + + WHBProcInit(); + WHBLogConsoleInit(); + + std::thread t(hello_thread); + t.join(); + + WHBLogConsoleFree(); + WHBProcShutdown(); + + nn::ac::Finalize(); + return 0; +} From 869fe709ea0f2ddee28cc9f8a9e3e1dd9bfb37b2 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 20:26:35 +1000 Subject: [PATCH 12/32] Revert "wutstdc++: Move __gxx_personality to dedicated Assembly file" This reverts commit 370eeb28e94ccfcff981842bc55a16258fec252c. I didn't know what this did, sorry. --- libraries/wutstdc++/wut_stdcpp.cpp | 11 +++++++++++ libraries/wutstdc++/wut_stdcpp_personality.s | 10 ---------- 2 files changed, 11 insertions(+), 10 deletions(-) delete mode 100644 libraries/wutstdc++/wut_stdcpp_personality.s diff --git a/libraries/wutstdc++/wut_stdcpp.cpp b/libraries/wutstdc++/wut_stdcpp.cpp index f15f6df2..530e950e 100644 --- a/libraries/wutstdc++/wut_stdcpp.cpp +++ b/libraries/wutstdc++/wut_stdcpp.cpp @@ -1,5 +1,16 @@ #include "wut_gthread.h" +__asm__ __volatile__( + "\t.section\t.text.__wrap___gxx_personality_v0,\"ax\",@progbits\n" + "\t.align\t2\n" + "\t.globl\t__wrap___gxx_personality_v0\n" + "\t.type\t__wrap___gxx_personality_v0, @function\n" + "__wrap___gxx_personality_v0:\n" + "\t.cfi_startproc\n" + "\tb\t__real___gxx_personality_v0\n" + "\t.cfi_endproc" +); + extern "C" void __init_wut_stdcpp() { diff --git a/libraries/wutstdc++/wut_stdcpp_personality.s b/libraries/wutstdc++/wut_stdcpp_personality.s deleted file mode 100644 index 13b9e7f3..00000000 --- a/libraries/wutstdc++/wut_stdcpp_personality.s +++ /dev/null @@ -1,10 +0,0 @@ -.section .text.__wrap___gxx_personality_v0,"ax",@progbits -.align 2 - -.globl __wrap___gxx_personality_v0 -.type __wrap___gxx_personality_v0, @function - -__wrap___gxx_personality_v0: - .cfi_startproc - b __real___gxx_personality_v0 - .cfi_endproc From fb9b7ab3fb82ed28d04589efed9f665ac0312747 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 20:41:45 +1000 Subject: [PATCH 13/32] wutstdc++: remove volatile keyword Who knows? not me. Seems to work okay without it wut_stdcpp.cpp /home/ash/src/wut/libraries/wutstdc++/wut_stdcpp.cpp:3:9: error: expected '(' before '__volatile__' __asm__ __volatile__( ^~~~~~~~~~~~ ( /home/ash/src/wut/libraries/wutstdc++/wut_stdcpp.cpp:4:4: error: expected unqualified-id before string constant "\t.section\t.text.__wrap___gxx_personality_v0,\"ax\",@progbits\n" ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/ash/src/wut/libraries/wutstdc++/wut_stdcpp.cpp:3:22: error: expected ')' before string constant __asm__ __volatile__( ~^ ) "\t.section\t.text.__wrap___gxx_personality_v0,\"ax\",@progbits\n" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ make[1]: *** [/opt/devkitpro/devkitPPC/base_rules:13: wut_stdcpp.o] Error 1 --- libraries/wutstdc++/wut_stdcpp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/wutstdc++/wut_stdcpp.cpp b/libraries/wutstdc++/wut_stdcpp.cpp index 530e950e..c6dc7370 100644 --- a/libraries/wutstdc++/wut_stdcpp.cpp +++ b/libraries/wutstdc++/wut_stdcpp.cpp @@ -1,6 +1,6 @@ #include "wut_gthread.h" -__asm__ __volatile__( +__asm__ ( "\t.section\t.text.__wrap___gxx_personality_v0,\"ax\",@progbits\n" "\t.align\t2\n" "\t.globl\t__wrap___gxx_personality_v0\n" From 09c16421d8f8f412bab23d014c630ada8017f83f Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 20:44:54 +1000 Subject: [PATCH 14/32] samples: Add explicit rules for .elf intermediates --- samples/make/helloworld/Makefile | 5 +++-- samples/make/helloworld_cpp/Makefile | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/samples/make/helloworld/Makefile b/samples/make/helloworld/Makefile index 17aab4c9..05868daa 100644 --- a/samples/make/helloworld/Makefile +++ b/samples/make/helloworld/Makefile @@ -106,7 +106,7 @@ $(BUILD): #------------------------------------------------------------------------------- clean: @echo clean ... - @rm -fr $(BUILD) $(TARGET).rpx + @rm -fr $(BUILD) $(TARGET).rpx $(TARGET).elf #------------------------------------------------------------------------------- else @@ -119,7 +119,8 @@ DEPENDS := $(OFILES:.o=.d) #------------------------------------------------------------------------------- all : $(OUTPUT).rpx -$(OUTPUT).rpx : $(OFILES) +$(OUTPUT).rpx : $(OUTPUT).elf +$(OUTPUT).elf : $(OFILES) $(OFILES_SRC) : $(HFILES_BIN) diff --git a/samples/make/helloworld_cpp/Makefile b/samples/make/helloworld_cpp/Makefile index 17aab4c9..05868daa 100644 --- a/samples/make/helloworld_cpp/Makefile +++ b/samples/make/helloworld_cpp/Makefile @@ -106,7 +106,7 @@ $(BUILD): #------------------------------------------------------------------------------- clean: @echo clean ... - @rm -fr $(BUILD) $(TARGET).rpx + @rm -fr $(BUILD) $(TARGET).rpx $(TARGET).elf #------------------------------------------------------------------------------- else @@ -119,7 +119,8 @@ DEPENDS := $(OFILES:.o=.d) #------------------------------------------------------------------------------- all : $(OUTPUT).rpx -$(OUTPUT).rpx : $(OFILES) +$(OUTPUT).rpx : $(OUTPUT).elf +$(OUTPUT).elf : $(OFILES) $(OFILES_SRC) : $(HFILES_BIN) From 4278819a01aceaf0554e63f1936d4e8dfc13ce43 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 9 Apr 2019 20:59:32 +1000 Subject: [PATCH 15/32] samples: make WUT_ROOT makefile-local, always rely on DEVKITPRO --- .travis.yml | 4 ++-- samples/make/helloworld/Makefile | 4 ---- samples/make/helloworld_cpp/Makefile | 4 ---- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6e766c8b..61187e42 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,8 +31,8 @@ install: script: - cd "$TRAVIS_BUILD_DIR" # Build wut - - make -j4 install DESTDIR=wut_install - - export WUT_ROOT=$PWD/wut_install/opt/devkitpro/wut + - make -j4 + - sudo make install # Build tests - echo Tests disabled for now # - cd tests diff --git a/samples/make/helloworld/Makefile b/samples/make/helloworld/Makefile index 05868daa..b9e3777c 100644 --- a/samples/make/helloworld/Makefile +++ b/samples/make/helloworld/Makefile @@ -8,11 +8,7 @@ endif TOPDIR ?= $(CURDIR) -ifeq ($(strip $(WUT_ROOT)),) include $(DEVKITPRO)/wut/share/wut_rules -else -include $(WUT_ROOT)/share/wut_rules -endif #------------------------------------------------------------------------------- # TARGET is the name of the output diff --git a/samples/make/helloworld_cpp/Makefile b/samples/make/helloworld_cpp/Makefile index 05868daa..b9e3777c 100644 --- a/samples/make/helloworld_cpp/Makefile +++ b/samples/make/helloworld_cpp/Makefile @@ -8,11 +8,7 @@ endif TOPDIR ?= $(CURDIR) -ifeq ($(strip $(WUT_ROOT)),) include $(DEVKITPRO)/wut/share/wut_rules -else -include $(WUT_ROOT)/share/wut_rules -endif #------------------------------------------------------------------------------- # TARGET is the name of the output From f92657e8b59517866efb25b3295bc9a31e8cc348 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Mon, 22 Apr 2019 12:43:37 +1000 Subject: [PATCH 16/32] coreinit: Use rplwrap for exit (__rplwrap_exit) --- cafe/coreinit.def | 4 +++- include/coreinit/exit.h | 2 +- include/wut.h | 1 + include/wut_rplwrap.h | 3 +++ libraries/wutnewlib/wut_newlib.c | 6 ++---- 5 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 include/wut_rplwrap.h diff --git a/cafe/coreinit.def b/cafe/coreinit.def index bb3be89f..32939ef4 100644 --- a/cafe/coreinit.def +++ b/cafe/coreinit.def @@ -1210,7 +1210,6 @@ bspQuery bspRead bspShutdown bspWrite -exit //memclr //memcpy //memmove @@ -1229,6 +1228,9 @@ smdSimpleBufFree smdSimpleBufGetStatistics smdSimpleBufPoolCreate +:TEXT_WRAP +exit + :DATA MEMAllocFromDefaultHeap MEMAllocFromDefaultHeapEx diff --git a/include/coreinit/exit.h b/include/coreinit/exit.h index 51bcb989..5dc00879 100644 --- a/include/coreinit/exit.h +++ b/include/coreinit/exit.h @@ -12,7 +12,7 @@ extern "C" { #endif void -exit(int code); +RPLWRAP(exit)(int code); void _Exit(int code); diff --git a/include/wut.h b/include/wut.h index a704f413..cdbd4646 100644 --- a/include/wut.h +++ b/include/wut.h @@ -8,3 +8,4 @@ #include "wut_structsize.h" #include "wut_types.h" +#include "wut_rplwrap.h" diff --git a/include/wut_rplwrap.h b/include/wut_rplwrap.h new file mode 100644 index 00000000..433903a0 --- /dev/null +++ b/include/wut_rplwrap.h @@ -0,0 +1,3 @@ +#pragma once + +#define RPLWRAP(func) __rplwrap_##func diff --git a/libraries/wutnewlib/wut_newlib.c b/libraries/wutnewlib/wut_newlib.c index 4eda7d09..36232292 100644 --- a/libraries/wutnewlib/wut_newlib.c +++ b/libraries/wutnewlib/wut_newlib.c @@ -1,9 +1,6 @@ #include "wut_newlib.h" #include -// Forward newlib _exit to the coreinit.rpl _Exit -extern void _Exit(int status); - static void __init_wut_syscall_array() { @@ -14,7 +11,8 @@ __init_wut_syscall_array() __syscalls.lock_release = __wut_lock_release; //__syscalls.malloc_lock = __wut_malloc_lock; //__syscalls.malloc_unlock = __wut_malloc_unlock; - __syscalls.exit = _Exit; + //use coreinit's exit function + __syscalls.exit = RPLWRAP(exit); __syscalls.gettod_r = __wut_gettod_r; __syscalls.clock_gettime = __wut_clock_gettime; __syscalls.clock_settime = __wut_clock_settime; From 55007e5ec762ec910a872196f09f089aa006e930 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Mon, 22 Apr 2019 12:43:51 +1000 Subject: [PATCH 17/32] changelog: start writing down what's changed --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..4e6c8060 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,14 @@ +#### wut 1.0.0-beta9 +###### Breaking changes + - coreinit's `exit` is no longer defined in ``. Please use `` instead, which pulls in newlib's exit. + +###### Deprecations + - `WUT_ROOT` should no longer be defined in the user's environment, and will be set to `$DEVKITPRO/wut` internally. CMake lists and makefiles that use `$WUT_ROOT/share` to find `wut.mk` or `wut.toolchain.cmake` should be changed to `$DEVKITPRO/wut/share`. + +###### Other changes + - Builds refactored: wut now uses Makefiles to build itself, as well as providing a devkitPro-style `wut_rules` file - see the `samples/make` folder. The cmake samples are now in `samples/cmake`. + - A new linking feature, `__rplwrap`, was added to help deal with conflicts between newlib's and Cafe's functions. Because of this, wut 1.0.0-beta9 requires wut-tools 1.1.0 or newer. + - Using rplwrap, newlib's `exit` is now correctly chained with coreinit's - calls like `atexit` should work; whether calling `exit` or just returning from `main`. Applications using coreinit's `_Exit` are encouraged to migrate to a normal `exit` call. + + +#### wut 1.0.0-beta8 From 46d6edd81be0898d76359f0eba105ba6157f7d21 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Mon, 22 Apr 2019 14:42:46 +1000 Subject: [PATCH 18/32] wut.ld: Concat and garbage-collect rpx import sections --- CHANGELOG.md | 1 + share/wut.ld | 365 ++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 293 insertions(+), 73 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e6c8060..65e36e2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ #### wut 1.0.0-beta9 ###### Breaking changes - coreinit's `exit` is no longer defined in ``. Please use `` instead, which pulls in newlib's exit. + - RPL import sections (`.fimport_coreinit` etc.) are now garbage-collected when using wut-tools 1.1.0 or above (required). Code relying on weak links to Cafe functions may exhibit different behaviour. ###### Deprecations - `WUT_ROOT` should no longer be defined in the user's environment, and will be set to `$DEVKITPRO/wut` internally. CMake lists and makefiles that use `$WUT_ROOT/share` to find `wut.mk` or `wut.toolchain.cmake` should be changed to `$DEVKITPRO/wut/share`. diff --git a/share/wut.ld b/share/wut.ld index 775e7c66..391335b5 100644 --- a/share/wut.ld +++ b/share/wut.ld @@ -146,80 +146,299 @@ SECTIONS .fexports ALIGN(32) : { KEEP( *(.fexports) ) } > loadmem .dexports ALIGN(32) : { KEEP( *(.dexports) ) } > loadmem - .fimport_avm ALIGN(16) : { *(.fimport_avm) } > loadmem - .fimport_camera ALIGN(16) : { *(.fimport_camera) } > loadmem - .fimport_coreinit ALIGN(16) : { *(.fimport_coreinit) } > loadmem - .fimport_dc ALIGN(16) : { *(.fimport_dc) } > loadmem - .fimport_dmae ALIGN(16) : { *(.fimport_dmae) } > loadmem - .fimport_drmapp ALIGN(16) : { *(.fimport_drmapp) } > loadmem - .fimport_erreula ALIGN(16) : { *(.fimport_erreula) } > loadmem - .fimport_gx2 ALIGN(16) : { *(.fimport_gx2) } > loadmem - .fimport_h264 ALIGN(16) : { *(.fimport_h264) } > loadmem - .fimport_lzma920 ALIGN(16) : { *(.fimport_lzma920) } > loadmem - .fimport_mic ALIGN(16) : { *(.fimport_mic) } > loadmem - .fimport_nfc ALIGN(16) : { *(.fimport_nfc) } > loadmem - .fimport_nio_prof ALIGN(16) : { *(.fimport_nio_prof) } > loadmem - .fimport_nlibcurl ALIGN(16) : { *(.fimport_nlibcurl) } > loadmem - .fimport_nlibnss2 ALIGN(16) : { *(.fimport_nlibnss2) } > loadmem - .fimport_nlibnss ALIGN(16) : { *(.fimport_nlibnss) } > loadmem - .fimport_nn_ac ALIGN(16) : { *(.fimport_nn_ac) } > loadmem - .fimport_nn_acp ALIGN(16) : { *(.fimport_nn_acp) } > loadmem - .fimport_nn_act ALIGN(16) : { *(.fimport_nn_act) } > loadmem - .fimport_nn_aoc ALIGN(16) : { *(.fimport_nn_aoc) } > loadmem - .fimport_nn_boss ALIGN(16) : { *(.fimport_nn_boss) } > loadmem - .fimport_nn_ccr ALIGN(16) : { *(.fimport_nn_ccr) } > loadmem - .fimport_nn_cmpt ALIGN(16) : { *(.fimport_nn_cmpt) } > loadmem - .fimport_nn_dlp ALIGN(16) : { *(.fimport_nn_dlp) } > loadmem - .fimport_nn_ec ALIGN(16) : { *(.fimport_nn_ec) } > loadmem - .fimport_nn_fp ALIGN(16) : { *(.fimport_nn_fp) } > loadmem - .fimport_nn_hai ALIGN(16) : { *(.fimport_nn_hai) } > loadmem - .fimport_nn_hpad ALIGN(16) : { *(.fimport_nn_hpad) } > loadmem - .fimport_nn_idbe ALIGN(16) : { *(.fimport_nn_idbe) } > loadmem - .fimport_nn_ndm ALIGN(16) : { *(.fimport_nn_ndm) } > loadmem - .fimport_nn_nets2 ALIGN(16) : { *(.fimport_nn_nets2) } > loadmem - .fimport_nn_nfp ALIGN(16) : { *(.fimport_nn_nfp) } > loadmem - .fimport_nn_nim ALIGN(16) : { *(.fimport_nn_nim) } > loadmem - .fimport_nn_olv ALIGN(16) : { *(.fimport_nn_olv) } > loadmem - .fimport_nn_pdm ALIGN(16) : { *(.fimport_nn_pdm) } > loadmem - .fimport_nn_save ALIGN(16) : { *(.fimport_nn_save) } > loadmem - .fimport_nn_sl ALIGN(16) : { *(.fimport_nn_sl) } > loadmem - .fimport_nn_spm ALIGN(16) : { *(.fimport_nn_spm) } > loadmem - .fimport_nn_temp ALIGN(16) : { *(.fimport_nn_temp) } > loadmem - .fimport_nn_uds ALIGN(16) : { *(.fimport_nn_uds) } > loadmem - .fimport_nn_vctl ALIGN(16) : { *(.fimport_nn_vctl) } > loadmem - .fimport_nsysccr ALIGN(16) : { *(.fimport_nsysccr) } > loadmem - .fimport_nsyshid ALIGN(16) : { *(.fimport_nsyshid) } > loadmem - .fimport_nsyskbd ALIGN(16) : { *(.fimport_nsyskbd) } > loadmem - .fimport_nsysnet ALIGN(16) : { *(.fimport_nsysnet) } > loadmem - .fimport_nsysuhs ALIGN(16) : { *(.fimport_nsysuhs) } > loadmem - .fimport_nsysuvd ALIGN(16) : { *(.fimport_nsysuvd) } > loadmem - .fimport_ntag ALIGN(16) : { *(.fimport_ntag) } > loadmem - .fimport_padscore ALIGN(16) : { *(.fimport_padscore) } > loadmem - .fimport_proc_ui ALIGN(16) : { *(.fimport_proc_ui) } > loadmem - .fimport_sndcore2 ALIGN(16) : { *(.fimport_sndcore2) } > loadmem - .fimport_snd_core ALIGN(16) : { *(.fimport_snd_core) } > loadmem - .fimport_snduser2 ALIGN(16) : { *(.fimport_snduser2) } > loadmem - .fimport_snd_user ALIGN(16) : { *(.fimport_snd_user) } > loadmem - .fimport_swkbd ALIGN(16) : { *(.fimport_swkbd) } > loadmem - .fimport_sysapp ALIGN(16) : { *(.fimport_sysapp) } > loadmem - .fimport_tcl ALIGN(16) : { *(.fimport_tcl) } > loadmem - .fimport_tve ALIGN(16) : { *(.fimport_tve) } > loadmem - .fimport_uac ALIGN(16) : { *(.fimport_uac) } > loadmem - .fimport_uac_rpl ALIGN(16) : { *(.fimport_uac_rpl) } > loadmem - .fimport_usb_mic ALIGN(16) : { *(.fimport_usb_mic) } > loadmem - .fimport_uvc ALIGN(16) : { *(.fimport_uvc) } > loadmem - .fimport_uvd ALIGN(16) : { *(.fimport_uvd) } > loadmem - .fimport_vpadbase ALIGN(16) : { *(.fimport_vpadbase) } > loadmem - .fimport_vpad ALIGN(16) : { *(.fimport_vpad) } > loadmem - .fimport_zlib125 ALIGN(16) : { *(.fimport_zlib125) } > loadmem + .fimport_avm ALIGN(16) : { + KEEP ( *(.fimport_avm) ) + *(.fimport_avm.*) + } > loadmem + .fimport_camera ALIGN(16) : { + KEEP ( *(.fimport_camera) ) + *(.fimport_camera.*) + } > loadmem + .fimport_coreinit ALIGN(16) : { + KEEP ( *(.fimport_coreinit) ) + *(.fimport_coreinit.*) + } > loadmem + .fimport_dc ALIGN(16) : { + KEEP ( *(.fimport_dc) ) + *(.fimport_dc.*) + } > loadmem + .fimport_dmae ALIGN(16) : { + KEEP ( *(.fimport_dmae) ) + *(.fimport_dmae.*) + } > loadmem + .fimport_drmapp ALIGN(16) : { + KEEP ( *(.fimport_drmapp) ) + *(.fimport_drmapp.*) + } > loadmem + .fimport_erreula ALIGN(16) : { + KEEP ( *(.fimport_erreula) ) + *(.fimport_erreula.*) + } > loadmem + .fimport_gx2 ALIGN(16) : { + KEEP ( *(.fimport_gx2) ) + *(.fimport_gx2.*) + } > loadmem + .fimport_h264 ALIGN(16) : { + KEEP ( *(.fimport_h264) ) + *(.fimport_h264.*) + } > loadmem + .fimport_lzma920 ALIGN(16) : { + KEEP ( *(.fimport_lzma920) ) + *(.fimport_lzma920.*) + } > loadmem + .fimport_mic ALIGN(16) : { + KEEP ( *(.fimport_mic) ) + *(.fimport_mic.*) + } > loadmem + .fimport_nfc ALIGN(16) : { + KEEP ( *(.fimport_nfc) ) + *(.fimport_nfc.*) + } > loadmem + .fimport_nio_prof ALIGN(16) : { + KEEP ( *(.fimport_nio_prof) ) + *(.fimport_nio_prof.*) + } > loadmem + .fimport_nlibcurl ALIGN(16) : { + KEEP ( *(.fimport_nlibcurl) ) + *(.fimport_nlibcurl.*) + } > loadmem + .fimport_nlibnss2 ALIGN(16) : { + KEEP ( *(.fimport_nlibnss2) ) + *(.fimport_nlibnss2.*) + } > loadmem + .fimport_nlibnss ALIGN(16) : { + KEEP ( *(.fimport_nlibnss) ) + *(.fimport_nlibnss.*) + } > loadmem + .fimport_nn_ac ALIGN(16) : { + KEEP ( *(.fimport_nn_ac) ) + *(.fimport_nn_ac.*) + } > loadmem + .fimport_nn_acp ALIGN(16) : { + KEEP ( *(.fimport_nn_acp) ) + *(.fimport_nn_acp.*) + } > loadmem + .fimport_nn_act ALIGN(16) : { + KEEP ( *(.fimport_nn_act) ) + *(.fimport_nn_act.*) + } > loadmem + .fimport_nn_aoc ALIGN(16) : { + KEEP ( *(.fimport_nn_aoc) ) + *(.fimport_nn_aoc.*) + } > loadmem + .fimport_nn_boss ALIGN(16) : { + KEEP ( *(.fimport_nn_boss) ) + *(.fimport_nn_boss.*) + } > loadmem + .fimport_nn_ccr ALIGN(16) : { + KEEP ( *(.fimport_nn_ccr) ) + *(.fimport_nn_ccr.*) + } > loadmem + .fimport_nn_cmpt ALIGN(16) : { + KEEP ( *(.fimport_nn_cmpt) ) + *(.fimport_nn_cmpt.*) + } > loadmem + .fimport_nn_dlp ALIGN(16) : { + KEEP ( *(.fimport_nn_dlp) ) + *(.fimport_nn_dlp.*) + } > loadmem + .fimport_nn_ec ALIGN(16) : { + KEEP ( *(.fimport_nn_ec) ) + *(.fimport_nn_ec.*) + } > loadmem + .fimport_nn_fp ALIGN(16) : { + KEEP ( *(.fimport_nn_fp) ) + *(.fimport_nn_fp.*) + } > loadmem + .fimport_nn_hai ALIGN(16) : { + KEEP ( *(.fimport_nn_hai) ) + *(.fimport_nn_hai.*) + } > loadmem + .fimport_nn_hpad ALIGN(16) : { + KEEP ( *(.fimport_nn_hpad) ) + *(.fimport_nn_hpad.*) + } > loadmem + .fimport_nn_idbe ALIGN(16) : { + KEEP ( *(.fimport_nn_idbe) ) + *(.fimport_nn_idbe.*) + } > loadmem + .fimport_nn_ndm ALIGN(16) : { + KEEP ( *(.fimport_nn_ndm) ) + *(.fimport_nn_ndm.*) + } > loadmem + .fimport_nn_nets2 ALIGN(16) : { + KEEP ( *(.fimport_nn_nets2) ) + *(.fimport_nn_nets2.*) + } > loadmem + .fimport_nn_nfp ALIGN(16) : { + KEEP ( *(.fimport_nn_nfp) ) + *(.fimport_nn_nfp.*) + } > loadmem + .fimport_nn_nim ALIGN(16) : { + KEEP ( *(.fimport_nn_nim) ) + *(.fimport_nn_nim.*) + } > loadmem + .fimport_nn_olv ALIGN(16) : { + KEEP ( *(.fimport_nn_olv) ) + *(.fimport_nn_olv.*) + } > loadmem + .fimport_nn_pdm ALIGN(16) : { + KEEP ( *(.fimport_nn_pdm) ) + *(.fimport_nn_pdm.*) + } > loadmem + .fimport_nn_save ALIGN(16) : { + KEEP ( *(.fimport_nn_save) ) + *(.fimport_nn_save.*) + } > loadmem + .fimport_nn_sl ALIGN(16) : { + KEEP ( *(.fimport_nn_sl) ) + *(.fimport_nn_sl.*) + } > loadmem + .fimport_nn_spm ALIGN(16) : { + KEEP ( *(.fimport_nn_spm) ) + *(.fimport_nn_spm.*) + } > loadmem + .fimport_nn_temp ALIGN(16) : { + KEEP ( *(.fimport_nn_temp) ) + *(.fimport_nn_temp.*) + } > loadmem + .fimport_nn_uds ALIGN(16) : { + KEEP ( *(.fimport_nn_uds) ) + *(.fimport_nn_uds.*) + } > loadmem + .fimport_nn_vctl ALIGN(16) : { + KEEP ( *(.fimport_nn_vctl) ) + *(.fimport_nn_vctl.*) + } > loadmem + .fimport_nsysccr ALIGN(16) : { + KEEP ( *(.fimport_nsysccr) ) + *(.fimport_nsysccr.*) + } > loadmem + .fimport_nsyshid ALIGN(16) : { + KEEP ( *(.fimport_nsyshid) ) + *(.fimport_nsyshid.*) + } > loadmem + .fimport_nsyskbd ALIGN(16) : { + KEEP ( *(.fimport_nsyskbd) ) + *(.fimport_nsyskbd.*) + } > loadmem + .fimport_nsysnet ALIGN(16) : { + KEEP ( *(.fimport_nsysnet) ) + *(.fimport_nsysnet.*) + } > loadmem + .fimport_nsysuhs ALIGN(16) : { + KEEP ( *(.fimport_nsysuhs) ) + *(.fimport_nsysuhs.*) + } > loadmem + .fimport_nsysuvd ALIGN(16) : { + KEEP ( *(.fimport_nsysuvd) ) + *(.fimport_nsysuvd.*) + } > loadmem + .fimport_ntag ALIGN(16) : { + KEEP ( *(.fimport_ntag) ) + *(.fimport_ntag.*) + } > loadmem + .fimport_padscore ALIGN(16) : { + KEEP ( *(.fimport_padscore) ) + *(.fimport_padscore.*) + } > loadmem + .fimport_proc_ui ALIGN(16) : { + KEEP ( *(.fimport_proc_ui) ) + *(.fimport_proc_ui.*) + } > loadmem + .fimport_sndcore2 ALIGN(16) : { + KEEP ( *(.fimport_sndcore2) ) + *(.fimport_sndcore2.*) + } > loadmem + .fimport_snd_core ALIGN(16) : { + KEEP ( *(.fimport_snd_core) ) + *(.fimport_snd_core.*) + } > loadmem + .fimport_snduser2 ALIGN(16) : { + KEEP ( *(.fimport_snduser2) ) + *(.fimport_snduser2.*) + } > loadmem + .fimport_snd_user ALIGN(16) : { + KEEP ( *(.fimport_snd_user) ) + *(.fimport_snd_user.*) + } > loadmem + .fimport_swkbd ALIGN(16) : { + KEEP ( *(.fimport_swkbd) ) + *(.fimport_swkbd.*) + } > loadmem + .fimport_sysapp ALIGN(16) : { + KEEP ( *(.fimport_sysapp) ) + *(.fimport_sysapp.*) + } > loadmem + .fimport_tcl ALIGN(16) : { + KEEP ( *(.fimport_tcl) ) + *(.fimport_tcl.*) + } > loadmem + .fimport_tve ALIGN(16) : { + KEEP ( *(.fimport_tve) ) + *(.fimport_tve.*) + } > loadmem + .fimport_uac ALIGN(16) : { + KEEP ( *(.fimport_uac) ) + *(.fimport_uac.*) + } > loadmem + .fimport_uac_rpl ALIGN(16) : { + KEEP ( *(.fimport_uac_rpl) ) + *(.fimport_uac_rpl.*) + } > loadmem + .fimport_usb_mic ALIGN(16) : { + KEEP ( *(.fimport_usb_mic) ) + *(.fimport_usb_mic.*) + } > loadmem + .fimport_uvc ALIGN(16) : { + KEEP ( *(.fimport_uvc) ) + *(.fimport_uvc.*) + } > loadmem + .fimport_uvd ALIGN(16) : { + KEEP ( *(.fimport_uvd) ) + *(.fimport_uvd.*) + } > loadmem + .fimport_vpadbase ALIGN(16) : { + KEEP ( *(.fimport_vpadbase) ) + *(.fimport_vpadbase.*) + } > loadmem + .fimport_vpad ALIGN(16) : { + KEEP ( *(.fimport_vpad) ) + *(.fimport_vpad.*) + } > loadmem + .fimport_zlib125 ALIGN(16) : { + KEEP ( *(.fimport_zlib125) ) + *(.fimport_zlib125.*) + } > loadmem - .dimport_coreinit ALIGN(16) : { *(.dimport_coreinit) } > loadmem - .dimport_nn_act ALIGN(16) : { *(.dimport_nn_act) } > loadmem - .dimport_nn_boss ALIGN(16) : { *(.dimport_nn_boss) } > loadmem - .dimport_nn_ec ALIGN(16) : { *(.dimport_nn_ec) } > loadmem - .dimport_nn_nim ALIGN(16) : { *(.dimport_nn_nim) } > loadmem - .dimport_nn_sl ALIGN(16) : { *(.dimport_nn_sl) } > loadmem - .dimport_nn_uds ALIGN(16) : { *(.dimport_nn_uds) } > loadmem + .dimport_coreinit ALIGN(16) : { + KEEP ( *(.dimport_coreinit) ) + *(.dimport_coreinit.*) + } > loadmem + .dimport_nn_act ALIGN(16) : { + KEEP ( *(.dimport_nn_act) ) + *(.dimport_nn_act.*) + } > loadmem + .dimport_nn_boss ALIGN(16) : { + KEEP ( *(.dimport_nn_boss) ) + *(.dimport_nn_boss.*) + } > loadmem + .dimport_nn_ec ALIGN(16) : { + KEEP ( *(.dimport_nn_ec) ) + *(.dimport_nn_ec.*) + } > loadmem + .dimport_nn_nim ALIGN(16) : { + KEEP ( *(.dimport_nn_nim) ) + *(.dimport_nn_nim.*) + } > loadmem + .dimport_nn_sl ALIGN(16) : { + KEEP ( *(.dimport_nn_sl) ) + *(.dimport_nn_sl.*) + } > loadmem + .dimport_nn_uds ALIGN(16) : { + KEEP ( *(.dimport_nn_uds) ) + *(.dimport_nn_uds.*) + } > loadmem .symtab ALIGN(4) : { *(.symtab) } > loadmem .strtab ALIGN(1) : { *(.strtab) } > loadmem From 6aac84dc6fef0c4dac0a92a585021aaadd0ba8ea Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 23 Apr 2019 19:50:04 +1000 Subject: [PATCH 19/32] Makefile: change directories to order-only --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 144a239a..be498092 100644 --- a/Makefile +++ b/Makefile @@ -118,14 +118,14 @@ release: debug: @[ -d $@ ] || mkdir -p $@ -lib/libwut.a : lib release $(SOURCES) $(INCLUDES) +lib/libwut.a :$(SOURCES) $(INCLUDES) | lib release @$(MAKE) BUILD=release OUTPUT=$(CURDIR)/$@ \ BUILD_CFLAGS="-DNDEBUG=1 -O2" \ DEPSDIR=$(CURDIR)/release \ --no-print-directory -C release \ -f $(CURDIR)/Makefile -lib/libwutd.a : lib debug $(SOURCES) $(INCLUDES) +lib/libwutd.a : $(SOURCES) $(INCLUDES) | lib debug @$(MAKE) BUILD=debug OUTPUT=$(CURDIR)/$@ \ BUILD_CFLAGS="-DDEBUG=1 -Og" \ DEPSDIR=$(CURDIR)/debug \ From b02d37836f4aca3a75d0347d9a7d66f1df3b7f7c Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 23 Apr 2019 20:37:17 +1000 Subject: [PATCH 20/32] Makefile: Generate stub cafe libraries w/ .gnu.warning sections --- Makefile | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index be498092..b9c35e8c 100644 --- a/Makefile +++ b/Makefile @@ -88,6 +88,8 @@ export OFILES_SRC := $(DEFFILES:.def=.o) $(SFILES:.s=.o) $(CFILES:.c=.o) $(CPPFI export OFILES := $(OFILES_BIN) $(OFILES_SRC) export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) +export STUB_LIBS := $(addprefix lib/stubs/lib,$(DEFFILES:.def=.a)) lib/stubs/libnn_swkbd.a lib/stubs/libwhb.a lib/stubs/libgfd.a + export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ -I. @@ -95,7 +97,7 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ .PHONY: all dist-bin dist-src dist install clean #--------------------------------------------------------------------------------- -all: lib/libwut.a lib/libwutd.a +all: lib/libwut.a lib/libwutd.a $(STUB_LIBS) dist-bin: all @tar --exclude=*~ -cjf wut-$(VERSION).tar.bz2 include lib share -C libraries/libwhb include -C ../libgfd include @@ -112,6 +114,9 @@ install: dist-bin lib: @[ -d $@ ] || mkdir -p $@ +lib/stubs: + @[ -d $@ ] || mkdir -p $@ + release: @[ -d $@ ] || mkdir -p $@ @@ -132,6 +137,13 @@ lib/libwutd.a : $(SOURCES) $(INCLUDES) | lib debug --no-print-directory -C debug \ -f $(CURDIR)/Makefile +# temp: Deprecation stub for directly linking cafe libs (all in libwut) +lib/stubs/lib%.a: | lib/stubs release + @echo stub $(notdir $*) + @echo "static const char w[] __attribute__((section(\".gnu.warning\"))) = \"Deprecation: Linking to Cafe libraries (-l$*) is no longer needed, and will be removed in future. Please update your build.\";" > release/$*.stub.c + @$(CC) $(MACHDEP) -Wno-unused-variable -c release/$*.stub.c -o release/$*.stub.o $(ERROR_FILTER) + @$(AR) -rc $@ release/$*.stub.o + #--------------------------------------------------------------------------------- clean: @echo clean ... @@ -161,4 +173,3 @@ $(OFILES_SRC) : $(HFILES) #--------------------------------------------------------------------------------------- endif #--------------------------------------------------------------------------------------- - From 4828abdc1ae04c20c58e3f17f4836befcb8ee096 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 23 Apr 2019 20:37:47 +1000 Subject: [PATCH 21/32] wut.cmake: Deprecate old wut_enable_* macros --- share/wut.cmake | 35 ++++------------------------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/share/wut.cmake b/share/wut.cmake index 1b20f9df..96438002 100644 --- a/share/wut.cmake +++ b/share/wut.cmake @@ -2,49 +2,22 @@ cmake_minimum_required(VERSION 3.2) # Links against wutnewlib macro(wut_enable_newlib target) - get_property(ENABLED_NEWLIB TARGET ${target} PROPERTY WUT_ENABLE_NEWLIB) - if(NOT DEFINED ENABLED_NEWLIB) - target_link_libraries(${target} - -Wl,--whole-archive wutnewlib -Wl,--no-whole-archive) - - set_target_properties(${target} PROPERTIES WUT_ENABLE_NEWLIB 1) - endif() + message(DEPRECATION "wut_enable_newlib is deprecated and has no effect - it is always enabled; and the macro will be removed in a future release. Please remove it from your CMakeLists.") endmacro() # Links against stdc++ wutstdc++ and set -std=c++17 macro(wut_enable_stdcpp target) - get_property(ENABLED_STDCPP TARGET ${target} PROPERTY WUT_ENABLE_STDCPP) - if(NOT DEFINED ENABLED_STDCPP) - wut_enable_newlib(${target}) - - target_link_libraries(${target} - stdc++ - -Wl,--whole-archive wutstdc++ -Wl,--no-whole-archive) - - set_target_properties(${target} PROPERTIES WUT_ENABLE_STDCPP 1) - endif() + message(DEPRECATION "wut_enable_stdcpp is deprecated and has no effect - it is always enabled when using C++; and the macro will be removed in a future release. Please remove it from your CMakeLists.") endmacro() # Links against devoptab macro(wut_enable_devoptab target) - get_property(ENABLED_DEVOPTAB TARGET ${target} PROPERTY WUT_ENABLE_DEVOPTAB) - if(NOT DEFINED ENABLED_DEVOPTAB) - target_link_libraries(${target} - -Wl,--whole-archive wutdevoptab -Wl,--no-whole-archive) - - set_target_properties(${target} PROPERTIES WUT_ENABLE_DEVOPTAB 1) - endif() + message(DEPRECATION "wut_enable_devoptab is deprecated and has no effect - it is always enabled; and the macro will be removed in a future release. Please remove it from your CMakeLists.") endmacro() # Links against wutmalloc macro(wut_default_malloc target) - get_property(ENABLED_DEFAULT_MALLOC TARGET ${target} PROPERTY WUT_DEFAULT_MALLOC) - if(NOT DEFINED ENABLED_DEFAULT_MALLOC) - target_link_libraries(${target} - -Wl,--whole-archive wutmalloc -Wl,--no-whole-archive) - - set_target_properties(${target} PROPERTIES WUT_DEFAULT_MALLOC 1) - endif() + message(DEPRECATION "wut_default_malloc is deprecated and has no effect - it is always enabled; and the macro will be removed in a future release. Please remove it from your CMakeLists.") endmacro() # Generates ${target}_exports.s from an exports file and adds it to the build From d542fdc438493e5c2a1c2da90dc28c413714c96b Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 23 Apr 2019 20:39:58 +1000 Subject: [PATCH 22/32] wut.cmake: Use wut.specs and libwut in wut_create_rpx --- share/wut.cmake | 12 +++++------- share/wut.toolchain.cmake | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/share/wut.cmake b/share/wut.cmake index 96438002..ab57920d 100644 --- a/share/wut.cmake +++ b/share/wut.cmake @@ -45,18 +45,16 @@ function(wut_create_rpl target source) cmake_parse_arguments(RPL "${RPL_OPTIONS}" "${RPL_SINGLE_ARGS}" "${RPL_MULTI_ARGS}" "${ARGN}") if(RPL_IS_RPX) - target_link_libraries(${source} - coreinit - wutcrt) + set_property(TARGET ${source} APPEND_STRING PROPERTY + LINK_FLAGS "-specs=${WUT_ROOT}/share/rpx.specs") else() set(ELF2RPL_FLAGS ${ELF2RPL_FLAGS} --rpl) - target_link_libraries(${source} - coreinit - wutcrtrpl) + set_property(TARGET ${source} APPEND_STRING PROPERTY + LINK_FLAGS "-specs=${WUT_ROOT}/share/rpl.specs") endif() target_link_libraries(${source} - coreinit) + wut) add_custom_target(${target} ALL COMMAND ${CMAKE_STRIP} -g ${source} diff --git a/share/wut.toolchain.cmake b/share/wut.toolchain.cmake index 9d7f908a..09c3e95a 100644 --- a/share/wut.toolchain.cmake +++ b/share/wut.toolchain.cmake @@ -53,7 +53,7 @@ set(WUT_C_FLAGS "-mcpu=750 -meabi -mhard-float -Wl,-q -D__WIIU__ -D__ set(CMAKE_C_FLAGS "${WUT_C_FLAGS}" CACHE STRING "") set(CMAKE_CXX_FLAGS "${WUT_C_FLAGS}" CACHE STRING "") set(CMAKE_ASM_FLAGS "${WUT_C_FLAGS}" CACHE STRING "") -set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc -T \"${WUT_ROOT}/share/wut.ld\" \"-L${WUT_ROOT}/lib\"" CACHE STRING "") +set(CMAKE_EXE_LINKER_FLAGS "\"-L${WUT_ROOT}/lib\" \"-L${WUT_ROOT}/lib/stubs\" -specs=${WUT_ROOT}/share/wut.specs" CACHE STRING "") # Setup root to exclude host system headers + libraries set(CMAKE_FIND_ROOT_PATH "${DEVKITPPC}" "${DEVKITPRO}/tools" "${DEVKITPRO}/portlibs/wiiu" "${DEVKITPRO}/portlibs/ppc" "${WUT_ROOT}/share") From f49667591dc63189a6e04142f6828138abe0fc7e Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 23 Apr 2019 21:04:28 +1000 Subject: [PATCH 23/32] Makefile: don't bother with .gnu.warning, just generate empty stubs --- Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b9c35e8c..14446d1d 100644 --- a/Makefile +++ b/Makefile @@ -140,9 +140,7 @@ lib/libwutd.a : $(SOURCES) $(INCLUDES) | lib debug # temp: Deprecation stub for directly linking cafe libs (all in libwut) lib/stubs/lib%.a: | lib/stubs release @echo stub $(notdir $*) - @echo "static const char w[] __attribute__((section(\".gnu.warning\"))) = \"Deprecation: Linking to Cafe libraries (-l$*) is no longer needed, and will be removed in future. Please update your build.\";" > release/$*.stub.c - @$(CC) $(MACHDEP) -Wno-unused-variable -c release/$*.stub.c -o release/$*.stub.o $(ERROR_FILTER) - @$(AR) -rc $@ release/$*.stub.o + @$(AR) -rc $@ #--------------------------------------------------------------------------------- clean: From 49c0295a8417ad6f342ef1b4955502839ed819bb Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 23 Apr 2019 21:05:10 +1000 Subject: [PATCH 24/32] changelog: Note deprecation of static libs, wut_enable_* --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65e36e2b..635b5813 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,12 @@ ###### Breaking changes - coreinit's `exit` is no longer defined in ``. Please use `` instead, which pulls in newlib's exit. - RPL import sections (`.fimport_coreinit` etc.) are now garbage-collected when using wut-tools 1.1.0 or above (required). Code relying on weak links to Cafe functions may exhibit different behaviour. + - Changes to CMake's linker flags may cause existing build trees to fail. Please delete any old build files and re-run CMake. ###### Deprecations - `WUT_ROOT` should no longer be defined in the user's environment, and will be set to `$DEVKITPRO/wut` internally. CMake lists and makefiles that use `$WUT_ROOT/share` to find `wut.mk` or `wut.toolchain.cmake` should be changed to `$DEVKITPRO/wut/share`. + - All of wut's static libraries (`-lcoreinit`, `-lwhb`, etc.) have been merged into a single `libwut`, which gets automatically linked in for all builds. While empty static libraries have been provided for CMake builds to ease the transition, these will be removed eventually. Applications should remove the build flags to link any of wut's libraries. + - Similarly, wut's build configuration options (devoptab, wutmalloc, newlib) are now integrated into `libwut`. For CMake builds, the `wut_enable_*` macros will now log a deprecation warning, and should be removed as soon as possible. ###### Other changes - Builds refactored: wut now uses Makefiles to build itself, as well as providing a devkitPro-style `wut_rules` file - see the `samples/make` folder. The cmake samples are now in `samples/cmake`. From 6e08d7791e0052548e507b094650ea61637afa87 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Tue, 23 Apr 2019 21:22:19 +1000 Subject: [PATCH 25/32] wut.mk: add stubs, add deprecation warnings --- CHANGELOG.md | 1 + share/wut.mk | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 635b5813..b4a6f510 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - `WUT_ROOT` should no longer be defined in the user's environment, and will be set to `$DEVKITPRO/wut` internally. CMake lists and makefiles that use `$WUT_ROOT/share` to find `wut.mk` or `wut.toolchain.cmake` should be changed to `$DEVKITPRO/wut/share`. - All of wut's static libraries (`-lcoreinit`, `-lwhb`, etc.) have been merged into a single `libwut`, which gets automatically linked in for all builds. While empty static libraries have been provided for CMake builds to ease the transition, these will be removed eventually. Applications should remove the build flags to link any of wut's libraries. - Similarly, wut's build configuration options (devoptab, wutmalloc, newlib) are now integrated into `libwut`. For CMake builds, the `wut_enable_*` macros will now log a deprecation warning, and should be removed as soon as possible. + - Use of `wut.mk` as a build system is now deprecated. Applications should move to `wut_rules` and devkitPro-style makefiles, such as those in [the samples](/samples/make). `wut.mk` will not be updated further, and will be removed in a future release. ###### Other changes - Builds refactored: wut now uses Makefiles to build itself, as well as providing a devkitPro-style `wut_rules` file - see the `samples/make` folder. The cmake samples are now in `samples/cmake`. diff --git a/share/wut.mk b/share/wut.mk index 3b8790d1..65f0d433 100644 --- a/share/wut.mk +++ b/share/wut.mk @@ -8,6 +8,11 @@ ifneq ($(strip $(V)), 1) Q ?= @ endif +# ------------------------------------------------------------------------------ +# wut 1.0.0-beta9 and later ships wut_rules, in line with normal devkitPro +# makefiles - please use that! +$(warning "Using wut.mk is deprecated, and will be removed in a future release! Please switch to wut_rules as soon as possible - see https://github.com/devkitPro/wut/blob/master/samples/make/helloworld/Makefile for an example.") + # ------------------------------------------------------------------------------ # Toolchain includes and path setup @@ -45,9 +50,9 @@ WUT_CFLAGS := -mcpu=750 -meabi -mhard-float -isystem $(WUT_ROOT)/include # Defines to tell code about this environment WUT_CFLAGS += -D__WIIU__ -D__WUT__ -D__WUT_MAKEFILE__ # keep relocations, use wut linker script -WUT_LDFLAGS := -Wl,-q -Wl,-z,nocopyreloc -T $(WUT_ROOT)/share/wut.ld +WUT_LDFLAGS := -specs=$(WUT_ROOT)/share/wut.specs # Path for wut libraries, Always link against coreinit -WUT_LDFLAGS += -L$(WUT_ROOT)/lib -lcoreinit +WUT_LDFLAGS += -L$(WUT_ROOT)/lib -L$(WUT_ROOT)/lib/stubs -lwut # Append that to user-provided cflags and others CFLAGS += $(WUT_CFLAGS) @@ -67,8 +72,8 @@ ifneq ($(strip $(WUT_NO_LDGROUPS)), 1) endif # RPX and RPL need slightly different crts (init code) -%.rpx: LDFLAGS += -lwutcrt -%.rpl: LDFLAGS += -lwutcrtrpl +%.rpx: LDFLAGS += -specs=$(WUT_ROOT)/share/rpx.specs +%.rpl: LDFLAGS += -specs=$(WUT_ROOT)/share/rpl.specs # ------------------------------------------------------------------------------ # Linking bits @@ -157,24 +162,28 @@ endif # Cafe heap to libc malloc. # To use: # LDFLAGS += $(WUT_NEWLIB_LDFLAGS) -WUT_NEWLIB_LDFLAGS := -Wl,--whole-archive -lwutnewlib -Wl,--no-whole-archive +#WUT_NEWLIB_LDFLAGS := -Wl,--whole-archive -lwutnewlib -Wl,--no-whole-archive +WUT_NEWLIB_LDFLAGS = $(warning "WUT_NEWLIB_LDFLAGS is deprecated and does nothing") # Wrap calls to malloc and friends with calls to Cafe's MEMDefaultHeap # functions, effectivley bypassing the libc heap for most allocations. Forces # libc heap to be very small. # To use: # LDFLAGS += $(WUT_MALLOC_LDFLAGS) -WUT_MALLOC_LDFLAGS := -Wl,--whole-archive -lwutmalloc -Wl,--no-whole-archive +#WUT_MALLOC_LDFLAGS := -Wl,--whole-archive -lwutmalloc -Wl,--no-whole-archive +WUT_MALLOC_LDFLAGS = $(warning "WUT_MALLOC_LDFLAGS is deprecated and does nothing") # Enable libstdc++ support. Allows use of C++11 threads, along with other C++ # functionality. Make sure to use WUT_NEWLIB_LDFLAGS too. # To use: # LDFLAGS += $(WUT_STDCPP_LDFLAGS) -WUT_STDCPP_LDFLAGS := -lstdc++ -WUT_STDCPP_LDFLAGS += -Wl,--whole-archive -lwutstdc++ -Wl,--no-whole-archive +#WUT_STDCPP_LDFLAGS := -lstdc++ +#WUT_STDCPP_LDFLAGS += -Wl,--whole-archive -lwutstdc++ -Wl,--no-whole-archive +WUT_STDCPP_LDFLAGS = $(warning "WUT_STDCPP_LDFLAGS is deprecated and does nothing") # Simple devoptab to allow filesystem access. Mounts the SD alongside the default # Cafe mounts (/vol/content etc.) # To use: # LDFLAGS += $(WUT_DEVOPTAB_LDFLAGS) -WUT_DEVOPTAB_LDFLAGS := -Wl,--whole-archive -lwutdevoptab -Wl,--no-whole-archive +#WUT_DEVOPTAB_LDFLAGS := -Wl,--whole-archive -lwutdevoptab -Wl,--no-whole-archive +WUT_DEVOPTAB_LDFLAGS = $(warning "WUT_DEVOPTAB_LDFLAGS is deprecated and does nothing") From 5087ca6c88b5f86b23be0f2c79d74e66190a886f Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Fri, 3 May 2019 17:48:59 +1000 Subject: [PATCH 26/32] cmake: Add libwut as a standard library https://gitlab.kitware.com/cmake/cmake/issues/18222 --- share/wut.cmake | 3 --- share/wut.toolchain.cmake | 7 ++++++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/share/wut.cmake b/share/wut.cmake index ab57920d..60697227 100644 --- a/share/wut.cmake +++ b/share/wut.cmake @@ -53,9 +53,6 @@ function(wut_create_rpl target source) LINK_FLAGS "-specs=${WUT_ROOT}/share/rpl.specs") endif() - target_link_libraries(${source} - wut) - add_custom_target(${target} ALL COMMAND ${CMAKE_STRIP} -g ${source} COMMAND ${WUT_ELF2RPL} ${ELF2RPL_FLAGS} ${source} ${target} diff --git a/share/wut.toolchain.cmake b/share/wut.toolchain.cmake index 09c3e95a..89f92f88 100644 --- a/share/wut.toolchain.cmake +++ b/share/wut.toolchain.cmake @@ -53,7 +53,12 @@ set(WUT_C_FLAGS "-mcpu=750 -meabi -mhard-float -Wl,-q -D__WIIU__ -D__ set(CMAKE_C_FLAGS "${WUT_C_FLAGS}" CACHE STRING "") set(CMAKE_CXX_FLAGS "${WUT_C_FLAGS}" CACHE STRING "") set(CMAKE_ASM_FLAGS "${WUT_C_FLAGS}" CACHE STRING "") -set(CMAKE_EXE_LINKER_FLAGS "\"-L${WUT_ROOT}/lib\" \"-L${WUT_ROOT}/lib/stubs\" -specs=${WUT_ROOT}/share/wut.specs" CACHE STRING "") +set(CMAKE_EXE_LINKER_FLAGS "\"-L${WUT_ROOT}/lib/stubs\" -specs=${WUT_ROOT}/share/wut.specs" CACHE STRING "") + +set(WUT_STANDARD_LIBRARIES "\"${WUT_ROOT}/lib/libwut.a\"") +set(CMAKE_C_STANDARD_LIBRARIES "${WUT_STANDARD_LIBRARIES}" CACHE STRING "") +set(CMAKE_CXX_STANDARD_LIBRARIES "${WUT_STANDARD_LIBRARIES}" CACHE STRING "") +set(CMAKE_ASM_STANDARD_LIBRARIES "${WUT_STANDARD_LIBRARIES}" CACHE STRING "") # Setup root to exclude host system headers + libraries set(CMAKE_FIND_ROOT_PATH "${DEVKITPPC}" "${DEVKITPRO}/tools" "${DEVKITPRO}/portlibs/wiiu" "${DEVKITPRO}/portlibs/ppc" "${WUT_ROOT}/share") From 5528236b565441da05ec2b7d55107c8f053dc919 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Fri, 3 May 2019 17:59:34 +1000 Subject: [PATCH 27/32] wut.ld: don't EXTERN(_start) This made _start be an always undefined symbol, which kinda backdoors ld's existing system for determining entrypoints. This will be important in the next commit ;D --- share/wut.ld | 1 - 1 file changed, 1 deletion(-) diff --git a/share/wut.ld b/share/wut.ld index 391335b5..c907ee73 100644 --- a/share/wut.ld +++ b/share/wut.ld @@ -8,7 +8,6 @@ MEMORY { loadmem (rwx) : ORIGIN = 0xC0000000, LENGTH = 128M } -EXTERN(_start) ENTRY(_start) SECTIONS From 4374621f4bd490547be3a6276af866455504532a Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Fri, 3 May 2019 18:02:15 +1000 Subject: [PATCH 28/32] wut.ld: make __rpx_start the default entry symbol, remove rpx.specs ld will now auto-link everything to __rpx_start and pull in the correct crt *unless* rpl.specs is given on the commandline --- share/rpx.specs | 2 -- share/wut.cmake | 3 +-- share/wut.ld | 2 +- share/wut.mk | 2 +- share/wut_rules | 2 +- 5 files changed, 4 insertions(+), 7 deletions(-) delete mode 100644 share/rpx.specs diff --git a/share/rpx.specs b/share/rpx.specs deleted file mode 100644 index 9d2a1adc..00000000 --- a/share/rpx.specs +++ /dev/null @@ -1,2 +0,0 @@ -*wut_entry: ---entry=__rpx_start diff --git a/share/wut.cmake b/share/wut.cmake index 60697227..645959f9 100644 --- a/share/wut.cmake +++ b/share/wut.cmake @@ -45,8 +45,7 @@ function(wut_create_rpl target source) cmake_parse_arguments(RPL "${RPL_OPTIONS}" "${RPL_SINGLE_ARGS}" "${RPL_MULTI_ARGS}" "${ARGN}") if(RPL_IS_RPX) - set_property(TARGET ${source} APPEND_STRING PROPERTY - LINK_FLAGS "-specs=${WUT_ROOT}/share/rpx.specs") + # Do nothing - the defaults are good for RPX else() set(ELF2RPL_FLAGS ${ELF2RPL_FLAGS} --rpl) set_property(TARGET ${source} APPEND_STRING PROPERTY diff --git a/share/wut.ld b/share/wut.ld index c907ee73..96ec1212 100644 --- a/share/wut.ld +++ b/share/wut.ld @@ -8,7 +8,7 @@ MEMORY { loadmem (rwx) : ORIGIN = 0xC0000000, LENGTH = 128M } -ENTRY(_start) +ENTRY(__rpx_start) SECTIONS { diff --git a/share/wut.mk b/share/wut.mk index 65f0d433..62791cc5 100644 --- a/share/wut.mk +++ b/share/wut.mk @@ -72,7 +72,7 @@ ifneq ($(strip $(WUT_NO_LDGROUPS)), 1) endif # RPX and RPL need slightly different crts (init code) -%.rpx: LDFLAGS += -specs=$(WUT_ROOT)/share/rpx.specs +#%.rpx: LDFLAGS += -specs=$(WUT_ROOT)/share/rpx.specs %.rpl: LDFLAGS += -specs=$(WUT_ROOT)/share/rpl.specs # ------------------------------------------------------------------------------ diff --git a/share/wut_rules b/share/wut_rules index 6e3aa48a..98fb9d13 100644 --- a/share/wut_rules +++ b/share/wut_rules @@ -18,7 +18,7 @@ export PATH := $(PORTLIBS_PATH)/wiiu/bin:$(PORTLIBS_PATH)/ppc/bin:$(PATH) WUT_ROOT ?= $(DEVKITPRO)/wut -RPXSPECS := -specs=$(WUT_ROOT)/share/wut.specs -specs=$(WUT_ROOT)/share/rpx.specs +RPXSPECS := -specs=$(WUT_ROOT)/share/wut.specs RPLSPECS := -specs=$(WUT_ROOT)/share/wut.specs -specs=$(WUT_ROOT)/share/rpl.specs MACHDEP = -DESPRESSO -mcpu=750 -meabi -mhard-float From 65d7bdd3e5d15806ac2a72ecc89adc2502c4602d Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Fri, 3 May 2019 18:08:42 +1000 Subject: [PATCH 29/32] cmake: Add libwut to standard include dirs apparently cmake also has a CMAKE__STANDARD_INCLUDE_DIRECTORIES --- share/wut.toolchain.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/share/wut.toolchain.cmake b/share/wut.toolchain.cmake index 89f92f88..5eed56de 100644 --- a/share/wut.toolchain.cmake +++ b/share/wut.toolchain.cmake @@ -49,7 +49,7 @@ set(CMAKE_LINKER "powerpc-eabi-ld" CACHE PATH "") set(CMAKE_AR "powerpc-eabi-ar" CACHE PATH "") set(CMAKE_STRIP "powerpc-eabi-strip" CACHE PATH "") -set(WUT_C_FLAGS "-mcpu=750 -meabi -mhard-float -Wl,-q -D__WIIU__ -D__WUT__ -isystem \"${WUT_ROOT}/include\"") +set(WUT_C_FLAGS "-mcpu=750 -meabi -mhard-float -Wl,-q -D__WIIU__ -D__WUT__") set(CMAKE_C_FLAGS "${WUT_C_FLAGS}" CACHE STRING "") set(CMAKE_CXX_FLAGS "${WUT_C_FLAGS}" CACHE STRING "") set(CMAKE_ASM_FLAGS "${WUT_C_FLAGS}" CACHE STRING "") @@ -60,6 +60,12 @@ set(CMAKE_C_STANDARD_LIBRARIES "${WUT_STANDARD_LIBRARIES}" CACHE STRING "") set(CMAKE_CXX_STANDARD_LIBRARIES "${WUT_STANDARD_LIBRARIES}" CACHE STRING "") set(CMAKE_ASM_STANDARD_LIBRARIES "${WUT_STANDARD_LIBRARIES}" CACHE STRING "") +#for some reason cmake (3.14.3) doesn't appreciate having \" here +set(WUT_STANDARD_INCLUDE_DIRECTORIES "${WUT_ROOT}/include") +set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES "${WUT_STANDARD_INCLUDE_DIRECTORIES}" CACHE STRING "") +set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES "${WUT_STANDARD_INCLUDE_DIRECTORIES}" CACHE STRING "") +set(CMAKE_ASM_STANDARD_INCLUDE_DIRECTORIES "${WUT_STANDARD_INCLUDE_DIRECTORIES}" CACHE STRING "") + # Setup root to exclude host system headers + libraries set(CMAKE_FIND_ROOT_PATH "${DEVKITPPC}" "${DEVKITPRO}/tools" "${DEVKITPRO}/portlibs/wiiu" "${DEVKITPRO}/portlibs/ppc" "${WUT_ROOT}/share") set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH) From 6deadfc192eb01173d45b0d4ef00d0da93389ee6 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Fri, 3 May 2019 18:18:30 +1000 Subject: [PATCH 30/32] changelog: Add note about entrypoint changes --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4a6f510..8ff09b22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ - coreinit's `exit` is no longer defined in ``. Please use `` instead, which pulls in newlib's exit. - RPL import sections (`.fimport_coreinit` etc.) are now garbage-collected when using wut-tools 1.1.0 or above (required). Code relying on weak links to Cafe functions may exhibit different behaviour. - Changes to CMake's linker flags may cause existing build trees to fail. Please delete any old build files and re-run CMake. + - Two new symbols, `__rpx_start` and `__rpl_start`, are now used internally by the toolchain, while `_start` is now undefined. As usual, applications are strongly discouraged from prefixing any symbol with two underscores, in order to avoid conflicts of this type. ###### Deprecations - `WUT_ROOT` should no longer be defined in the user's environment, and will be set to `$DEVKITPRO/wut` internally. CMake lists and makefiles that use `$WUT_ROOT/share` to find `wut.mk` or `wut.toolchain.cmake` should be changed to `$DEVKITPRO/wut/share`. @@ -14,6 +15,7 @@ - Builds refactored: wut now uses Makefiles to build itself, as well as providing a devkitPro-style `wut_rules` file - see the `samples/make` folder. The cmake samples are now in `samples/cmake`. - A new linking feature, `__rplwrap`, was added to help deal with conflicts between newlib's and Cafe's functions. Because of this, wut 1.0.0-beta9 requires wut-tools 1.1.0 or newer. - Using rplwrap, newlib's `exit` is now correctly chained with coreinit's - calls like `atexit` should work; whether calling `exit` or just returning from `main`. Applications using coreinit's `_Exit` are encouraged to migrate to a normal `exit` call. + - A new header file, ``, has been added and documented for OSCodegen functionality. #### wut 1.0.0-beta8 From 3452359c0c1eda44348ff4b71b036531c9cfa4ec Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Sat, 4 May 2019 20:56:31 +1000 Subject: [PATCH 31/32] cafe: remove snd_core and snd_user --- CHANGELOG.md | 1 + Makefile | 2 +- cafe/snd_core.def | 272 --------------------------------- cafe/snd_user.def | 379 ---------------------------------------------- 4 files changed, 2 insertions(+), 652 deletions(-) delete mode 100644 cafe/snd_core.def delete mode 100644 cafe/snd_user.def diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ff09b22..ad479ad0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ###### Breaking changes - coreinit's `exit` is no longer defined in ``. Please use `` instead, which pulls in newlib's exit. - RPL import sections (`.fimport_coreinit` etc.) are now garbage-collected when using wut-tools 1.1.0 or above (required). Code relying on weak links to Cafe functions may exhibit different behaviour. + - `snd_core` and `snd_user` are no longer linked, due to naming conflicts with `sndcore2` and `snduser2`. wut has never shipped headers for these libraries, but if you are using them, please switch to `sndcore2` and `snduser2`. - Changes to CMake's linker flags may cause existing build trees to fail. Please delete any old build files and re-run CMake. - Two new symbols, `__rpx_start` and `__rpl_start`, are now used internally by the toolchain, while `_start` is now undefined. As usual, applications are strongly discouraged from prefixing any symbol with two underscores, in order to avoid conflicts of this type. diff --git a/Makefile b/Makefile index 14446d1d..0c749933 100644 --- a/Makefile +++ b/Makefile @@ -88,7 +88,7 @@ export OFILES_SRC := $(DEFFILES:.def=.o) $(SFILES:.s=.o) $(CFILES:.c=.o) $(CPPFI export OFILES := $(OFILES_BIN) $(OFILES_SRC) export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) -export STUB_LIBS := $(addprefix lib/stubs/lib,$(DEFFILES:.def=.a)) lib/stubs/libnn_swkbd.a lib/stubs/libwhb.a lib/stubs/libgfd.a +export STUB_LIBS := $(addprefix lib/stubs/lib,$(DEFFILES:.def=.a)) lib/stubs/libnn_swkbd.a lib/stubs/libwhb.a lib/stubs/libgfd.a lib/stubs/libsnd_core.a lib/stubs/libsnd_user.a export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ diff --git a/cafe/snd_core.def b/cafe/snd_core.def deleted file mode 100644 index 0e4419ad..00000000 --- a/cafe/snd_core.def +++ /dev/null @@ -1,272 +0,0 @@ -:NAME snd_core - -:TEXT -AI2CheckInit -AI2GetDMABytesLeft -AI2GetDMAEnableFlag -AI2GetDMALength -AI2GetDMAStartAddr -AI2GetDSPSampleRate -AI2Init -AI2InitDMA -AI2RegisterDMACallback -AI2Reset -AI2SetDSPSampleRate -AI2StartDMA -AI2StopDMA -AICheckInit -AIDRCGetDMALength -AIDRCGetDMAStartAddr -AIDRCRegisterDMACallback -AIGetAudioFrameCount -AIGetDMABytesLeft -AIGetDMAEnableFlag -AIGetDMALength -AIGetDMARange -AIGetDMAStartAddr -AIGetDSPSampleRate -AII2S3Init -AII2S5Init -AIInit -AIInitDMA -AIQuit -AIRegisterDMABuffer -AIRegisterDMACallback -AIReset -AISetChannel -AISetCloneMode -AISetDSPSampleRate -AISetFormatChangeState -AIStartDMA -AIStopDMA -AXAcquireVoice -AXAcquireVoiceEx -AXCheckVoiceOffsets -AXComputeLpfCoefs -AXDecodeAdpcmData -AXDeregisterAppFrameCallback -AXFreeVoice -AXGetAdpcmData -AXGetAdpcmOutputSize -AXGetAdpcmWorkSize -AXGetAuxACallback -AXGetAuxAReturnVolume -AXGetAuxBCallback -AXGetAuxBReturnVolume -AXGetAuxCCallback -AXGetAuxCReturnVolume -AXGetAuxCallback -AXGetAuxDRCCallback -AXGetAuxReturnVolume -AXGetDRCAuxReturnVolume -AXGetDRCVSMode -AXGetDSPCyclesFudgeFactor -AXGetDefaultMixerSelect -AXGetDeviceChannelCount -AXGetDeviceFinalMixCallback -AXGetDeviceFinalOutput -AXGetDeviceMode -AXGetDeviceRemixMatrix -AXGetDeviceUpsampleStage -AXGetDeviceVolume -AXGetDroppedVoiceCount -AXGetDspCycles -AXGetDspLoad -AXGetDspLoadLimit -AXGetMasterDRCVolume -AXGetMasterVolume -AXGetMaxDspCycles -AXGetMaxDspVoices -AXGetMaxVoices -AXGetMode -AXGetNumDspVoices -AXGetNumVoices -AXGetPostFinalMixCallback -AXGetPpcLoad -AXGetPpcLoadLimit -AXGetProfile -AXGetSwapProfile -AXGetVoiceCurrentOffsetEx -AXGetVoiceLoopCount -AXGetVoiceMixerSelect -AXGetVoiceOffsets -AXGetVoiceOffsetsEx -AXGlitch_GetCount -AXGlitch_PrintTrace -AXGlitch_RegisterCatcher -AXGlitch_trace -AXInit -AXInitEx -AXInitExSpecifyMem -AXInitProfile -AXInitSpecifyMem -AXIsAudioOutReady -AXIsInit -AXIsTransitionAudioDone -AXIsVoiceRunning -AXMakeCompressorTable -AXMixGetSwapProfile -AXPrepareEfxData -AXQuit -AXRegisterAppFrameCallback -AXRegisterAuxACallback -AXRegisterAuxBCallback -AXRegisterAuxCCallback -AXRegisterAuxCallback -AXRegisterAuxDRCCallback -AXRegisterCallback -AXRegisterDRCCallback -AXRegisterDeviceFinalMixCallback -AXRegisterExceedCallback -AXRegisterFrameCallback -AXRegisterPostFinalMixCallback -AXRmtAdvancePtr -AXRmtGetSamples -AXRmtGetSamplesLeft -AXSetAuxAReturnVolume -AXSetAuxBReturnVolume -AXSetAuxCReturnVolume -AXSetAuxReturnVolume -AXSetDRCAuxReturnVolume -AXSetDRCVSDownmixBalance -AXSetDRCVSLC -AXSetDRCVSLimiter -AXSetDRCVSLimiterThreshold -AXSetDRCVSMode -AXSetDRCVSOutputGain -AXSetDRCVSSpeakerPosition -AXSetDRCVSSurroundDepth -AXSetDRCVSSurroundLevelGain -AXSetDSPCyclesFudgeFactor -AXSetDefaultMixerSelect -AXSetDeviceCompressor -AXSetDeviceCompressorTable -AXSetDeviceLinearUpsampler -AXSetDeviceMode -AXSetDeviceRemixMatrix -AXSetDeviceUpsampleStage -AXSetDeviceVolume -AXSetDspLoadLimit -AXSetMasterDRCVolume -AXSetMasterVolume -AXSetMaxDspCycles -AXSetMaxDspVoices -AXSetMaxVoices -AXSetMode -AXSetPpcLoadLimit -AXSetStepMode -AXSetUpTransitionAudio -AXSetVoiceAdpcm -AXSetVoiceAdpcmLoop -AXSetVoiceBiquad -AXSetVoiceBiquadCoefs -AXSetVoiceCurrentOffset -AXSetVoiceCurrentOffsetEx -AXSetVoiceDRCMix -AXSetVoiceDeviceMix -AXSetVoiceEndOffset -AXSetVoiceEndOffsetEx -AXSetVoiceItdOn -AXSetVoiceItdTarget -AXSetVoiceLoop -AXSetVoiceLoopOffset -AXSetVoiceLoopOffsetEx -AXSetVoiceLpf -AXSetVoiceLpfCoefs -AXSetVoiceMix -AXSetVoiceMixerSelect -AXSetVoiceOffsets -AXSetVoiceOffsetsEx -AXSetVoicePriority -AXSetVoiceRmtIIR -AXSetVoiceRmtIIRCoefs -AXSetVoiceRmtMix -AXSetVoiceRmtOn -AXSetVoiceRmtSrc -AXSetVoiceSamplesAddr -AXSetVoiceSrc -AXSetVoiceSrcRatio -AXSetVoiceSrcType -AXSetVoiceState -AXSetVoiceType -AXSetVoiceVe -AXSetVoiceVeDelta -AXStartTransitionAudio -AXUpdateDeviceModes -AXUserBegin -AXUserEnd -AXUserIsProtected -AXVoiceBegin -AXVoiceEnd -AXVoiceIsProtected -DRCVS_GetVersion -DRCVS_Initialize -DRCVS_Process -DRCVS_Quit -DRCVS_SetDirectionFilterCoef -DRCVS_SetDownmixBalance -DRCVS_SetEqCoef -DRCVS_SetHeadphoneGain -DRCVS_SetLimiter -DRCVS_SetLimiterThreshold -DRCVS_SetOutputMode -DRCVS_SetSampleFreq -DRCVS_SetSlevGain -DRCVS_SetSpacialFilterCoef -DRCVS_SetSpeakerGain -DRCVS_SetSurroundDepth -DSPAddTask -DSPAssertInt -DSPAssertTask -DSPCancelTask -DSPCheckInit -DSPCheckMailFromDSP -DSPCheckMailToDSP -DSPGetDMAStatus -DSPH_RunTask -DSPH_WaitTaskComplete -DSPHalt -DSPInit -DSPQuit -DSPReadCPUToDSPMbox -DSPReadMailFromDSP -DSPReset -DSPSendMailToDSP -DSPUnhalt -ISRREnable -ISRRGetMsgQ -ISRRGetNewMsg -ISRRInit -ISRRQuit -ISRSendMessage -_CheckMailFromDSP -_CheckMailToDSP -_InitDsp -_ReadMailFromDSP -_SendMailToDSP -__AXGetAppIoMode -__AXGetMixMode -__AXSetAppIoMode -aiBSPHardwareVersion -axDspSlave -axDspSlaveBalanced -axDspSlaveBalancedLength -axDspSlaveLength -check_os_audio_transition_flag -dsp_os_switch -dsp_os_switchLength -dump_dsp_data -ex_addr_reg_stat -pcd -ppf_dn_e_coef -ppf_dn_o_coef -ppf_up_0_coef -ppf_up_1_coef -ppf_up_2_coef -s_board_type -set_os_audio_transition_flag -slaveData -slaveLength -start_os_audio_transition -stop_os_audio_transition -vs diff --git a/cafe/snd_user.def b/cafe/snd_user.def deleted file mode 100644 index 02cf236f..00000000 --- a/cafe/snd_user.def +++ /dev/null @@ -1,379 +0,0 @@ -:NAME snd_user - -:TEXT -AXART3DSound -AXARTAddArticulator -AXARTAddSound -AXARTCents -AXARTInit -AXARTInitArt3D -AXARTInitArtAuxAVolume -AXARTInitArtAuxAVolumeEnv -AXARTInitArtAuxAVolumeMod -AXARTInitArtAuxBVolume -AXARTInitArtAuxBVolumeEnv -AXARTInitArtAuxBVolumeMod -AXARTInitArtAuxCVolume -AXARTInitArtAuxCVolumeEnv -AXARTInitArtAuxCVolumeMod -AXARTInitArtFader -AXARTInitArtItd -AXARTInitArtLpf -AXARTInitArtPanning -AXARTInitArtPitch -AXARTInitArtPitchEnv -AXARTInitArtPitchMod -AXARTInitArtRmt -AXARTInitArtRmtAuxVolume -AXARTInitArtRmtFader -AXARTInitArtSrctype -AXARTInitArtVolume -AXARTInitArtVolumeEnv -AXARTInitArtVolumeMod -AXARTInitLfo -AXARTInitSound -AXARTLfo -AXARTLpf -AXARTNoise -AXARTPitchEnv -AXARTQuit -AXARTRemoveArticulator -AXARTRemoveSound -AXARTReverseSaw -AXARTSaw -AXARTServiceSound -AXARTServiceSounds -AXARTSet3DDistanceScale -AXARTSet3DDopplerScale -AXARTSine -AXARTSquare -AXARTTriangle -AXARTVolumeEnv -AXFX2GetMemAllocFns -AXFX2SetMemAllocFns -AXFX2chChorusCallback -AXFX2chChorusGetMemSize -AXFX2chChorusInit -AXFX2chChorusSettings -AXFX2chChorusSettingsUpdate -AXFX2chChorusShutdown -AXFX2chMultiDelayCallback -AXFX2chMultiDelayGetMemSize -AXFX2chMultiDelayInit -AXFX2chMultiDelaySettingsUpdate -AXFX2chMultiDelayShutdown -AXFX2chReverbCallback -AXFX2chReverbGetMemSize -AXFX2chReverbInit -AXFX2chReverbParametersPreset -AXFX2chReverbSettingsUpdate -AXFX2chReverbShutdown -AXFX4chChorusCallback -AXFX4chChorusGetMemSize -AXFX4chChorusInit -AXFX4chChorusSettings -AXFX4chChorusSettingsUpdate -AXFX4chChorusShutdown -AXFX4chMultiDelayCallback -AXFX4chMultiDelayGetMemSize -AXFX4chMultiDelayInit -AXFX4chMultiDelaySettingsUpdate -AXFX4chMultiDelayShutdown -AXFX4chReverbCallback -AXFX4chReverbGetMemSize -AXFX4chReverbInit -AXFX4chReverbParametersPreset -AXFX4chReverbSettingsUpdate -AXFX4chReverbShutdown -AXFX6ch6chReverbCallback -AXFX6ch6chReverbGetMemSize -AXFX6ch6chReverbInit -AXFX6ch6chReverbParametersPreset -AXFX6ch6chReverbSettingsUpdate -AXFX6ch6chReverbShutdown -AXFX6chChorusCallback -AXFX6chChorusGetMemSize -AXFX6chChorusInit -AXFX6chChorusSettings -AXFX6chChorusSettingsUpdate -AXFX6chChorusShutdown -AXFX6chMultiDelayCallback -AXFX6chMultiDelayGetMemSize -AXFX6chMultiDelayInit -AXFX6chMultiDelaySettingsUpdate -AXFX6chMultiDelayShutdown -AXFX6chReverbCallback -AXFX6chReverbGetMemSize -AXFX6chReverbInit -AXFX6chReverbParametersPreset -AXFX6chReverbSettingsUpdate -AXFX6chReverbShutdown -AXFXChorusCallback -AXFXChorusCallbackDpl2 -AXFXChorusExpCallback -AXFXChorusExpCallbackDpl2 -AXFXChorusExpGetMemSize -AXFXChorusExpGetMemSizeDpl2 -AXFXChorusExpInit -AXFXChorusExpInitDpl2 -AXFXChorusExpSettings -AXFXChorusExpSettingsDpl2 -AXFXChorusExpSettingsUpdate -AXFXChorusExpSettingsUpdateDpl2 -AXFXChorusExpShutdown -AXFXChorusExpShutdownDpl2 -AXFXChorusGetMemSize -AXFXChorusGetMemSizeDpl2 -AXFXChorusInit -AXFXChorusInitDpl2 -AXFXChorusSettings -AXFXChorusSettingsDpl2 -AXFXChorusShutdown -AXFXChorusShutdownDpl2 -AXFXDelayCallback -AXFXDelayCallbackDpl2 -AXFXDelayExpCallback -AXFXDelayExpCallbackDpl2 -AXFXDelayExpGetMemSize -AXFXDelayExpGetMemSizeDpl2 -AXFXDelayExpInit -AXFXDelayExpInitDpl2 -AXFXDelayExpSettings -AXFXDelayExpSettingsDpl2 -AXFXDelayExpSettingsUpdate -AXFXDelayExpSettingsUpdateDpl2 -AXFXDelayExpShutdown -AXFXDelayExpShutdownDpl2 -AXFXDelayGetMemSize -AXFXDelayGetMemSizeDpl2 -AXFXDelayInit -AXFXDelayInitDpl2 -AXFXDelaySettings -AXFXDelaySettingsDpl2 -AXFXDelayShutdown -AXFXDelayShutdownDpl2 -AXFXGetHooks -AXFXMultiChChorusCallback -AXFXMultiChChorusGetMemSize -AXFXMultiChChorusInit -AXFXMultiChChorusSettings -AXFXMultiChChorusSettingsUpdate -AXFXMultiChChorusSettingsUpdateNoReset -AXFXMultiChChorusShutdown -AXFXMultiChDelayCallback -AXFXMultiChDelayGetMemSize -AXFXMultiChDelayInit -AXFXMultiChDelaySettingsUpdate -AXFXMultiChDelaySettingsUpdateNoReset -AXFXMultiChDelayShutdown -AXFXMultiChReverbCallback -AXFXMultiChReverbGetMemSize -AXFXMultiChReverbInit -AXFXMultiChReverbParametersPreset -AXFXMultiChReverbSettingsUpdate -AXFXMultiChReverbSettingsUpdateNoReset -AXFXMultiChReverbShutdown -AXFXReverbHiCallback -AXFXReverbHiCallbackDpl2 -AXFXReverbHiExpCallback -AXFXReverbHiExpCallbackDpl2 -AXFXReverbHiExpGetMemSize -AXFXReverbHiExpGetMemSizeDpl2 -AXFXReverbHiExpInit -AXFXReverbHiExpInitDpl2 -AXFXReverbHiExpSettings -AXFXReverbHiExpSettingsDpl2 -AXFXReverbHiExpSettingsUpdate -AXFXReverbHiExpSettingsUpdateDpl2 -AXFXReverbHiExpShutdown -AXFXReverbHiExpShutdownDpl2 -AXFXReverbHiGetMemSize -AXFXReverbHiGetMemSizeDpl2 -AXFXReverbHiInit -AXFXReverbHiInitDpl2 -AXFXReverbHiSettings -AXFXReverbHiSettingsDpl2 -AXFXReverbHiShutdown -AXFXReverbHiShutdownDpl2 -AXFXReverbSettingsUpdate -AXFXReverbSettingsUpdateNoReset -AXFXReverbStdCallback -AXFXReverbStdCallbackDpl2 -AXFXReverbStdExpCallback -AXFXReverbStdExpCallbackDpl2 -AXFXReverbStdExpGetMemSize -AXFXReverbStdExpGetMemSizeDpl2 -AXFXReverbStdExpInit -AXFXReverbStdExpInitDpl2 -AXFXReverbStdExpSettings -AXFXReverbStdExpSettingsDpl2 -AXFXReverbStdExpSettingsUpdate -AXFXReverbStdExpSettingsUpdateDpl2 -AXFXReverbStdExpShutdown -AXFXReverbStdExpShutdownDpl2 -AXFXReverbStdGetMemSize -AXFXReverbStdGetMemSizeDpl2 -AXFXReverbStdInit -AXFXReverbStdInitDpl2 -AXFXReverbStdSettings -AXFXReverbStdSettingsDpl2 -AXFXReverbStdShutdown -AXFXReverbStdShutdownDpl2 -AXFXSetHooks -AXFX_AllPass_Free -AXFX_AllPass_GetLen -AXFX_AllPass_Initialize -AXFX_AllPass_SetCoef -AXFX_AllPass_Tick -AXFX_Delay_Clear -AXFX_Delay_Free -AXFX_Delay_GetDelay -AXFX_Delay_GetMaximumDelay -AXFX_Delay_Initialize -AXFX_Delay_NextOut -AXFX_Delay_SetDelay -AXFX_Delay_TapOut -AXFX_Delay_TapOut_Interpolate -AXFX_Delay_Tick -AXFX_PS_Delay_Clear -AXFX_PS_Delay_Free -AXFX_PS_Delay_GetDelay -AXFX_PS_Delay_GetMaximumDelay -AXFX_PS_Delay_Initialize -AXFX_PS_Delay_NextOut -AXFX_PS_Delay_SetDelay -AXFX_PS_Delay_TapOut -AXFX_PS_Delay_TapOut_Interpolate -AXFX_PS_Delay_Tick -AXFX_PS_Dual_Delay_TapOut -AXFX_PS_Single_Delay_TapOut -ArticulationMutex -MIXAdjustAuxA -MIXAdjustAuxB -MIXAdjustAuxC -MIXAdjustDeviceAux -MIXAdjustDeviceFader -MIXAdjustDeviceLFE -MIXAdjustDevicePan -MIXAdjustDeviceSPan -MIXAdjustFader -MIXAdjustInput -MIXAdjustPan -MIXAdjustSPan -MIXAssignChannel -MIXAuxAIsPostFader -MIXAuxAPostFader -MIXAuxAPreFader -MIXAuxBIsPostFader -MIXAuxBPostFader -MIXAuxBPreFader -MIXAuxCIsPostFader -MIXAuxCPostFader -MIXAuxCPreFader -MIXDRCAdjustAux -MIXDRCAdjustFader -MIXDRCAdjustPan -MIXDRCAuxIsPostFader -MIXDRCAuxPostFader -MIXDRCAuxPreFader -MIXDRCGetAux -MIXDRCGetFader -MIXDRCGetPan -MIXDRCInitChannel -MIXDRCSetAux -MIXDRCSetFader -MIXDRCSetPan -MIXDeviceAuxIsPostFader -MIXDeviceAuxPostFader -MIXDeviceAuxPreFader -MIXGetAuxA -MIXGetAuxB -MIXGetAuxC -MIXGetDeviceAux -MIXGetDeviceFader -MIXGetDeviceLFE -MIXGetDevicePan -MIXGetDeviceSPan -MIXGetDeviceSoundMode -MIXGetFader -MIXGetInput -MIXGetPan -MIXGetSPan -MIXGetSoundMode -MIXInit -MIXInitChannel -MIXInitDeviceControl -MIXInitInputControl -MIXInitSpecifyMem -MIXIsMute -MIXMute -MIXQuit -MIXReleaseChannel -MIXResetAllDeviceControls -MIXResetControls -MIXResetDeviceControl -MIXRmtAdjustAux -MIXRmtAdjustFader -MIXRmtAuxIsPostFader -MIXRmtAuxPostFader -MIXRmtAuxPreFader -MIXRmtGetAux -MIXRmtGetFader -MIXRmtSetAux -MIXRmtSetFader -MIXRmtSetVolumes -MIXSetAuxA -MIXSetAuxB -MIXSetAuxC -MIXSetDeviceAux -MIXSetDeviceFader -MIXSetDeviceLFE -MIXSetDevicePan -MIXSetDeviceSPan -MIXSetDeviceSoundMode -MIXSetFader -MIXSetInput -MIXSetPan -MIXSetSPan -MIXSetSoundMode -MIXUnMute -MIXUpdateSettings -SEQAddSequence -SEQDRCGetVolume -SEQDRCSetVolume -SEQGetMixerSelect -SEQGetState -SEQGetTempo -SEQGetVolume -SEQInit -SEQQuit -SEQRegisterControllerCallback -SEQRemoveSequence -SEQRunAudioFrame -SEQSetMixerSelect -SEQSetState -SEQSetTempo -SEQSetVolume -SPGetSoundEntry -SPInitSoundTable -SPPrepareEnd -SPPrepareSound -SYNDRCGetMasterVolume -SYNDRCSetMasterVolume -SYNGetActiveNotes -SYNGetMasterVolume -SYNGetMidiController -SYNGetMixerSelect -SYNInit -SYNInitSpecifyMem -SYNInitSynth -SYNMidiInput -SYNQuit -SYNQuitSynth -SYNRunAudioFrame -SYNSetInitCallback -SYNSetMasterVolume -SYNSetMixerSelect -SYNSetUpdateCallback -SeqMutex -SynthMutex From 540b1de3a752fa1ede33a407229b0ea815c1ab34 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Wed, 22 May 2019 11:56:28 +1000 Subject: [PATCH 32/32] samples: Remove deprecated cmake macros --- samples/cmake/curl/CMakeLists.txt | 1 - samples/cmake/helloworld_cpp/CMakeLists.txt | 4 ---- samples/cmake/swkbd/CMakeLists.txt | 3 --- 3 files changed, 8 deletions(-) diff --git a/samples/cmake/curl/CMakeLists.txt b/samples/cmake/curl/CMakeLists.txt index 2d3b5e48..4a01ddb4 100644 --- a/samples/cmake/curl/CMakeLists.txt +++ b/samples/cmake/curl/CMakeLists.txt @@ -12,7 +12,6 @@ target_link_libraries(curl nsysnet nlibcurl) -wut_enable_newlib(curl) wut_create_rpx(curl.rpx curl) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/curl.rpx" diff --git a/samples/cmake/helloworld_cpp/CMakeLists.txt b/samples/cmake/helloworld_cpp/CMakeLists.txt index 7bac5e28..62adce35 100644 --- a/samples/cmake/helloworld_cpp/CMakeLists.txt +++ b/samples/cmake/helloworld_cpp/CMakeLists.txt @@ -12,10 +12,6 @@ target_link_libraries(helloworld_cpp sysapp nn_ac) -wut_default_malloc(helloworld_cpp) -wut_enable_newlib(helloworld_cpp) -wut_enable_stdcpp(helloworld_cpp) - wut_create_rpx(helloworld_cpp.rpx helloworld_cpp) diff --git a/samples/cmake/swkbd/CMakeLists.txt b/samples/cmake/swkbd/CMakeLists.txt index e64457c6..198948eb 100644 --- a/samples/cmake/swkbd/CMakeLists.txt +++ b/samples/cmake/swkbd/CMakeLists.txt @@ -16,9 +16,6 @@ target_link_libraries(swkbd nn_swkbd vpad) -wut_enable_newlib(swkbd) -wut_enable_stdcpp(swkbd) - wut_create_rpx(swkbd_sample.rpx swkbd)