diff options
author | Jukka Jylänki <jujjyl@gmail.com> | 2014-06-04 22:14:11 +0300 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2014-06-04 22:14:11 +0300 |
commit | 561b8424a05057caa12efb73905dda57489a25a0 (patch) | |
tree | e763c47f21e4010cd92eaad1a3e0b4680a220a3b | |
parent | 03d78f8afd6ac1b186a43330a7aaf7ee794127d5 (diff) | |
parent | a408ad03411e2774e6f520c50a1fceb52d349b73 (diff) |
Merge branch 'cmake_response_files' of https://github.com/mhenschel/emscripten into mhenschel-cmake_response_files
Conflicts:
AUTHORS
-rw-r--r-- | cmake/Platform/Emscripten.cmake | 8 | ||||
-rw-r--r-- | tests/cmake/target_library/CMakeLists.txt | 43 | ||||
-rw-r--r-- | tests/cmake/target_library/srcfile.cmake | 6 | ||||
-rw-r--r-- | tests/test_other.py | 13 |
4 files changed, 60 insertions, 10 deletions
diff --git a/cmake/Platform/Emscripten.cmake b/cmake/Platform/Emscripten.cmake index f9d8c773..362a552d 100644 --- a/cmake/Platform/Emscripten.cmake +++ b/cmake/Platform/Emscripten.cmake @@ -98,6 +98,8 @@ set(CMAKE_SYSTEM_INCLUDE_PATH "${EMSCRIPTEN_ROOT_PATH}/system/include") #SET(CMAKE_FIND_LIBRARY_PREFIXES "") #SET(CMAKE_FIND_LIBRARY_SUFFIXES ".bc") +SET(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES 1) +SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_LIBRARIES 1) SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1) SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES 1) @@ -107,10 +109,8 @@ set(CMAKE_C_RESPONSE_FILE_LINK_FLAG "@") set(CMAKE_CXX_RESPONSE_FILE_LINK_FLAG "@") # Specify the program to use when building static libraries. Force Emscripten-related command line options to clang. -set(CMAKE_CXX_ARCHIVE_CREATE "${CMAKE_AR} rc <TARGET> ${CMAKE_START_TEMP_FILE} <LINK_FLAGS> <OBJECTS>${CMAKE_END_TEMP_FILE}") -set(CMAKE_C_ARCHIVE_CREATE "${CMAKE_AR} rc <TARGET> ${CMAKE_START_TEMP_FILE} <LINK_FLAGS> <OBJECTS>${CMAKE_END_TEMP_FILE}") -set(CMAKE_CXX_ARCHIVE_APPEND "${CMAKE_AR} r <TARGET> ${CMAKE_START_TEMP_FILE} <LINK_FLAGS> <OBJECTS>${CMAKE_END_TEMP_FILE}") -set(CMAKE_C_ARCHIVE_APPEND "${CMAKE_AR} r <TARGET> ${CMAKE_START_TEMP_FILE} <LINK_FLAGS> <OBJECTS>${CMAKE_END_TEMP_FILE}") +set(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> rc <TARGET> <LINK_FLAGS> <OBJECTS>") +set(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> rc <TARGET> <LINK_FLAGS> <OBJECTS>") # Set a global EMSCRIPTEN variable that can be used in client CMakeLists.txt to detect when building using Emscripten. set(EMSCRIPTEN 1 CACHE BOOL "If true, we are targeting Emscripten output.") diff --git a/tests/cmake/target_library/CMakeLists.txt b/tests/cmake/target_library/CMakeLists.txt new file mode 100644 index 00000000..c7023192 --- /dev/null +++ b/tests/cmake/target_library/CMakeLists.txt @@ -0,0 +1,43 @@ +cmake_minimum_required(VERSION 2.8) + +project(test_cmake) + +option(BUILD_SHARED_LIBS "Build with shared libraries." OFF) + +if (CMAKE_BUILD_TYPE STREQUAL Debug) + SET(linkFlags "-g4") +else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimizations enabled. + SET(linkFlags "-O2") +endif() + +set(MAX_SRC_FILE_INDEX 30) +SET(TEST_SRC_FILE_BASE_NAME "this_is_a_test_src_file_with_a_quite_lengthy_name_to_simulate_very_long_command_line_length_problems_on_windows_") + + +foreach(i RANGE ${MAX_SRC_FILE_INDEX}) + set (TEST_FUNCTION_NAME "FooBar_${i}") + configure_file("srcfile.cmake" "${TEST_SRC_FILE_BASE_NAME}${i}.c") + configure_file("srcfile.cmake" "${TEST_SRC_FILE_BASE_NAME}${i}.cpp") + list(APPEND TEST_SOURCES "${TEST_SRC_FILE_BASE_NAME}${i}.c" "${TEST_SRC_FILE_BASE_NAME}${i}.cpp") +endforeach() + +add_library(test_cmake ${TEST_SOURCES}) + +if (WIN32) + message(FATAL_ERROR "WIN32 should not be defined when cross-compiling!") +endif() + +if (APPLE) + message(FATAL_ERROR "APPLE should not be defined when cross-compiling!") +endif() + +if (NOT EMSCRIPTEN) + message(FATAL_ERROR "EMSCRIPTEN should be defined when cross-compiling!") +endif() + +if (NOT CMAKE_C_SIZEOF_DATA_PTR) + message(FATAL_ERROR "CMAKE_C_SIZEOF_DATA_PTR was not defined!") +endif() + +# GOTCHA: If your project has custom link flags, these must be set *before* calling any of the em_link_xxx functions! +set_target_properties(test_cmake PROPERTIES LINK_FLAGS "${linkFlags}") diff --git a/tests/cmake/target_library/srcfile.cmake b/tests/cmake/target_library/srcfile.cmake new file mode 100644 index 00000000..10e9e6f8 --- /dev/null +++ b/tests/cmake/target_library/srcfile.cmake @@ -0,0 +1,6 @@ +#include <stdio.h> + +void @TEST_FUNCTION_NAME@() +{ + printf("@TEST_FUNCTION_NAME@"); +} diff --git a/tests/test_other.py b/tests/test_other.py index 59dc8cfe..39796b71 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -355,9 +355,10 @@ f.close() except KeyError: postbuild = None - cmake_cases = ['target_js', 'target_html'] - cmake_outputs = ['test_cmake.js', 'hello_world_gles.html'] - for i in range(0, 2): + cmake_cases = ['target_js', 'target_html', 'target_library', 'target_library'] + cmake_outputs = ['test_cmake.js', 'hello_world_gles.html', 'libtest_cmake.a', 'libtest_cmake.so'] + cmake_arguments = ['', '', '-DBUILD_SHARED_LIBS=OFF', '-DBUILD_SHARED_LIBS=ON'] + for i in range(0, len(cmake_cases)): for configuration in ['Debug', 'Release']: # CMake can be invoked in two ways, using 'emconfigure cmake', or by directly running 'cmake'. # Test both methods. @@ -375,11 +376,11 @@ f.close() if invoke_method == 'cmake': # Test invoking cmake directly. cmd = ['cmake', '-DCMAKE_TOOLCHAIN_FILE='+path_from_root('cmake', 'Platform', 'Emscripten.cmake'), - '-DCMAKE_BUILD_TYPE=' + configuration, '-G', generator, cmakelistsdir] + '-DCMAKE_BUILD_TYPE=' + configuration, cmake_arguments[i], '-G', generator, cmakelistsdir] else: # Test invoking via 'emconfigure cmake' - cmd = [emconfigure, 'cmake', '-DCMAKE_BUILD_TYPE=' + configuration, '-G', generator, cmakelistsdir] - + cmd = [emconfigure, 'cmake', '-DCMAKE_BUILD_TYPE=' + configuration, cmake_arguments[i], '-G', generator, cmakelistsdir] + ret = Popen(cmd, stdout=None if verbose_level >= 2 else PIPE, stderr=None if verbose_level >= 1 else PIPE).communicate() if len(ret) > 1 and ret[1] != None and len(ret[1].strip()) > 0: logging.error(ret[1]) # If there were any errors, print them directly to console for diagnostics. |