Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Android port #179

Merged
merged 9 commits into from
Sep 13, 2019
66 changes: 58 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ if(HAIKU)
set(ASAN OFF)
endif()

if(ANDROID)
set(ASAN OFF)
endif()

if(DIST)
set(sodium_USE_STATIC_LIBS ON)
endif()
Expand All @@ -65,13 +69,15 @@ if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4)
endif()

find_package(Threads REQUIRED)
find_package(SDL2 CONFIG QUIET)
if (NOT SDL2_FOUND)
find_package(SDL2 REQUIRED)
if (NOT ANDROID)
find_package(SDL2 CONFIG QUIET)
if (NOT SDL2_FOUND)
find_package(SDL2 REQUIRED)
endif()
find_package(SDL2_ttf REQUIRED)
find_package(SDL2_mixer REQUIRED)
find_package(sodium REQUIRED)
endif()
find_package(SDL2_ttf REQUIRED)
find_package(SDL2_mixer REQUIRED)
find_package(sodium REQUIRED)

add_library(smacker STATIC
3rdParty/libsmacker/smk_bitstream.c
Expand Down Expand Up @@ -171,7 +177,7 @@ add_library(devilution STATIC
Source/trigs.cpp
Source/wave.cpp)

add_executable(devilutionx
SET(devilutionx_SRCS
SourceX/dx.cpp
SourceX/miniwin/misc.cpp
SourceX/miniwin/misc_io.cpp
Expand Down Expand Up @@ -205,6 +211,36 @@ add_executable(devilutionx
SourceX/DiabloUI/title.cpp
SourceX/main.cpp)

if (NOT ANDROID)
add_executable(devilutionx
${devilutionx_SRCS})
else()
add_library(devilutionx SHARED
${devilutionx_SRCS})
endif()

if (ANDROID)
target_include_directories(devilutionx PUBLIC
SourceX
${CMAKE_CURRENT_SOURCE_DIR}/../app/libs/include
${CMAKE_CURRENT_SOURCE_DIR}/../SDL2/include

# SDL_internal.h is located in src required by SDL_android_main.c bridge
${CMAKE_CURRENT_SOURCE_DIR}/../SDL2/src

${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_image/include
${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_gfx/include
${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_mixer/include
${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_ttf/include
)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../SDL2/ ${CMAKE_CURRENT_SOURCE_DIR}/../SDL2)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_image/ ${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_image)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_gfx/ ${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_gfx)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_mixer/ ${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_mixer)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_ttf/ ${CMAKE_CURRENT_SOURCE_DIR}/../SDL2_ttf)
endif()

target_include_directories(devilution PUBLIC Source SourceS)
target_include_directories(devilutionx PRIVATE
SourceX
Expand All @@ -218,11 +254,21 @@ target_link_libraries(devilutionx PRIVATE
PKWare
StormLib
smacker
Radon
Radon)

if (NOT ANDROID)
target_link_libraries(devilutionx PRIVATE
SDL2::SDL2main
SDL2::SDL2_ttf
SDL2::SDL2_mixer
sodium)
else()
target_link_libraries(devilutionx PRIVATE
SDL2
SDL2_ttf
SDL2_mixer
${CMAKE_CURRENT_SOURCE_DIR}/../app/libs/jni/${ANDROID_ARCH_NAME}/libsodiumjni.so)
endif()

target_compile_definitions(devilution PRIVATE DEVILUTION_ENGINE)
target_compile_definitions(devilution PUBLIC
Expand Down Expand Up @@ -289,3 +335,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Silence appfat.cpp warnings
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing")
endif()

if (ANDROID)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format-security")
endif()
6 changes: 6 additions & 0 deletions SourceX/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,16 @@ static std::string build_cmdline(int argc, char **argv)
return str;
}

#ifdef __ANDROID__
int SDL_main(int argc, char* argv[]) {
return dvl::WinMain(NULL, NULL, (char *)"", 0);
}
#else
int main(int argc, char **argv)
{
auto cmdline = build_cmdline(argc, argv);
return dvl::WinMain(NULL, NULL, (char *)cmdline.c_str(), 0);
}
#endif


5 changes: 5 additions & 0 deletions SourceX/storm/storm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,19 @@ namespace dvl {
DWORD nLastError = 0;
bool directFileAccess = false;


static std::string getIniPath()
{
#ifdef __ANDROID__
return "/sdcard/Android/data/org.diasurgical.devilutionx/diablo.ini";
#else
char path[DVL_MAX_PATH];
int len = GetModuleFileNameA(ghInst, path, DVL_MAX_PATH);
path[len - 1] = '/';
strcat(path, "diablo.ini");

return path;
#endif
}

static radon::File ini(getIniPath());
Expand Down