Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
.editorconfig
.env
.git
.gitattributes
.github
.gitignore
.gitmodules
.vscode
Dockerfile
README.md
build
2 changes: 2 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
USERNAME=
PASSWORD=
3 changes: 3 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ jobs:
path: |
rootfs
wrapper
wrapper-rootless
compose.yaml
entrypoint.sh
Dockerfile

- name: Create Release Zip File
Expand Down
16 changes: 7 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -86,16 +86,14 @@ dkms.conf
*.exe
*.out
*.app
wrapper

# Directory skeleton is preserved, but whatever files are generated
# are confidential and should not be leaked, thus ignore them.
rootfs/

# CMake related cruft
CMakeCache.txt
CMakeFiles/
.vscode/
wrapper
rootfs/system/bin/linker64
build/

# Android SDK
android-ndk-r23b/

# Enviroment Variables
.env
!.env.example
90 changes: 62 additions & 28 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,44 +1,72 @@
cmake_minimum_required(VERSION 3.25)

project(wrapper)
include(ExternalProject)

set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)

set(ANDROID_NDK_PATH "${CMAKE_CURRENT_SOURCE_DIR}/android-ndk-r23b" CACHE PATH "Android NDK toolchain directory")
set(ANDROID_NDK_PATH "${CMAKE_CURRENT_SOURCE_DIR}/android-ndk-r23b" CACHE PATH "NDK Path")
set(TOOLCHAIN "${ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64")

set(CMAKE_C_COMPILER "${TOOLCHAIN}/bin/x86_64-linux-android22-clang")
set(CMAKE_CXX_COMPILER "${TOOLCHAIN}/bin/x86_64-linux-android22-clang++")
set(C_COMPILER "${TOOLCHAIN}/bin/clang")

project(wrapper LANGUAGES C CXX)

include(FetchContent)
include(ExternalProject)

FetchContent_Declare(
cjson
GIT_REPOSITORY https://github.com/DaveGamble/cJSON.git
GIT_TAG v1.7.19
)
set(ENABLE_CJSON_TEST OFF CACHE BOOL "" FORCE)
set(ENABLE_CJSON_UTILS OFF CACHE BOOL "" FORCE)
set(ENABLE_TARGET_EXPORT OFF CACHE BOOL "" FORCE)
set(ENABLE_CUSTOM_COMPILER_FLAGS OFF CACHE BOOL "" FORCE)

set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)

FetchContent_MakeAvailable(cjson)

