Skip to content
Open
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
Binary file added .gradle/3.2.1/taskArtifacts/fileSnapshots.bin
Binary file not shown.
Binary file added .gradle/3.2.1/taskArtifacts/taskArtifacts.bin
Binary file not shown.
Binary file added .gradle/3.2.1/taskArtifacts/taskArtifacts.lock
Binary file not shown.
117 changes: 96 additions & 21 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ include (${CMAKE_ROOT}/Modules/ExternalProject.cmake)
include_directories (${CMAKE_BINARY_DIR}/include)
link_directories (${CMAKE_BINARY_DIR}/lib)

set (STATIC_BUILD true)
option (STATIC_BUILD "Build Planet Blupi statically" ON)
option (ANDROID "Enable when building for Android" OFF)
#project(planetblupi-dev)

# It's an hack in order to be able to link statically planetblupi on darwin.
if (APPLE)
Expand All @@ -23,6 +25,35 @@ if (APPLE)
set (CMD_CPPFLAGS "-I${CMAKE_BINARY_DIR}/include")
endif ()

if (ANDROID)
# It's really hard to get non-CMake projects build with Android NDK directly, so we'll start by
# generating a standalone toolchain (at configure time)
execute_process(COMMAND ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh
--platform=${ANDROID_NATIVE_API_LEVEL}
--toolchain=${ANDROID_TOOLCHAIN_NAME}
--install-dir=${CMAKE_BINARY_DIR}/toolchain
--arch=${ANDROID_SYSROOT_ABI}
--stl=libc++ ) # TODO: Should probably use ANDROID_STL instead of hardcoding, but the names are different (libc++ vs c++_static)

# Prepare all cross-compilation options that need to be passed to child CMake projects
set (ADDITIONAL_CMAKE_OPTIONS
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-DANDROID_TOOLCHAIN=${ANDROID_TOOLCHAIN}
-DANDROID_ABI=${ANDROID_ABI}
-DANDROID_STL=${ANDROID_STL})

# Prepare all cross-compilation options needed for configure-based projects
set (ADDITIONAL_CONFIGURE_OPTIONS
--host=${ANDROID_HEADER_TRIPLE}
)
set (ADDITIONAL_TOOL_OPTIONS
CC=clang
CXX=clang++
)
set (CMD_PATH "${CMAKE_BINARY_DIR}/toolchain/bin")
set (CMD_CHOST "${ANDROID_HEADER_TRIPLE}")
endif()

configure_file (cmd.sh.in cmd.sh @ONLY)
set (CMD ${CMAKE_BINARY_DIR}/cmd.sh)

Expand All @@ -44,7 +75,7 @@ else ()
ExternalProject_Add (zlib_Project
URL http://www.zlib.net/zlib-1.2.11.tar.gz
PREFIX ${CMAKE_BINARY_DIR}
CONFIGURE_COMMAND ${CMD} ./configure
CONFIGURE_COMMAND ${ADDITIONAL_TOOL_OPTIONS} ${CMD} ./configure
--prefix=${CMAKE_BINARY_DIR}
--static
BUILD_COMMAND ${CMD} make
Expand All @@ -61,7 +92,7 @@ endif ()
ExternalProject_Add (argagg_Project
URL https://github.com/vietjtnguyen/argagg/archive/0.4.6.tar.gz
PREFIX ${CMAKE_BINARY_DIR}
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}"
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR} ${ADDITIONAL_CMAKE_OPTIONS}
)

