diff --git a/CMakeLists.txt b/CMakeLists.txt index a021f7a7e5..752b0230dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,6 +166,12 @@ set(NACL_VM_INHERITED_OPTIONS "${DEFAULT_NACL_VM_INHERITED_OPTIONS}" CACHE STRIN "Semicolon-separated list of options for which NaCl game VMs should use the same value as the other binaries") mark_as_advanced(NACL_VM_INHERITED_OPTIONS) +# Warning: changing SAIGOSDK_DIR/SAIGOSDK_VERSION after subprojects have been configured WILL +# change the compiler, but it is a bad idea since flag tests and such (not to mention the actual +# compiled artifacts) will be out of date. +set(SAIGOSDK_DIR "" CACHE PATH "Override Saigo NaCl SDK path") +mark_as_advanced(SAIGOSDK_DIR) + ################################################################################ # Directories ################################################################################ @@ -275,8 +281,8 @@ endif() option(USE_EXTERNAL_DEPS_LIBS "Build and link against libraries from the EXTERNAL_DEPS_DIR" ${DEFAULT_USE_EXTERNAL_DEPS_LIBS}) -set(PNACLSDK_PREFIX "${DEPS_DIR}/pnacl" CACHE PATH "PNaCl SDK path") -mark_as_advanced(PNACLSDK_PREFIX) +set(PNACLSDK_DIR "${DEPS_DIR}/pnacl" CACHE PATH "PNaCl SDK path") +mark_as_advanced(PNACLSDK_DIR) if (USE_EXTERNAL_DEPS AND NOT YOKAI_TARGET_SYSTEM_NACL) if (DEPS_DIR) @@ -456,7 +462,7 @@ if (DEPS_DIR) endif() endif() - if (BUILD_GAME_NACL AND USE_NACL_SAIGO AND NOT SAIGOSDK_PREFIX) + if (BUILD_GAME_NACL AND USE_NACL_SAIGO AND NOT SAIGOSDK_DIR) include(DaemonDependenciesDownload) download_saigosdk() endif() diff --git a/cmake/DaemonDependenciesDownload.cmake b/cmake/DaemonDependenciesDownload.cmake index 2313300d3e..3caec7aa16 100644 --- a/cmake/DaemonDependenciesDownload.cmake +++ b/cmake/DaemonDependenciesDownload.cmake @@ -26,18 +26,14 @@ # TODO: Move other deps downloading code in here. -set(SAIGOSDK_BASENAME "saigosdk-${DEPS_SYSTEM}-${DEPS_ARCH}_${SAIGOSDK_VERSION}") - -# Warning: changing SAIGOSDK_PREFIX/SAIGOSDK_VERSION after subprojects have been configured WILL -# change the compiler, but it is a bad idea since flag tests and such (not to mention the actual -# compiled artifacts) will be out of date. -set(SAIGOSDK_PREFIX "${EXTERNAL_DEPS_DIR}/${SAIGOSDK_BASENAME}" CACHE PATH "PNaCl SDK path") -mark_as_advanced(SAIGOSDK_PREFIX) - # As an alternative to downloading, external_deps/sdk-build.sh can be used, to build the host-mode # dependencies and install them in the expected path. + +# Download the SDK, if it is not already there. Upon success, cache the path in SAIGOSDK_DIR. function(download_saigosdk) - if (NOT EXISTS "${SAIGOSDK_PREFIX}") + string(TOLOWER "${YOKAI_HOST_SYSTEM_NAME}" HOST_SYSTEM_SLUG) + set(SAIGOSDK_BASENAME "saigosdk-${HOST_SYSTEM_SLUG}-${YOKAI_HOST_ARCH_NAME}_${SAIGOSDK_VERSION}") + if (NOT EXISTS "${EXTERNAL_DEPS_DIR}/${SAIGOSDK_BASENAME}") set(DEPS_FILENAME "${SAIGOSDK_BASENAME}.tar.xz") set(REMOTE "https://github.com/DaemonEngine/saigo-nacl-sdk/releases/download/v${SAIGOSDK_VERSION}/${DEPS_FILENAME}") message(STATUS "Downloading NaCl SDK from '${REMOTE}'") @@ -71,4 +67,6 @@ function(download_saigosdk) message(FATAL_ERROR "Could not extract ${DEPS_FILENAME}") endif() endif() + # Set SAIGOSDK_DIR in the cache now that it is known to have been created + set_property(CACHE SAIGOSDK_DIR PROPERTY VALUE "${EXTERNAL_DEPS_DIR}/${SAIGOSDK_BASENAME}") endfunction() diff --git a/cmake/DaemonGame.cmake b/cmake/DaemonGame.cmake index b4c449fd8f..31c790f3ac 100644 --- a/cmake/DaemonGame.cmake +++ b/cmake/DaemonGame.cmake @@ -227,8 +227,8 @@ function(GAMEMODULE) if (BUILD_GAME_NACL AND NOT YOKAI_TARGET_SYSTEM_NACL) if (USE_NACL_SAIGO) - if (NOT IS_DIRECTORY "${SAIGOSDK_PREFIX}") - message(FATAL_ERROR "SAIGOSDK_PREFIX configured as '${SAIGOSDK_PREFIX}' which is not an existing directory") + if (NOT IS_DIRECTORY "${SAIGOSDK_DIR}") + message(FATAL_ERROR "SAIGOSDK_DIR configured as '${SAIGOSDK_DIR}' which is not an existing directory") endif() add_custom_target(nacl-vms ALL) @@ -246,7 +246,7 @@ function(GAMEMODULE) # TODO: Remove USE_NACL_SAIGO once the game uses YOKAI_TARGET_SYSTEM_NACL. gameSubProject( "-DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR}/cmake/cross-toolchain-saigo-${nacl_target}.cmake" - "-DSAIGOSDK_PREFIX=${SAIGOSDK_PREFIX}" + "-DSAIGOSDK_DIR=${SAIGOSDK_DIR}" -DUSE_NACL_SAIGO=ON -DBUILD_GAME_NACL=ON -DBUILD_GAME_NATIVE_DLL=OFF @@ -255,8 +255,8 @@ function(GAMEMODULE) ) endforeach() else() - if (NOT IS_DIRECTORY "${PNACLSDK_PREFIX}") - message(FATAL_ERROR "PNACLSDK_PREFIX configured as '${PNACLSDK_PREFIX}' which is not an existing directory") + if (NOT IS_DIRECTORY "${PNACLSDK_DIR}") + message(FATAL_ERROR "PNACLSDK_DIR configured as '${PNACLSDK_DIR}' which is not an existing directory") endif() set(NACL_VMS_PROJECT nacl-vms) @@ -267,7 +267,7 @@ function(GAMEMODULE) gameSubProject( "-DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR}/cmake/cross-toolchain-pnacl.cmake" - "-DPNACLSDK_PREFIX=${PNACLSDK_PREFIX}" + "-DPNACLSDK_DIR=${PNACLSDK_DIR}" -DUSE_NACL_SAIGO=OFF -DBUILD_GAME_NACL=ON -DBUILD_GAME_NATIVE_DLL=OFF diff --git a/cmake/cross-toolchain-pnacl.cmake b/cmake/cross-toolchain-pnacl.cmake index eb71dbc5cc..64abf57dcb 100644 --- a/cmake/cross-toolchain-pnacl.cmake +++ b/cmake/cross-toolchain-pnacl.cmake @@ -37,22 +37,22 @@ endif() set(PNACL_TRIPLET "pnacl") -if ("${PNACLSDK_PREFIX}" STREQUAL "") +if ("${PNACLSDK_DIR}" STREQUAL "") find_program(PATH_PNACL_CLANG NAMES "${PNACL_TRIPLET}-clang${PNACL_EXECUTABLE_SUFFIX}") - get_filename_component(PNACLSDK_PREFIX ${PATH_PNACL_CLANG} DIRECTORY) + get_filename_component(PNACLSDK_DIR ${PATH_PNACL_CLANG} DIRECTORY) endif() -list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES PNACLSDK_PREFIX) +list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES PNACLSDK_DIR) set(CMAKE_SYSTEM_NAME "Generic") -set(CMAKE_C_COMPILER "${PNACLSDK_PREFIX}/bin/${PNACL_TRIPLET}-clang${PNACL_EXECUTABLE_SUFFIX}") -set(CMAKE_CXX_COMPILER "${PNACLSDK_PREFIX}/bin/${PNACL_TRIPLET}-clang++${PNACL_EXECUTABLE_SUFFIX}") -set(CMAKE_AR "${PNACLSDK_PREFIX}/bin/${PNACL_TRIPLET}-ar${PNACL_EXECUTABLE_SUFFIX}" CACHE FILEPATH "Archiver" FORCE) -set(CMAKE_RANLIB "${PNACLSDK_PREFIX}/bin/${PNACL_TRIPLET}-ranlib${PNACL_EXECUTABLE_SUFFIX}") -set(PNACL_TRANSLATE "${PNACLSDK_PREFIX}/bin/${PNACL_TRIPLET}-translate${PNACL_EXECUTABLE_SUFFIX}") -set(CMAKE_STRIP "${PNACLSDK_PREFIX}/bin/${PNACL_TRIPLET}-strip${PNACL_EXECUTABLE_SUFFIX}") -set(CMAKE_FIND_ROOT_PATH "${PNACLSDK_PREFIX}/le32-nacl") +set(CMAKE_C_COMPILER "${PNACLSDK_DIR}/bin/${PNACL_TRIPLET}-clang${PNACL_EXECUTABLE_SUFFIX}") +set(CMAKE_CXX_COMPILER "${PNACLSDK_DIR}/bin/${PNACL_TRIPLET}-clang++${PNACL_EXECUTABLE_SUFFIX}") +set(CMAKE_AR "${PNACLSDK_DIR}/bin/${PNACL_TRIPLET}-ar${PNACL_EXECUTABLE_SUFFIX}" CACHE FILEPATH "Archiver" FORCE) +set(CMAKE_RANLIB "${PNACLSDK_DIR}/bin/${PNACL_TRIPLET}-ranlib${PNACL_EXECUTABLE_SUFFIX}") +set(PNACL_TRANSLATE "${PNACLSDK_DIR}/bin/${PNACL_TRIPLET}-translate${PNACL_EXECUTABLE_SUFFIX}") +set(CMAKE_STRIP "${PNACLSDK_DIR}/bin/${PNACL_TRIPLET}-strip${PNACL_EXECUTABLE_SUFFIX}") +set(CMAKE_FIND_ROOT_PATH "${PNACLSDK_DIR}/le32-nacl") set(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES 1) set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_LIBRARIES 1) diff --git a/cmake/cross-toolchain-saigo-common.cmake b/cmake/cross-toolchain-saigo-common.cmake index 0c7a928e40..580ef0eccd 100644 --- a/cmake/cross-toolchain-saigo-common.cmake +++ b/cmake/cross-toolchain-saigo-common.cmake @@ -24,27 +24,31 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +if (CMAKE_HOST_WIN32) + set(SAIGOSDK_BIN_EXT ".exe") +endif() + # We can't use CMAKE_EXECUTABLE_SUFFIX because the Generic Platform will reset it # and creating a Platform module for setting CMAKE_EXECUTABLE_SUFFIX is overkill. set(NACL_EXECUTABLE_SUFFIX ".nexe") set(SAIGO_TRIPLET "${SAIGO_ARCH}-nacl") -if ("${SAIGOSDK_PREFIX}" STREQUAL "") +if ("${SAIGOSDK_DIR}" STREQUAL "") find_program(PATH_SAIGO_CLANG NAMES "${SAIGO_TRIPLET}-clang") - get_filename_component(SAIGOSDK_PREFIX ${PATH_SAIGO_CLANG} DIRECTORY) + get_filename_component(SAIGOSDK_DIR ${PATH_SAIGO_CLANG} DIRECTORY) endif() -list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES SAIGOSDK_PREFIX) +list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES SAIGOSDK_DIR) set(CMAKE_SYSTEM_NAME "Generic") -set(CMAKE_C_COMPILER "${SAIGOSDK_PREFIX}/bin/${SAIGO_TRIPLET}-clang") -set(CMAKE_CXX_COMPILER "${SAIGOSDK_PREFIX}/bin/${SAIGO_TRIPLET}-clang++") -set(CMAKE_AR "${SAIGOSDK_PREFIX}/bin/${SAIGO_TRIPLET}-ar" CACHE FILEPATH "Archiver" FORCE) -set(CMAKE_RANLIB "${SAIGOSDK_PREFIX}/bin/${SAIGO_TRIPLET}-ranlib") -set(CMAKE_STRIP "${SAIGOSDK_PREFIX}/bin/${SAIGO_TRIPLET}-strip") -set(CMAKE_FIND_ROOT_PATH "${SAIGOSDK_PREFIX}/${SAIGO_TRIPLET}") +set(CMAKE_C_COMPILER "${SAIGOSDK_DIR}/bin/${SAIGO_TRIPLET}-clang${SAIGOSDK_BIN_EXT}") +set(CMAKE_CXX_COMPILER "${SAIGOSDK_DIR}/bin/${SAIGO_TRIPLET}-clang++${SAIGOSDK_BIN_EXT}") +set(CMAKE_AR "${SAIGOSDK_DIR}/bin/${SAIGO_TRIPLET}-ar${SAIGOSDK_BIN_EXT}" CACHE FILEPATH "Archiver" FORCE) +set(CMAKE_RANLIB "${SAIGOSDK_DIR}/bin/${SAIGO_TRIPLET}-ranlib${SAIGOSDK_BIN_EXT}") +set(CMAKE_STRIP "${SAIGOSDK_DIR}/bin/${SAIGO_TRIPLET}-strip${SAIGOSDK_BIN_EXT}") +set(CMAKE_FIND_ROOT_PATH "${SAIGOSDK_DIR}/${SAIGO_TRIPLET}") # Copy-pasted from the PNaCl toolchain, it's not sure we need it. set(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES 1) diff --git a/cmake/cross-toolchain-saigo-i686.cmake b/cmake/cross-toolchain-saigo-i686.cmake index 1bd9b1f0c5..2dd3bf960c 100644 --- a/cmake/cross-toolchain-saigo-i686.cmake +++ b/cmake/cross-toolchain-saigo-i686.cmake @@ -27,13 +27,13 @@ set(SAIGO_ARCH "i686") include("${CMAKE_CURRENT_LIST_DIR}/cross-toolchain-saigo-common.cmake") -if (EXISTS "${SAIGOSDK_PREFIX}/x86_64-nacl/lib32") +if (EXISTS "${SAIGOSDK_DIR}/x86_64-nacl/lib32") # This will search libraries in paths in this order: # - i686-nacl/lib # - x86_64-nacl/lib32 # - x86_64-nacl/lib # The last path is wrong but is not used when the lib is found before, # so it is meant to work on well-formed SDK installations. - list(APPEND CMAKE_FIND_ROOT_PATH "${SAIGOSDK_PREFIX}/x86_64-nacl") + list(APPEND CMAKE_FIND_ROOT_PATH "${SAIGOSDK_DIR}/x86_64-nacl") set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX "32") endif()