FetchContent_Declare(
dobby
GIT_REPOSITORY https://github.com/BepInEx/Dobby.git
GIT_TAG master
)
set(DOBBY_BUILD_TEST OFF CACHE BOOL "" FORCE)
set(DOBBY_GENERATE_SHARED OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(dobby)

set(CMDLINE_SOURCE cmdline.c)
set(HANDLE_SOURCE main.cpp)
set(CJSON_SOURCE cjson/cjson.c)
set(MAIN_SOURCE main.c)
set(WRAPPER_SOURCE wrapper.c)
set(WRAPPER_ROOTLESS_SOURCE wrapper-rootless.c)

add_library(cmdline_object OBJECT ${CMDLINE_SOURCE})
add_library(handle_object OBJECT ${HANDLE_SOURCE})
add_library(cjson_object OBJECT ${CJSON_SOURCE})

add_executable(main ${MAIN_SOURCE} $<TARGET_OBJECTS:cmdline_object> $<TARGET_OBJECTS:handle_object> $<TARGET_OBJECTS:cjson_object>)
add_executable(main ${MAIN_SOURCE} $<TARGET_OBJECTS:cmdline_object> $<TARGET_OBJECTS:handle_object>)

target_include_directories(main PRIVATE ${cjson_SOURCE_DIR})
target_link_libraries(main PRIVATE cjson)
target_link_libraries(main PRIVATE dobby)

set_target_properties(main PROPERTIES
COMPILE_DEFINITIONS "MyRelease"
# COMPILE_DEFINITIONS "MyRelease"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/rootfs/system/bin"
)

find_library(ANDROIDAPPMUSIC_LIB androidappmusic PATHS ${CMAKE_SOURCE_DIR}/rootfs/system/lib64)
find_library(STORESERVICESCORE_LIB storeservicescore PATHS ${CMAKE_SOURCE_DIR}/rootfs/system/lib64)
find_library(MEDIAPLATFORM_LIB mediaplatform PATHS ${CMAKE_SOURCE_DIR}/rootfs/system/lib64)
find_library(CXX_SHARED_LIB c++_shared PATHS ${CMAKE_SOURCE_DIR}/rootfs/system/lib64)
find_library(CURL_SHARED_LIB curl PATHS ${CMAKE_SOURCE_DIR}/rootfs/system/lib64)
find_library(LOG_SHARED_LIB log PATHS ${CMAKE_SOURCE_DIR}/rootfs/system/lib64)
set(SYSTEM_LIB_DIR "${CMAKE_SOURCE_DIR}/rootfs/system/lib64")
find_library(ANDROIDAPPMUSIC_LIB androidappmusic PATHS ${SYSTEM_LIB_DIR})
find_library(STORESERVICESCORE_LIB storeservicescore PATHS ${SYSTEM_LIB_DIR})
find_library(MEDIAPLATFORM_LIB mediaplatform PATHS ${SYSTEM_LIB_DIR})
find_library(CXX_SHARED_LIB c++_shared PATHS ${SYSTEM_LIB_DIR})
find_library(CURL_SHARED_LIB curl PATHS ${SYSTEM_LIB_DIR})
find_library(LOG_SHARED_LIB log PATHS ${SYSTEM_LIB_DIR})

# Link libraries
target_link_libraries(main
target_link_libraries(main PRIVATE
${CXX_SHARED_LIB}
${ANDROIDAPPMUSIC_LIB}
${STORESERVICESCORE_LIB}
Expand All @@ -47,26 +75,32 @@ target_link_libraries(main

get_target_property(MAIN_COMPILE_DEFINITIONS main COMPILE_DEFINITIONS)
if(NOT "MyRelease" IN_LIST MAIN_COMPILE_DEFINITIONS)
target_link_libraries(main
${LOG_SHARED_LIB}
${CURL_SHARED_LIB}
)
set(CMAKE_C_FLAGS "-Werror -g")
set(CMAKE_CXX_FLAGS "-Werror -g")
target_link_libraries(main PRIVATE ${LOG_SHARED_LIB} ${CURL_SHARED_LIB})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -g")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -g")
else()
set(CMAKE_C_FLAGS "-Wall -Werror")
set(CMAKE_CXX_FLAGS "-Wall -Werror")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror")
endif()

link_directories(${CMAKE_SOURCE_DIR}/rootfs/system/lib64)

ExternalProject_Add(
wrapper
PREFIX ${CMAKE_BINARY_DIR}
wrapper_exe
PREFIX ${CMAKE_BINARY_DIR}/wrapper_build
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURE_COMMAND ""
BUILD_COMMAND ${C_COMPILER} -O3 -Wall -o wrapper ${WRAPPER_SOURCE} ${CMAKE_CURRENT_SOURCE_DIR}/cmdline.c
BUILD_IN_SOURCE 1
INSTALL_COMMAND ""
DEPENDS main
)

ExternalProject_Add(
wrapper_rootless_exe
PREFIX ${CMAKE_BINARY_DIR}/wrapper_build
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURE_COMMAND ""
BUILD_COMMAND ${C_COMPILER} -O3 -Wall -o wrapper ${WRAPPER_ROOTLESS_SOURCE} ${CMAKE_CURRENT_SOURCE_DIR}/cmdline.c
BUILD_IN_SOURCE 1
INSTALL_COMMAND ""
DEPENDS main
)
44 changes: 39 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,45 @@
FROM debian:stable-slim
ARG BUILD_PLATFORM=linux/amd64
ARG RUNTIME_PLATFORM=linux/amd64

ENV args=""
FROM --platform=${BUILD_PLATFORM} debian:13.2 AS build
ARG TARGET_ARCH=amd64
ARG NDK_VERSION=23

SHELL ["/bin/bash", "-c"]

RUN \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
--mount=type=cache,target=/var/cache/apt,sharing=locked \
apt-get update && apt-get install -y \
build-essential \
cmake \
unzip \
git \
lsb-release \
gnupg \
aria2

WORKDIR /app
RUN bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
RUN aria2c -o android-ndk-r${NDK_VERSION}b-linux.zip https://dl.google.com/android/repository/android-ndk-r${NDK_VERSION}b-linux.zip
RUN unzip -q -d ~ android-ndk-r${NDK_VERSION}b-linux.zip
RUN rm android-ndk-r${NDK_VERSION}b-linux.zip
COPY ./ ./

WORKDIR /app
RUN mkdir build
WORKDIR /app/build
RUN cmake -DTARGET_ARCH=${TARGET_ARCH} ..
RUN make -j$(nproc)

FROM --platform=${RUNTIME_PLATFORM} debian:13.2

COPY ./rootfs /app/rootfs
COPY ./wrapper /app
WORKDIR /app
COPY --from=build /app/wrapper /app/wrapper
COPY --from=build /app/rootfs /app/rootfs
COPY entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh

CMD ["bash", "-c", "/app/wrapper $args"]
CMD ["/app/entrypoint.sh"]

EXPOSE 10020 20020 30020
Loading
Loading