diff --git a/cmake/modules/CompileLibZip.cmake b/cmake/modules/CompileLibZip.cmake new file mode 100644 index 0000000..dace265 --- /dev/null +++ b/cmake/modules/CompileLibZip.cmake @@ -0,0 +1,17 @@ +include(FetchContent) + +set(ENABLE_ZSTD OFF CACHE BOOL "" FORCE) +set(BUILD_TOOLS OFF CACHE BOOL "" FORCE) +set(BUILD_REGRESS OFF CACHE BOOL "" FORCE) +set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) +set(BUILD_DOC OFF CACHE BOOL "" FORCE) +set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) +set(LIBZIP_DO_INSTALL OFF CACHE BOOL "" FORCE) + +FetchContent_Declare( + libzip + GIT_REPOSITORY https://github.com/nih-at/libzip.git + GIT_TAG v1.11.4 +) + +FetchContent_MakeAvailable(libzip) \ No newline at end of file diff --git a/cmake/modules/CompileLua.cmake b/cmake/modules/CompileLua.cmake new file mode 100644 index 0000000..df806bf --- /dev/null +++ b/cmake/modules/CompileLua.cmake @@ -0,0 +1,20 @@ +# Compile lua +include(FetchContent) +FetchContent_Declare( + liblua + URL https://www.lua.org/ftp/lua-5.5.0.tar.gz +) +FetchContent_MakeAvailable(liblua) +set(LUA_SRC_DIR "${liblua_SOURCE_DIR}/src") +set(LUA_C_FILES + lapi.c lauxlib.c lbaselib.c lcode.c lcorolib.c lctype.c ldblib.c ldebug.c + ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c llex.c lmathlib.c lmem.c + loadlib.c lobject.c lopcodes.c loslib.c lparser.c lstate.c lstring.c + lstrlib.c ltable.c ltablib.c ltm.c lundump.c lutf8lib.c lvm.c lzio.c +) +list(TRANSFORM LUA_C_FILES PREPEND "${LUA_SRC_DIR}/") +add_library(liblua STATIC ${LUA_C_FILES}) +target_include_directories(liblua PUBLIC "${LUA_SRC_DIR}") +target_compile_definitions(liblua PRIVATE LUA_USE_C89) +add_library(lua::lua ALIAS liblua) +set(Lua_FOUND TRUE CACHE BOOL "Lua found" FORCE) \ No newline at end of file diff --git a/cmake/modules/Findlibzip.cmake b/cmake/modules/Findlibzip.cmake index 2254ae2..a9b3ce8 100644 --- a/cmake/modules/Findlibzip.cmake +++ b/cmake/modules/Findlibzip.cmake @@ -1,17 +1,43 @@ + +# Allow user to manually specify libzip paths +# LIBZIP_ROOT: root directory for libzip (optional) +# LIBZIP_INCLUDE_DIR: path to zip.h (optional) +# LIBZIP_LIBRARY: path to libzip library (optional) + find_package(ZLIB REQUIRED) -find_path(LIBZIP_INCLUDE_DIR NAMES zip.h) +if(NOT LIBZIP_INCLUDE_DIR AND LIBZIP_ROOT) + find_path(LIBZIP_INCLUDE_DIR NAMES zip.h HINTS "${LIBZIP_ROOT}/include") +endif() +if(NOT LIBZIP_INCLUDE_DIR) + find_path(LIBZIP_INCLUDE_DIR NAMES zip.h) +endif() mark_as_advanced(LIBZIP_INCLUDE_DIR) -find_library(LIBZIP_LIBRARY NAMES zip) +if(NOT LIBZIP_LIBRARY AND LIBZIP_ROOT) + find_library(LIBZIP_LIBRARY NAMES zip HINTS "${LIBZIP_ROOT}/lib") +endif() +if(NOT LIBZIP_LIBRARY) + find_library(LIBZIP_LIBRARY NAMES zip) +endif() mark_as_advanced(LIBZIP_LIBRARY) -get_filename_component(_libzip_libdir ${LIBZIP_LIBRARY} DIRECTORY) -find_file(_libzip_pkgcfg libzip.pc - HINTS ${_libzip_libdir} ${LIBZIP_INCLUDE_DIR}/.. - PATH_SUFFIXES pkgconfig lib/pkgconfig libdata/pkgconfig - NO_DEFAULT_PATH -) +if(LIBZIP_LIBRARY) + get_filename_component(_libzip_libdir ${LIBZIP_LIBRARY} DIRECTORY) +endif() +if(NOT _libzip_pkgcfg AND LIBZIP_ROOT) + find_file(_libzip_pkgcfg libzip.pc + HINTS "${LIBZIP_ROOT}/lib/pkgconfig" "${LIBZIP_ROOT}/libdata/pkgconfig" + NO_DEFAULT_PATH + ) +endif() +if(NOT _libzip_pkgcfg AND LIBZIP_LIBRARY) + find_file(_libzip_pkgcfg libzip.pc + HINTS ${_libzip_libdir} ${LIBZIP_INCLUDE_DIR}/.. + PATH_SUFFIXES pkgconfig lib/pkgconfig libdata/pkgconfig + NO_DEFAULT_PATH + ) +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( diff --git a/cmake/targets/dolphin.cmake b/cmake/targets/dolphin.cmake index 2f10c8d..33208ce 100644 --- a/cmake/targets/dolphin.cmake +++ b/cmake/targets/dolphin.cmake @@ -21,26 +21,7 @@ set(CGLM_SHARED OFF CACHE BOOL "Build cglm shared" FORCE) set(CGLM_STATIC ON CACHE BOOL "Build cglm static" FORCE) find_package(cglm REQUIRED) -# Compile lua -include(FetchContent) -FetchContent_Declare( - liblua - URL https://www.lua.org/ftp/lua-5.5.0.tar.gz -) -FetchContent_MakeAvailable(liblua) -set(LUA_SRC_DIR "${liblua_SOURCE_DIR}/src") -set(LUA_C_FILES - lapi.c lauxlib.c lbaselib.c lcode.c lcorolib.c lctype.c ldblib.c ldebug.c - ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c llex.c lmathlib.c lmem.c - loadlib.c lobject.c lopcodes.c loslib.c lparser.c lstate.c lstring.c - lstrlib.c ltable.c ltablib.c ltm.c lundump.c lutf8lib.c lvm.c lzio.c -) -list(TRANSFORM LUA_C_FILES PREPEND "${LUA_SRC_DIR}/") -add_library(liblua STATIC ${LUA_C_FILES}) -target_include_directories(liblua PUBLIC "${LUA_SRC_DIR}") -target_compile_definitions(liblua PRIVATE LUA_USE_C89) -add_library(lua::lua ALIAS liblua) -set(Lua_FOUND TRUE CACHE BOOL "Lua found" FORCE) +include(cmake/modules/CompileLua.cmake) # Link libraries target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PRIVATE diff --git a/cmake/targets/vita.cmake b/cmake/targets/vita.cmake new file mode 100644 index 0000000..efa0b33 --- /dev/null +++ b/cmake/targets/vita.cmake @@ -0,0 +1,62 @@ +include("${VITASDK}/share/vita.cmake" REQUIRED) + + +# Manually define libzip for Vita +set(LIBZIP_LIBRARY "${VITASDK}/lib/libzip.a" CACHE FILEPATH "libzip library for Vita") +set(LIBZIP_INCLUDE_DIR "${VITASDK}/include" CACHE PATH "libzip include dir for Vita") + +set(VITA_APP_NAME "Red Rectangle") +set(VITA_TITLEID "VSDK00017") +set(VITA_VERSION "01.00") + + + +target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PUBLIC + mathneon + vitashark + kubridge_stub + SceAppMgr_stub + SceAudio_stub + SceCtrl_stub + SceCommonDialog_stub + SceDisplay_stub + SceKernelDmacMgr_stub + SceGxm_stub + SceShaccCg_stub + SceSysmodule_stub + ScePower_stub + SceTouch_stub + SceVshBridge_stub + SceIofilemgr_stub + SceShaccCgExt + SDL2-static + libtaihen_stub.a + lua::lua + zip + pthread + m +) + +target_include_directories(${DUSK_LIBRARY_TARGET_NAME} PRIVATE + ${SDL2_INCLUDE_DIRS} +) + +target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PUBLIC + DUSK_SDL2 + DUSK_OPENGL + DUSK_VITA + DUSK_INPUT_GAMEPAD + DUSK_PLATFORM_ENDIAN_LITTLE + DUSK_DISPLAY_WIDTH=960 + DUSK_DISPLAY_HEIGHT=544 +) + +vita_create_self(${DUSK_BINARY_TARGET_NAME}.self ${DUSK_BINARY_TARGET_NAME}) +vita_create_vpk(${DUSK_BINARY_TARGET_NAME}.vpk ${VITA_TITLEID} ${DUSK_BINARY_TARGET_NAME}.self + VERSION ${VITA_VERSION} + NAME ${VITA_APP_NAME} + # FILE sce_sys/icon0.png sce_sys/icon0.png + # FILE sce_sys/livearea/contents/bg.png sce_sys/livearea/contents/bg.png + # FILE sce_sys/livearea/contents/startup.png sce_sys/livearea/contents/startup.png + # FILE sce_sys/livearea/contents/template.xml sce_sys/livearea/contents/template.xml +) \ No newline at end of file diff --git a/docker/vita/Dockerfile b/docker/vita/Dockerfile new file mode 100644 index 0000000..b0edfaa --- /dev/null +++ b/docker/vita/Dockerfile @@ -0,0 +1,64 @@ +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y \ + cmake \ + git \ + curl \ + sudo \ + wget \ + libarchive-tools \ + python3 \ + python3-pip \ + python3-dotenv \ + python3-polib \ + python3-pil \ + python3-pyqt5 \ + python3-opengl \ + && rm -rf /var/lib/apt/lists/* + +RUN git clone https://github.com/vitasdk/vdpm /vdpm +WORKDIR /vdpm +RUN ./bootstrap-vitasdk.sh + +ENV VITASDK=/usr/local/vitasdk +ENV PATH="${VITASDK}/bin:${PATH}" + +RUN git clone https://github.com/vitasdk/packages.git /vitapackages +WORKDIR /vitapackages + +RUN bash -lc '\ + dir_array=( \ + zlib \ + bzip2 \ + henkaku \ + taihen \ + kubridge \ + openal-soft \ + openssl \ + curl \ + curlpp \ + expat \ + opus \ + opusfile \ + glm \ + kuio \ + vitaShaRK \ + libmathneon \ + vitaGL \ + SceShaccCgExt \ + sdl2 \ + libzip \ + luajit \ + ); \ + curdir=$(pwd); \ + for d in "${dir_array[@]}"; do \ + echo "${curdir}/${d}"; \ + cd "${curdir}/${d}"; \ + vita-makepkg; \ + vdpm *-arm.tar.xz; \ + done \ +' + +WORKDIR /workdir \ No newline at end of file diff --git a/scripts/build-knulli.sh b/scripts/build-knulli.sh index 5a1dbcf..c9d9174 100755 --- a/scripts/build-knulli.sh +++ b/scripts/build-knulli.sh @@ -1,6 +1,5 @@ #!/bin/bash cmake -S . -B build-knulli -G Ninja \ - -DDUSK_BUILD_TESTS=ON \ -DDUSK_TARGET_SYSTEM=knulli \ -DCMAKE_TOOLCHAIN_FILE=./cmake/toolchains/aarch64-linux-gnu.cmake \ -DCMAKE_BUILD_TYPE=Release diff --git a/scripts/build-vita-docker.sh b/scripts/build-vita-docker.sh new file mode 100755 index 0000000..ea020a4 --- /dev/null +++ b/scripts/build-vita-docker.sh @@ -0,0 +1,3 @@ +#!/bin/bash +docker build -t dusk-vita -f docker/vita/Dockerfile . +docker run --rm -v $(pwd):/workdir dusk-vita /bin/bash -c "./scripts/build-vita.sh" \ No newline at end of file diff --git a/scripts/build-vita.sh b/scripts/build-vita.sh new file mode 100755 index 0000000..2ad9cff --- /dev/null +++ b/scripts/build-vita.sh @@ -0,0 +1,6 @@ +#!/bin/bash +cd /workdir +cmake -S . -B build-vita \ + -DDUSK_TARGET_SYSTEM=vita \ + -DCMAKE_TOOLCHAIN_FILE="$VITASDK/share/vita.toolchain.cmake" +cmake --build build-vita -- -j$(nproc) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8a88a46..c6f53d5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,7 +5,7 @@ add_subdirectory(dusk) -if(DUSK_TARGET_SYSTEM STREQUAL "linux" OR DUSK_TARGET_SYSTEM STREQUAL "knulli") +if(DUSK_TARGET_SYSTEM STREQUAL "linux" OR DUSK_TARGET_SYSTEM STREQUAL "knulli" OR DUSK_TARGET_SYSTEM STREQUAL "vita") add_subdirectory(dusklinux) add_subdirectory(dusksdl2) add_subdirectory(duskgl) diff --git a/src/dusk/display/color.csv b/src/dusk/display/color.csv index 62c2e1b..1a20981 100644 --- a/src/dusk/display/color.csv +++ b/src/dusk/display/color.csv @@ -20,4 +20,5 @@ pink,1,0.75,0.8,1 lime,0.75,1,0,1 navy,0,0,0.5,1 teal,0,0.5,0.5,1 -cornflower_blue,0.39,0.58,0.93,1 \ No newline at end of file +cornflower_blue,0.39,0.58,0.93,1 +salmon,1,0.5,0.5,1 \ No newline at end of file diff --git a/src/dusk/display/display.c b/src/dusk/display/display.c index 1b2b24e..3563489 100644 --- a/src/dusk/display/display.c +++ b/src/dusk/display/display.c @@ -115,7 +115,7 @@ errorret_t displayUpdate(void) { // camera.orthographic.left = 0.0f; // camera.orthographic.right = SCREEN.width; // camera.orthographic.top = SCREEN.height; - // camera.orthographic.bottom = 0.0f; + // camera.orthographic.bottom = 0.0f; cameraInitPerspective(&camera); camera.lookat.position[0] = 3.0f; camera.lookat.position[1] = 3.0f; diff --git a/src/duskgl/duskgl.h b/src/duskgl/duskgl.h index 707a68c..2f7dd4b 100644 --- a/src/duskgl/duskgl.h +++ b/src/duskgl/duskgl.h @@ -20,6 +20,9 @@ #define glClearDepth(depth) glClearDepthf(depth) #else #define GL_GLEXT_PROTOTYPES - #include - #include + #include + + #define GL_COLOR_INDEX8_EXT 0x80E5 + + // #include #endif \ No newline at end of file