Skip to content

Commit

Permalink
update cmake
Browse files Browse the repository at this point in the history
  • Loading branch information
dnasdw committed Feb 17, 2017
1 parent d882018 commit 63492d2
Show file tree
Hide file tree
Showing 6 changed files with 244 additions and 53 deletions.
45 changes: 10 additions & 35 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,51 +9,24 @@ endif()
if(MSVC14)
set(CMAKE_GENERATOR_TOOLSET "v140_xp" CACHE STRING "Name of generator toolset." FORCE)
endif()
if(APPLE)
set(CMAKE_MACOSX_RPATH 1)
endif()
set(_3DSTOOL_MAJOR 1)
set(_3DSTOOL_MINOR 0)
set(_3DSTOOL_PATCHLEVEL 19)
if(UNIX)
if(NOT MSVC AND NOT XCODE_VERSION AND NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
endif()
option(BUILD64 "Build x86_64(unix only)" ON)
set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}")
set(ROOT_SOURCE_DIR "${PROJECT_SOURCE_DIR}")
if(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(COMMON_INCLUDE_DIR "${ROOT_SOURCE_DIR}/dep/include/windows_x86_64")
if(MSVC14)
set(COMMON_LIBRARY_DIR "${ROOT_SOURCE_DIR}/dep/lib/windows_x86_64_msvc14")
else()
set(COMMON_LIBRARY_DIR "${ROOT_SOURCE_DIR}/dep/lib/windows_x86_64")
endif()
else()
set(COMMON_INCLUDE_DIR "${ROOT_SOURCE_DIR}/dep/include/windows_x86_32")
if(MSVC14)
set(COMMON_LIBRARY_DIR "${ROOT_SOURCE_DIR}/dep/lib/windows_x86_32_msvc14")
else()
set(COMMON_LIBRARY_DIR "${ROOT_SOURCE_DIR}/dep/lib/windows_x86_32")
endif()
endif()
elseif(APPLE)
if(BUILD64)
set(COMMON_INCLUDE_DIR "${ROOT_SOURCE_DIR}/dep/include/macos_x86_64")
set(COMMON_LIBRARY_DIR "${ROOT_SOURCE_DIR}/dep/lib/macos_x86_64")
else()
set(COMMON_INCLUDE_DIR "${ROOT_SOURCE_DIR}/dep/include/macos_x86_32")
set(COMMON_LIBRARY_DIR "${ROOT_SOURCE_DIR}/dep/lib/macos_x86_32")
endif()
elseif(NOT CYGWIN)
if(BUILD64)
set(COMMON_INCLUDE_DIR "${ROOT_SOURCE_DIR}/dep/include/linux_x86_64")
set(COMMON_LIBRARY_DIR "${ROOT_SOURCE_DIR}/dep/lib/linux_x86_64")
else()
set(COMMON_INCLUDE_DIR "${ROOT_SOURCE_DIR}/dep/include/linux_x86_32")
set(COMMON_LIBRARY_DIR "${ROOT_SOURCE_DIR}/dep/lib/linux_x86_32")
endif()
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${ROOT_SOURCE_DIR}/cmake")
include(AddDep)
include(AddTarget)
include(AutoFiles)
ADD_DEP_INCLUDE_DIR("${ROOT_SOURCE_DIR}/dep")
ADD_DEP_LIBRARY_DIR("${ROOT_SOURCE_DIR}/dep")
if(UNIX)
if(CYGWIN)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
Expand All @@ -68,7 +41,7 @@ if(UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
endif()
endif()
if(WIN32)
if(MSVC OR XCODE_VERSION)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin")
else()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin/${CMAKE_BUILD_TYPE}")
Expand All @@ -81,5 +54,7 @@ else()
if(NOT APPLE)
add_definitions(-Wno-multichar -Wno-unused-result)
endif()
set(CMAKE_INSTALL_RPATH .)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
endif()
add_subdirectory(src)
209 changes: 209 additions & 0 deletions cmake/AddDep.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
function(GET_CURRENT_DEP_INCLUDE_PREFIX FOLDER)
set(INCLUDE_PREFIX)
if(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
if(MSVC14)
if(EXISTS "${FOLDER}/include/windows_x86_64_msvc14")
set(INCLUDE_PREFIX "include/windows_x86_64_msvc14")
elseif(EXISTS "${FOLDER}/include/windows_x86_64")
set(INCLUDE_PREFIX "include/windows_x86_64")
elseif(EXISTS "${FOLDER}/include/windows")
set(INCLUDE_PREFIX "include/windows")
elseif(EXISTS "${FOLDER}/include")
set(INCLUDE_PREFIX "include")
else()
set(INCLUDE_PREFIX ".")
endif()
else()
if(EXISTS "${FOLDER}/include/windows_x86_64")
set(INCLUDE_PREFIX "include/windows_x86_64")
elseif(EXISTS "${FOLDER}/include/windows")
set(INCLUDE_PREFIX "include/windows")
elseif(EXISTS "${FOLDER}/include")
set(INCLUDE_PREFIX "include")
else()
set(INCLUDE_PREFIX ".")
endif()
endif()
else()
if(MSVC14)
if(EXISTS "${FOLDER}/include/windows_x86_32_msvc14")
set(INCLUDE_PREFIX "include/windows_x86_32_msvc14")
elseif(EXISTS "${FOLDER}/include/windows_x86_32")
set(INCLUDE_PREFIX "include/windows_x86_32")
elseif(EXISTS "${FOLDER}/include/windows")
set(INCLUDE_PREFIX "include/windows")
elseif(EXISTS "${FOLDER}/include")
set(INCLUDE_PREFIX "include")
else()
set(INCLUDE_PREFIX ".")
endif()
else()
if(EXISTS "${FOLDER}/include/windows_x86_32")
set(INCLUDE_PREFIX "include/windows_x86_32")
elseif(EXISTS "${FOLDER}/include/windows")
set(INCLUDE_PREFIX "include/windows")
elseif(EXISTS "${FOLDER}/include")
set(INCLUDE_PREFIX "include")
else()
set(INCLUDE_PREFIX ".")
endif()
endif()
endif()
elseif(APPLE)
if(BUILD64)
if(EXISTS "${FOLDER}/include/macos_x86_64")
set(INCLUDE_PREFIX "include/macos_x86_64")
elseif(EXISTS "${FOLDER}/include/macos")
set(INCLUDE_PREFIX "include/macos")
elseif(EXISTS "${FOLDER}/include")
set(INCLUDE_PREFIX "include")
else()
set(INCLUDE_PREFIX ".")
endif()
else()
if(EXISTS "${FOLDER}/include/macos_x86_32")
set(INCLUDE_PREFIX "include/macos_x86_32")
elseif(EXISTS "${FOLDER}/include/macos")
set(INCLUDE_PREFIX "include/macos")
elseif(EXISTS "${FOLDER}/include")
set(INCLUDE_PREFIX "include")
else()
set(INCLUDE_PREFIX ".")
endif()
endif()
else()
if(BUILD64)
if(EXISTS "${FOLDER}/include/linux_x86_64")
set(INCLUDE_PREFIX "include/linux_x86_64")
elseif(EXISTS "${FOLDER}/include/linux")
set(INCLUDE_PREFIX "include/linux")
elseif(EXISTS "${FOLDER}/include")
set(INCLUDE_PREFIX "include")
else()
set(INCLUDE_PREFIX ".")
endif()
else()
if(EXISTS "${FOLDER}/include/linux_x86_32")
set(INCLUDE_PREFIX "include/linux_x86_32")
elseif(EXISTS "${FOLDER}/include/linux")
set(INCLUDE_PREFIX "include/linux")
elseif(EXISTS "${FOLDER}/include")
set(INCLUDE_PREFIX "include")
else()
set(INCLUDE_PREFIX ".")
endif()
endif()
endif()
set(CURRENT_DEP_INCLUDE_PREFIX ${CURRENT_DEP_INCLUDE_PREFIX} ${INCLUDE_PREFIX} PARENT_SCOPE)
endfunction()

function(ADD_DEP_INCLUDE_DIR FOLDER)
GET_CURRENT_DEP_INCLUDE_PREFIX(${FOLDER})
set(DEP_INCLUDE_DIR ${DEP_INCLUDE_DIR} "${FOLDER}/${CURRENT_DEP_INCLUDE_PREFIX}" PARENT_SCOPE)
endfunction()

function(GET_CURRENT_DEP_LIBRARY_PREFIX FOLDER)
set(LIBRARY_PREFIX)
if(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
if(MSVC14)
if(EXISTS "${FOLDER}/lib/windows_x86_64_msvc14")
set(LIBRARY_PREFIX "lib/windows_x86_64_msvc14")
elseif(EXISTS "${FOLDER}/lib/windows_x86_64")
set(LIBRARY_PREFIX "lib/windows_x86_64")
elseif(EXISTS "${FOLDER}/lib/windows")
set(LIBRARY_PREFIX "lib/windows")
elseif(EXISTS "${FOLDER}/lib")
set(LIBRARY_PREFIX "lib")
else()
set(LIBRARY_PREFIX ".")
endif()
else()
if(EXISTS "${FOLDER}/lib/windows_x86_64")
set(LIBRARY_PREFIX "lib/windows_x86_64")
elseif(EXISTS "${FOLDER}/lib/windows")
set(LIBRARY_PREFIX "lib/windows")
elseif(EXISTS "${FOLDER}/lib")
set(LIBRARY_PREFIX "lib")
else()
set(LIBRARY_PREFIX ".")
endif()
endif()
else()
if(MSVC14)
if(EXISTS "${FOLDER}/lib/windows_x86_32_msvc14")
set(LIBRARY_PREFIX "lib/windows_x86_32_msvc14")
elseif(EXISTS "${FOLDER}/lib/windows_x86_32")
set(LIBRARY_PREFIX "lib/windows_x86_32")
elseif(EXISTS "${FOLDER}/lib/windows")
set(LIBRARY_PREFIX "lib/windows")
elseif(EXISTS "${FOLDER}/lib")
set(LIBRARY_PREFIX "lib")
else()
set(LIBRARY_PREFIX ".")
endif()
else()
if(EXISTS "${FOLDER}/lib/windows_x86_32")
set(LIBRARY_PREFIX "lib/windows_x86_32")
elseif(EXISTS "${FOLDER}/lib/windows")
set(LIBRARY_PREFIX "lib/windows")
elseif(EXISTS "${FOLDER}/lib")
set(LIBRARY_PREFIX "lib")
else()
set(LIBRARY_PREFIX ".")
endif()
endif()
endif()
elseif(APPLE)
if(BUILD64)
if(EXISTS "${FOLDER}/lib/macos_x86_64")
set(LIBRARY_PREFIX "lib/macos_x86_64")
elseif(EXISTS "${FOLDER}/lib/macos")
set(LIBRARY_PREFIX "lib/macos")
elseif(EXISTS "${FOLDER}/lib")
set(LIBRARY_PREFIX "lib")
else()
set(LIBRARY_PREFIX ".")
endif()
else()
if(EXISTS "${FOLDER}/lib/macos_x86_32")
set(LIBRARY_PREFIX "lib/macos_x86_32")
elseif(EXISTS "${FOLDER}/lib/macos")
set(LIBRARY_PREFIX "lib/macos")
elseif(EXISTS "${FOLDER}/lib")
set(LIBRARY_PREFIX "lib")
else()
set(LIBRARY_PREFIX ".")
endif()
endif()
else()
if(BUILD64)
if(EXISTS "${FOLDER}/lib/linux_x86_64")
set(LIBRARY_PREFIX "lib/linux_x86_64")
elseif(EXISTS "${FOLDER}/lib/linux")
set(LIBRARY_PREFIX "lib/linux")
elseif(EXISTS "${FOLDER}/lib")
set(LIBRARY_PREFIX "lib")
else()
set(LIBRARY_PREFIX ".")
endif()
else()
if(EXISTS "${FOLDER}/lib/linux_x86_32")
set(LIBRARY_PREFIX "lib/linux_x86_32")
elseif(EXISTS "${FOLDER}/lib/linux")
set(LIBRARY_PREFIX "lib/linux")
elseif(EXISTS "${FOLDER}/lib")
set(LIBRARY_PREFIX "lib")
else()
set(LIBRARY_PREFIX ".")
endif()
endif()
endif()
set(CURRENT_DEP_LIBRARY_PREFIX ${CURRENT_DEP_LIBRARY_PREFIX} ${LIBRARY_PREFIX} PARENT_SCOPE)
endfunction()

function(ADD_DEP_LIBRARY_DIR FOLDER)
GET_CURRENT_DEP_LIBRARY_PREFIX(${FOLDER})
set(DEP_LIBRARY_DIR ${DEP_LIBRARY_DIR} "${FOLDER}/${CURRENT_DEP_LIBRARY_PREFIX}" PARENT_SCOPE)
endfunction()
9 changes: 3 additions & 6 deletions cmake/AddTarget.cmake
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
function(ADD_SHARED NAME SOURCE)
add_library(${NAME} SHARED ${SOURCE})
set_target_properties(${NAME} PROPERTIES
DEBUG_POSTFIX "_d")
set_target_properties(${NAME} PROPERTIES DEBUG_POSTFIX "_d")
endfunction()

function(ADD_STATIC NAME SOURCE)
add_library(${NAME} STATIC ${SOURCE})
set_target_properties(${NAME} PROPERTIES
DEBUG_POSTFIX "_d")
set_target_properties(${NAME} PROPERTIES DEBUG_POSTFIX "_d")
endfunction()

function(ADD_EXE NAME SOURCE)
add_executable(${NAME} ${SOURCE})
set_target_properties(${NAME} PROPERTIES
DEBUG_POSTFIX "_d")
set_target_properties(${NAME} PROPERTIES DEBUG_POSTFIX "_d")
endfunction()
26 changes: 18 additions & 8 deletions cmake/AutoFiles.cmake
Original file line number Diff line number Diff line change
@@ -1,28 +1,38 @@
function(AUTO_FILES FOLDER FILTER PATTERN)
get_filename_component(FOLDER "${FOLDER}" ABSOLUTE)
file(RELATIVE_PATH FOLDER "${CMAKE_CURRENT_SOURCE_DIR}" "${FOLDER}")
if("${FOLDER}" STREQUAL "")
set(FOLDER ".")
endif()
if(ARGC GREATER 3)
set(AUTO_FILES_EXCLUDE ${ARGN})
else()
set(AUTO_FILES_EXCLUDE)
endif()
file(GLOB AUTO_FILES_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${FOLDER}/*")
file(GLOB AUTO_FILES_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${FOLDER}/*")
set(AUTO_FILES_FOLDER_FILES)
foreach(AUTO_FILES_FILE ${AUTO_FILES_FILES})
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${AUTO_FILES_FILE}")
AUTO_FILES(${AUTO_FILES_FILE} ${FILTER} ${PATTERN} ${AUTO_FILES_EXCLUDE})
AUTO_FILES("${AUTO_FILES_FILE}" "${FILTER}" "${PATTERN}" ${AUTO_FILES_EXCLUDE})
elseif("${AUTO_FILES_FILE}" MATCHES "${PATTERN}")
if(NOT AUTO_FILES_EXCLUDE)
list(APPEND AUTO_FILES_FOLDER_FILES ${AUTO_FILES_FILE})
list(APPEND AUTO_FILES_FOLDER_FILES "${AUTO_FILES_FILE}")
elseif(NOT "${AUTO_FILES_FILE}" MATCHES "${AUTO_FILES_EXCLUDE}")
list(APPEND AUTO_FILES_FOLDER_FILES ${AUTO_FILES_FILE})
list(APPEND AUTO_FILES_FOLDER_FILES "${AUTO_FILES_FILE}")
endif()
endif()
endforeach()
string(REPLACE "./" "" AUTO_FILES_FILTER ${FOLDER})
string(REPLACE "/" "\\" AUTO_FILES_FILTER ${AUTO_FILES_FILTER})
string(REPLACE "../" "..\\" AUTO_FILES_FILTER "${FOLDER}")
string(REPLACE "./" "" AUTO_FILES_FILTER "${AUTO_FILES_FILTER}")
string(REPLACE "/" "\\" AUTO_FILES_FILTER "${AUTO_FILES_FILTER}")
string(REPLACE "..\\" "../" AUTO_FILES_FILTER "${AUTO_FILES_FILTER}")
if("${AUTO_FILES_FILTER}" STREQUAL "../")
set(AUTO_FILES_FILTER "..")
endif()
if("${AUTO_FILES_FILTER}" STREQUAL ".")
source_group(${FILTER} FILES ${AUTO_FILES_FOLDER_FILES})
source_group("${FILTER}" FILES ${AUTO_FILES_FOLDER_FILES})
else()
source_group(${FILTER}\\${AUTO_FILES_FILTER} FILES ${AUTO_FILES_FOLDER_FILES})
source_group("${FILTER}\\${AUTO_FILES_FILTER}" FILES ${AUTO_FILES_FOLDER_FILES})
endif()
set(src ${src} ${AUTO_FILES_FOLDER_FILES} PARENT_SCOPE)
endfunction()
4 changes: 2 additions & 2 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
AUTO_FILES(".." "src" "README\\.md")
AUTO_FILES("." "src" "\\.(cpp|h)$")
include_directories(${COMMON_INCLUDE_DIR})
link_directories(${COMMON_LIBRARY_DIR})
include_directories(${DEP_INCLUDE_DIR})
link_directories(${DEP_LIBRARY_DIR})
add_definitions(-DCURL_STATICLIB)
if(WIN32)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
Expand Down
4 changes: 2 additions & 2 deletions src/utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,10 @@ typedef uint64_t u64;
#endif
#if _3DSTOOL_COMPILER_VERSION < 1600
typedef wchar_t Char16_t;
typedef std::wstring U16String;
typedef wstring U16String;
#elif _3DSTOOL_COMPILER_VERSION >= 1900
typedef u16 Char16_t;
typedef std::basic_string<Char16_t> U16String;
typedef basic_string<Char16_t> U16String;
#else
typedef char16_t Char16_t;
typedef u16string U16String;
Expand Down

0 comments on commit 63492d2

Please sign in to comment.