##########
Expand All @@ -71,7 +102,7 @@ ExternalProject_Add (argagg_Project
ExternalProject_Add (libcurl_Project
URL https://curl.haxx.se/download/curl-7.55.0.tar.xz
PREFIX ${CMAKE_BINARY_DIR}
CONFIGURE_COMMAND ${CMD} ./configure
CONFIGURE_COMMAND ${ADDITIONAL_TOOL_OPTIONS} ${CMD} ./configure
--prefix=${CMAKE_BINARY_DIR}
--disable-shared
--enable-static
Expand Down Expand Up @@ -110,6 +141,7 @@ ExternalProject_Add (libcurl_Project
--without-librtmp
--without-nghttp2
--without-libidn2
${ADDITIONAL_CONFIGURE_OPTIONS}
BUILD_COMMAND ${CMD} make
INSTALL_COMMAND ${CMD} make install
BUILD_IN_SOURCE 1
Expand All @@ -125,10 +157,11 @@ if (NOT APPLE)
ExternalProject_Add (libiconv_Project
URL https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
PREFIX ${CMAKE_BINARY_DIR}
CONFIGURE_COMMAND ${CMD} ./configure
CONFIGURE_COMMAND ${ADDITIONAL_TOOL_OPTIONS} ${CMD} ./configure
--prefix=${CMAKE_BINARY_DIR}
--disable-shared
--enable-static
${ADDITIONAL_CONFIGURE_OPTIONS}
BUILD_COMMAND ${CMD} make
INSTALL_COMMAND ${CMD} make install
BUILD_IN_SOURCE 1
Expand All @@ -148,10 +181,11 @@ endif ()
ExternalProject_Add (gettext_Project
URL http://mirror.switch.ch/ftp/mirror/gnu/gettext/gettext-0.19.8.1.tar.xz
PREFIX ${CMAKE_BINARY_DIR}
CONFIGURE_COMMAND cd gettext-runtime && ${CMD} ./configure
CONFIGURE_COMMAND cd gettext-runtime && ${ADDITIONAL_TOOL_OPTIONS} ${CMD} ./configure
--prefix=${CMAKE_BINARY_DIR}
--disable-shared
--enable-static
${ADDITIONAL_CONFIGURE_OPTIONS}
BUILD_COMMAND ${CMD} make -C gettext-runtime
INSTALL_COMMAND ${CMD} make -C gettext-runtime install
BUILD_IN_SOURCE 1
Expand All @@ -166,10 +200,11 @@ ExternalProject_Add (gettext_Project
ExternalProject_Add (libpng_Project
URL http://prdownloads.sourceforge.net/libpng/libpng-1.6.28.tar.xz
PREFIX ${CMAKE_BINARY_DIR}
CONFIGURE_COMMAND ${CMD} ./configure
CONFIGURE_COMMAND ${ADDITIONAL_TOOL_OPTIONS} ${CMD} ./configure
--prefix=${CMAKE_BINARY_DIR}
--disable-shared
--enable-static
${ADDITIONAL_CONFIGURE_OPTIONS}
BUILD_COMMAND ${CMD} make
INSTALL_COMMAND ${CMD} make install
BUILD_IN_SOURCE 1
Expand All @@ -181,6 +216,18 @@ ExternalProject_Add (libpng_Project
## FFmpeg
#########

if (ANDROID)
set (ADDITIONAL_FFMPEG_CONFIGURE_OPTIONS
--enable-cross-compile
--target-os=android
--arch=${ANDROID_SYSROOT_ABI}
--cross-prefix=${CMAKE_BINARY_DIR}/toolchain/bin/${ANDROID_HEADER_TRIPLE}-)
# TODO: We should really be using clang (gcc is deprecated in android NDK) but it doesn't work :(
# Try building with:
#--toolchain=clang-usan
#--as=${CMAKE_BINARY_DIR}/toolchain/bin/${ANDROID_HEADER_TRIPLE}-gcc # Workaround for missing as in clang, looks quite stupid but it works
endif ()

ExternalProject_Add (FFmpeg_Project
URL http://www.ffmpeg.org/releases/ffmpeg-3.2.4.tar.xz
PREFIX ${CMAKE_BINARY_DIR}
Expand Down Expand Up @@ -218,6 +265,7 @@ ExternalProject_Add (FFmpeg_Project
--disable-libxcb-shm
--disable-libxcb-xfixes
--disable-libxcb-shape
${ADDITIONAL_FFMPEG_CONFIGURE_OPTIONS}
BUILD_COMMAND ${CMD} make
INSTALL_COMMAND ${CMD} make install
BUILD_IN_SOURCE 1
Expand All @@ -228,16 +276,17 @@ ExternalProject_Add (FFmpeg_Project
## libasound
############

if (UNIX AND NOT APPLE)
if (UNIX AND NOT APPLE AND NOT ANDROID)
ExternalProject_Add (libasound_Project
URL ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.4.1.tar.bz2
PREFIX ${CMAKE_BINARY_DIR}
CONFIGURE_COMMAND ${CMD} ./configure
CONFIGURE_COMMAND ${ADDITIONAL_TOOL_OPTIONS} ${CMD} ./configure
--prefix=${CMAKE_BINARY_DIR}
--disable-shared
--enable-static
--disable-old-symbols
--disable-python
${ADDITIONAL_CONFIGURE_OPTIONS}
BUILD_COMMAND ${CMD} make
INSTALL_COMMAND ${CMD} make install
BUILD_IN_SOURCE 1
Expand All @@ -249,11 +298,11 @@ endif ()
## libpulse
###########

if (UNIX AND NOT APPLE)
if (UNIX AND NOT APPLE AND NOT ANDROID)
ExternalProject_Add (libpulse_Project
URL https://freedesktop.org/software/pulseaudio/releases/pulseaudio-11.0.tar.xz
PREFIX ${CMAKE_BINARY_DIR}
CONFIGURE_COMMAND ${CMD} ./configure
CONFIGURE_COMMAND ${ADDITIONAL_TOOL_OPTIONS} ${CMD} ./configure
--prefix=${CMAKE_BINARY_DIR}
--disable-shared
--enable-static
Expand Down Expand Up @@ -291,6 +340,7 @@ if (UNIX AND NOT APPLE)
--without-speex
--without-soxr
--with-database=simple
${ADDITIONAL_CONFIGURE_OPTIONS}
BUILD_COMMAND ${CMD} make
INSTALL_COMMAND ${CMD} make install INSTALLDIR=${CMAKE_BINARY_DIR}
BUILD_IN_SOURCE 1
Expand All @@ -303,7 +353,7 @@ endif ()
## SDL2
#######

if (UNIX AND NOT APPLE)
if (UNIX AND NOT APPLE AND NOT ANDROID)
set (SDL2_CONFIGURE --enable-video-x11
--enable-x11-shared
--enable-video-wayland
Expand All @@ -323,23 +373,27 @@ elseif (MINGW)
elseif (APPLE)
set (SDL2_CONFIGURE --enable-video-opengl
--enable-video-cocoa)
elseif (ANDROID)
set (SDL2_CONFIGURE --disable-pulseaudio)
endif ()

set (SDL2_DEPENDS zlib_Project)
if (UNIX AND NOT APPLE)
if (UNIX AND NOT APPLE AND NOT ANDROID)
set (SDL2_DEPENDS ${SDL2_DEPENDS} libasound_Project libpulse_Project)
endif ()

ExternalProject_Add (SDL2_Project
URL http://hg.libsdl.org/SDL/archive/3d0bbfe683a8.tar.bz2
PREFIX ${CMAKE_BINARY_DIR}
CONFIGURE_COMMAND ${CMD} ./configure
CONFIGURE_COMMAND ${ADDITIONAL_TOOL_OPTIONS} ${CMD} ./configure
--prefix=${CMAKE_BINARY_DIR}
--disable-shared
--enable-static
--disable-joystick
#--disable-joystick
--enable-joystick # TODO: Default SDL2 android skeleton requires joystick to build, could be probably fixed by commenting out some things
--disable-haptic
${SDL2_CONFIGURE}
${ADDITIONAL_CONFIGURE_OPTIONS}
BUILD_COMMAND ${CMD} make
INSTALL_COMMAND ${CMD} make install
BUILD_IN_SOURCE 1
Expand All @@ -354,11 +408,13 @@ ExternalProject_Add (SDL2_Project
ExternalProject_Add (SDL2_image_Project
URL https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.tar.gz
PREFIX ${CMAKE_BINARY_DIR}
CONFIGURE_COMMAND ${CMD} ./configure
# SDL_MAIN_HANDLED fixes test program linking on Android
# TODO: Is there a better way to handle this?
CONFIGURE_COMMAND CFLAGS=-DSDL_MAIN_HANDLED ${ADDITIONAL_TOOL_OPTIONS} ${CMD} ./configure
--prefix=${CMAKE_BINARY_DIR}
--disable-shared
--enable-static
--disable-sdl-test
--disable-sdltest
--disable-bmp
--disable-gif
--disable-jpg
Expand All @@ -376,6 +432,7 @@ ExternalProject_Add (SDL2_image_Project
--disable-xv
--disable-webp
--disable-webp-shared
${ADDITIONAL_CONFIGURE_OPTIONS}
BUILD_COMMAND ${CMD} make
INSTALL_COMMAND ${CMD} make install
BUILD_IN_SOURCE 1
Expand All @@ -395,7 +452,9 @@ endif ()
ExternalProject_Add (SDL2_mixer_Project
URL https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.tar.gz
PREFIX ${CMAKE_BINARY_DIR}
CONFIGURE_COMMAND ${CMD} ./configure
# SDL_MAIN_HANDLED fixes test program linking on Android
# TODO: Is there a better way to handle this?
CONFIGURE_COMMAND CFLAGS=-DSDL_MAIN_HANDLED ${ADDITIONAL_TOOL_OPTIONS} ${CMD} ./configure
--prefix=${CMAKE_BINARY_DIR}
--disable-shared
--enable-static
Expand All @@ -422,6 +481,7 @@ ExternalProject_Add (SDL2_mixer_Project
--disable-music-mp3-smpeg-shared
--disable-smpegtest
--disable-music-mp3-mad-gpl
${ADDITIONAL_CONFIGURE_OPTIONS}
BUILD_COMMAND ${CMD} make
INSTALL_COMMAND ${CMD} make install
BUILD_IN_SOURCE 1
Expand All @@ -438,9 +498,10 @@ ExternalProject_Add (SDL_kitchensink_Project
DOWNLOAD_COMMAND ""
SOURCE_DIR ${CMAKE_SOURCE_DIR}/SDL_kitchensink
PREFIX ${CMAKE_BINARY_DIR}
CMAKE_COMMAND ${CMD} cmake
CMAKE_COMMAND ${CMD} ${CMAKE_COMMAND}
CMAKE_ARGS -DDISABLE_SHARED=true
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
${ADDITIONAL_CMAKE_OPTIONS}
INSTALL_DIR ${CMAKE_BINARY_DIR}
BUILD_ALWAYS 1
DEPENDS SDL2_Project FFmpeg_Project
Expand Down Expand Up @@ -481,7 +542,7 @@ set (planetblupi_DEPS
libpng_Project
gettext_Project
)
if (UNIX AND NOT APPLE)
if (UNIX AND NOT APPLE AND NOT ANDROID)
list (APPEND planetblupi_DEPS libasound_Project libpulse_Project)
endif ()

Expand All @@ -490,19 +551,33 @@ ExternalProject_Add (planetblupi_Project
DOWNLOAD_COMMAND ""
SOURCE_DIR ${CMAKE_SOURCE_DIR}/planetblupi
PREFIX ${CMAKE_BINARY_DIR}
CMAKE_COMMAND ${CMD} cmake
CMAKE_COMMAND ${CMD} ${CMAKE_COMMAND}
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DAPPIMAGE_APPRUN_PROGRAM=${APPIMAGE_APPRUN_PROGRAM}
-DAPPIMAGE_ASSISTANT_PROGRAM=${APPIMAGE_TOOL_PROGRAM}
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DPB_HTTP_VERSION_CHECK=yes
-DSTATIC_BUILD=${STATIC_BUILD}
-DSIGN_APP=${SIGN_APP}
-DANDROID=${ANDROID}
${ADDITIONAL_CMAKE_OPTIONS}
INSTALL_DIR ${CMAKE_BINARY_DIR}
BUILD_ALWAYS 1
DEPENDS ${planetblupi_DEPS}
)

if (ANDROID)
#find_package (PkgConfig REQUIRED)
#pkg_search_module (SDL2 REQUIRED sdl2)

add_library(main SHARED android/SDL_android_main.c)
add_dependencies (main planetblupi_Project)
target_link_libraries (main PUBLIC planetblupi)

#add_dependencies (main SDL2_Project)
target_link_libraries (main PUBLIC -lintl -liconv -lSDL2 -lSDL2_image -lSDL2_mixer -lcurl -lSDL_kitchensink_static -lpng -lavformat -lavcodec -lavutil -lswscale -lswresample -lz -lGLESv1_CM -lGLESv2 -llog -landroid ${CMAKE_CXX_STANDARD_LIBRARIES_INIT})
endif ()

add_custom_target (dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)

set (CPACK_SOURCE_GENERATOR "TBZ2")
Expand Down
Loading