From 8cec8af3b14230d5bb9bd60b58b732029c6d3a0c Mon Sep 17 00:00:00 2001 From: lethosor Date: Fri, 8 Jan 2016 21:08:26 -0500 Subject: [PATCH] CMake: Support cross-compiling This relies on a working cross-compiler, of course, as well as a separate build directory for cross-compiled builds, with DFHACK_NATIVE_BUILD_DIR pointing to an already-successful native build directory (this is needed for protoc). --- CMakeLists.txt | 5 +++++ depends/protobuf/CMakeLists.txt | 19 ++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 193339077..a8e29ebb5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,6 +58,11 @@ if(MSVC) add_definitions( "/wd4819" ) endif() +IF(CMAKE_CROSSCOMPILING) + SET(DFHACK_NATIVE_BUILD_DIR "DFHACK_NATIVE_BUILD_DIR-NOTFOUND" CACHE FILEPATH "Path to a native build directory") + INCLUDE("${DFHACK_NATIVE_BUILD_DIR}/ImportExecutables.cmake") +ENDIF() + # set up folder structures for IDE solutions # MSVC Express won't load solutions that use this. It also doesn't include MFC supported # Check for MFC! diff --git a/depends/protobuf/CMakeLists.txt b/depends/protobuf/CMakeLists.txt index 9ec13e6ca..39726c81a 100644 --- a/depends/protobuf/CMakeLists.txt +++ b/depends/protobuf/CMakeLists.txt @@ -22,7 +22,12 @@ IF(CMAKE_COMPILER_IS_GNUCC) FOREACH(namespace std::tr1 std ) IF(HAVE_HASH_MAP EQUAL 0 AND NOT STL_HASH_OLD_GCC) CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/testHashMap.cpp.in" "${CMAKE_CURRENT_SOURCE_DIR}/testHashMap.cpp") - TRY_RUN(HASH_MAP_RUN_RESULT HASH_MAP_COMPILE_RESULT ${PROJECT_BINARY_DIR}/CMakeTmp "${CMAKE_CURRENT_SOURCE_DIR}/testHashMap.cpp") + IF(CMAKE_CROSSCOMPILING) + TRY_COMPILE(HASH_MAP_COMPILE_RESULT ${PROJECT_BINARY_DIR}/CMakeTmp "${CMAKE_CURRENT_SOURCE_DIR}/testHashMap.cpp") + SET(HASH_MAP_RUN_RESULT ${HASH_MAP_COMPILE_RESULT}) + ELSE() + TRY_RUN(HASH_MAP_RUN_RESULT HASH_MAP_COMPILE_RESULT ${PROJECT_BINARY_DIR}/CMakeTmp "${CMAKE_CURRENT_SOURCE_DIR}/testHashMap.cpp") + ENDIF() IF (HASH_MAP_COMPILE_RESULT AND HASH_MAP_RUN_RESULT EQUAL 1) SET(HASH_MAP_H <${header}>) STRING(REPLACE "map" "set" HASH_SET_H ${HASH_MAP_H}) @@ -237,8 +242,12 @@ TARGET_LINK_LIBRARIES(protoc protobuf) # Protobuf compiler executable -ADD_EXECUTABLE(protoc-bin google/protobuf/compiler/main.cc google/protobuf/compiler/command_line_interface.h google/protobuf/compiler/cpp/cpp_generator.h) -IDE_FOLDER(protoc-bin "Depends") +IF(NOT CMAKE_CROSSCOMPILING) + ADD_EXECUTABLE(protoc-bin google/protobuf/compiler/main.cc google/protobuf/compiler/command_line_interface.h google/protobuf/compiler/cpp/cpp_generator.h) + IDE_FOLDER(protoc-bin "Depends") -SET_TARGET_PROPERTIES(protoc-bin PROPERTIES OUTPUT_NAME protoc) -TARGET_LINK_LIBRARIES(protoc-bin protoc) + SET_TARGET_PROPERTIES(protoc-bin PROPERTIES OUTPUT_NAME protoc) + TARGET_LINK_LIBRARIES(protoc-bin protoc) + + EXPORT(TARGETS protoc-bin FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake ) +ENDIF()