axmol/cmake/Modules/CocosPickLibs.cmake

309 lines
9.2 KiB
CMake

# CocosPickLibs - sets external libs variables to link with
# START CONFIG
# record all the prebuilt libs which found for specific platform
set(COCOS_EXTERNAL_LIBS)
# lib location is Debug folder or release folder
string(TOLOWER ${CMAKE_BUILD_TYPE} BUILD_TYPE_FOLDER)
set(_chipmunk_inc chipmunk/chipmunk.h)
set(_chipmunk_inc_paths include)
if(WINDOWS)
if(MSVC)
set(_chipmunk_libs chipmunk libchipmunk libchipmunk-2015)
else()
set(_chipmunk_libs chipmunk libchipmunk)
endif()
else()
set(_chipmunk_libs chipmunk libchipmunk)
endif(WINDOWS)
set(_bullet_inc bullet/Bullet-C-Api.h BulletCollision/btBulletCollisionCommon.h)
set(_bullet_inc_paths bullet)
# sequence is important
set(_bullet_libs BulletDynamics libBulletDynamics BulletCollision libBulletCollision BulletMultiThreaded libBulletMultiThreaded LinearMath libLinearMath MiniCL libMiniCL)
if(MSVC)
set(_bullet_libs bullet libbullet)
endif()
set(_Box2D_inc Box2D/Box2D.h)
set(_Box2D_inc_paths include)
set(_Box2D_libs box2d libbox2d)
set(_Box2D_prefix Box2D)
set(_glfw3_inc glfw3.h glfw3native.h)
set(_glfw3_libs glfw3 libglfw3)
set(_curl_inc curl/curl.h)
# order: curl, ssl, crypto
set(_curl_libs curl libcurl_imp libcurl ssl libeay32 ssleay32 crypto)
set(_freetype2_prefix FREETYPE)
set(_freetype2_inc ft2build.h freetype/freetype.h)
set(_freetype2_inc_paths freetype2)
set(_freetype2_libs freetype freetype250)
set(_jpeg_inc jpeglib.h)
if(WINDOWS)
if(MSVC)
set(_jpeg_libs jpeg libjpeg libjpeg-2015)
else()
set(_jpeg_libs jpeg libjpeg)
endif()
else()
set(_jpeg_libs jpeg libjpeg)
endif(WINDOWS)
set(_png_inc png.h)
if(WINDOWS)
if(MSVC)
set(_png_libs png libpng libpng-2015)
else()
set(_png_libs png libpng)
endif()
else()
set(_png_libs png libpng)
endif(WINDOWS)
set(_tiff_inc tiff.h)
if(WINDOWS)
if(MSVC)
set(_tiff_libs tiff libtiff libtiff-2015)
else()
set(_tiff_libs tiff libtiff)
endif()
else()
set(_tiff_libs tiff libtiff)
endif(WINDOWS)
set(_webp_inc decode.h)
set(_webp_libs webp libwebp)
set(_websockets_inc libwebsockets.h)
set(_websockets_libs websockets libwebsockets)
set(_openssl_inc openssl/ssl.h)
set(_openssl_libs ssl crypto)
if(MSVC)
set(_openssl_libs ssl crypto libssl libcrypto)
endif()
set(_sqlite3_inc sqlite3.h)
set(_sqlite3_libs sqlite3)
set(_gles_prefix GLEW)
set(_gles_inc GL/glew.h)
set(_gles_inc_paths OGLES)
set(_gles_libs glew32)
set(_icon_prefix ICONV)
set(_icon_inc iconv.h)
set(_icon_libs libiconv)
set(_MP3Decoder_prefix MPG123)
set(_MP3Decoder_inc mpg123.h)
set(_MP3Decoder_libs libmpg123)
set(_OggDecoder_prefix VORBIS)
set(_OggDecoder_inc ogg/ogg.h)
set(_OggDecoder_libs libogg libvorbis libvorbisfile)
set(_OpenalSoft_prefix OPENAL)
set(_OpenalSoft_inc al.h)
set(_OpenalSoft_inc_paths AL)
set(_OpenalSoft_libs OpenAL32)
set(_zlib_inc zlib.h)
set(_zlib_libs z libzlib libz)
if(MSVC)
set(_zlib_libs libzlib)
# zlib's dll is so special, lib name and dll name is different
# single special
set(_zlib_dll zlib1)
endif()
set(_fmod_prefix FMOD)
set(_fmod_inc fmod.hpp)
set(_fmod_libs fmod fmod64 fmod fmod64)
set(_luajit_prefix LUAJIT)
set(_luajit_inc lua.hpp)
set(_luajit_libs luajit)
if(MSVC)
set(_luajit_libs lua51)
endif()
set(_spidermonkey_prefix SPIDERMONKEY)
set(_spidermonkey_inc jsapi.h)
set(_spidermonkey_libs js_static)
if(MSVC)
set(_spidermonkey_libs mozjs-33)
endif()
set(all_prebuilt_libs
chipmunk
curl
freetype2
jpeg
png
tiff
webp
websockets
openssl
bullet
Box2D
luajit
spidermonkey
)
if(MACOSX)
list(APPEND all_prebuilt_libs glfw3 zlib)
endif()
# We use MSVC instead of WINDOWS because it can be mingw that can't use our prebuilt libs
if(MSVC)
list(APPEND all_prebuilt_libs glfw3 sqlite3 gles icon MP3Decoder OggDecoder OpenalSoft zlib)
endif()
if(LINUX)
list(APPEND all_prebuilt_libs fmod glfw3)
endif()
if(ANDROID)
list(APPEND all_prebuilt_libs zlib)
endif()
# END CONFIG
foreach(_lib ${all_prebuilt_libs})
if(_${_lib}_prefix)
set(_prefix ${_${_lib}_prefix})
else()
# auto-prefix is uppercased name
string(TOUPPER ${_lib} _prefix)
set(_${_lib}_prefix ${_prefix})
endif()
set(roots
${COCOS_EXTERNAL_DIR}/${_lib}
${COCOS_EXTERNAL_DIR}/${PLATFORM_FOLDER}-specific/${_lib}
#lua/luajit
${COCOS_EXTERNAL_DIR}/lua/${_lib}
)
foreach(_root ${roots})
if(EXISTS ${_root})
set(include_dir_candidates
${_root}/include
${_root}/include/${ARCH_DIR}
${_root}/include/${PLATFORM_FOLDER}
${_root}/include/${PLATFORM_FOLDER}/${ARCH_DIR}
)
set(include_dirs)
foreach(_dir ${include_dir_candidates})
if(EXISTS ${_dir})
# find all include paths
if(_${_lib}_inc_paths)
set(_suffixes ${_${_lib}_inc_paths})
else()
set(_suffixes include)
endif()
foreach(_inc_name ${_${_lib}_inc})
unset(_inc_tmp CACHE)
find_path(_inc_tmp ${_inc_name} PATH_SUFFIXES ${_suffixes} PATHS ${_dir} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
if(_inc_tmp)
list(APPEND include_dirs ${_inc_tmp})
endif()
endforeach()
endif(EXISTS ${_dir})
endforeach()
if(include_dirs)
set(${_prefix}_INCLUDE_DIRS ${include_dirs} CACHE PATH "Path to includes for ${_prefix}" FORCE)
message(STATUS "${_lib} ${_prefix}_INCLUDE_DIRS: ${${_prefix}_INCLUDE_DIRS}")
# don't find lib, if not find include in once ${_root} search
set(lib_dir_candidates
${_root}/prebuilt/${PLATFORM_FOLDER}
${_root}/prebuilt/${PLATFORM_FOLDER}/${BUILD_TYPE_FOLDER}
${_root}/prebuilt/${PLATFORM_FOLDER}/${BUILD_TYPE_FOLDER}-lib
${_root}/libraries/${PLATFORM_FOLDER}
${_root}/prebuilt
)
if(ANDROID_ABI)
list(APPEND lib_dir_candidates ${_root}/prebuilt/${PLATFORM_FOLDER}/${ANDROID_ABI})
endif()
if(ARCH_DIR)
list(APPEND lib_dir_candidates ${_root}/prebuilt/${PLATFORM_FOLDER}/${ARCH_DIR})
list(APPEND lib_dir_candidates ${_root}/prebuilt/${ARCH_DIR})
endif()
set(libs)
set(dlls)
foreach(_dir ${lib_dir_candidates})
if(EXISTS ${_dir})
# find all libs
foreach(_lib_name ${_${_lib}_libs})
find_library(_lib_tmp ${_lib_name} PATHS ${_dir} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
if(_lib_tmp)
list(APPEND libs ${_lib_tmp})
#find dlls for _lib_tmp
if(MSVC)
cocos_find_dlls_for_lib(_dll_tmp LIB_ABS_PATH ${_lib_tmp})
endif()
list(APPEND dlls ${_dll_tmp})
unset(_dll_tmp CACHE)
endif()
unset(_lib_tmp CACHE)
endforeach()
endif(EXISTS ${_dir})
endforeach()
if(libs)
set(${_prefix}_LIBRARIES ${libs} CACHE STRING "Libraries to link for ${_prefix}" FORCE)
message(STATUS "${_lib} ${_prefix}_LIBRARIES: ${${_prefix}_LIBRARIES}")
endif()
if(MSVC)
if(dlls)
# remove repeat items
list(REMOVE_DUPLICATES dlls)
# set dlls into var ${_prefix}_DLLS
set(${_prefix}_DLLS ${dlls} CACHE STRING "dlls to link for ${_prefix}" FORCE)
message(STATUS "${_lib} ${_prefix}_DLLS: ${${_prefix}_DLLS}")
endif(dlls)
endif()
if(${_prefix}_LIBRARIES AND ${_prefix}_INCLUDE_DIRS)
set(${_prefix}_FOUND YES)
list(APPEND COCOS_EXTERNAL_LIBS ${${_prefix}_LIBRARIES})
endif()
endif()
endif(EXISTS ${_root})
endforeach()
endforeach()
# use engine prebuilt libs, try to pick all engine libs
if(USE_COCOS_PREBUILT)
# cocos2d/jscocos2d/luacocos2d
set(_cocos2d_prefix COCOS2D)
cocos_find_prebuilt_lib_by_name(cocos2d COCOS2D_LIBRARIES)
set(_jscocos2d_prefix JSCOCOS2D)
cocos_find_prebuilt_lib_by_name(jscocos2d JSCOCOS2D_LIBRARIES)
set(_luacocos2d_prefix LUACOCOS2D)
cocos_find_prebuilt_lib_by_name(luacocos2d LUACOCOS2D_LIBRARIES)
set(_simulator_prefix SIMULATOR)
cocos_find_prebuilt_lib_by_name(simulator SIMULATOR_LIBRARIES)
if(ANDROID)
set(_cocos2d_android_prefix ANDROID_COCOS2D)
cocos_find_prebuilt_lib_by_name(cocos2d_android ANDROID_COCOS2D_LIBRARIES)
endif()
endif(USE_COCOS_PREBUILT)