diff options
Diffstat (limited to 'cmake/merge_archives_unix.cmake')
-rw-r--r-- | cmake/merge_archives_unix.cmake | 41 |
1 files changed, 11 insertions, 30 deletions
diff --git a/cmake/merge_archives_unix.cmake b/cmake/merge_archives_unix.cmake index 09f4fbf2506..448c3257c30 100644 --- a/cmake/merge_archives_unix.cmake +++ b/cmake/merge_archives_unix.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009 Sun Microsystems, Inc. +# Copyright (c) 2020 IBM # Use is subject to license terms. # # This program is free software; you can redistribute it and/or modify @@ -16,41 +16,22 @@ FILE(REMOVE "${TARGET_LOCATION}") -SET(TEMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}) -MAKE_DIRECTORY(${TEMP_DIR}) -# Extract each archive to its own subdirectory(avoid object filename clashes) -SEPARATE_ARGUMENTS(STATIC_LIBS UNIX_COMMAND "${STATIC_LIBS}") -FOREACH(LIB ${STATIC_LIBS}) - GET_FILENAME_COMPONENT(NAME_NO_EXT ${LIB} NAME_WE) - SET(TEMP_SUBDIR ${TEMP_DIR}/${NAME_NO_EXT}) - MAKE_DIRECTORY(${TEMP_SUBDIR}) - EXECUTE_PROCESS( - COMMAND ${CMAKE_AR} -x ${LIB} - WORKING_DIRECTORY ${TEMP_SUBDIR} - ) +SET(MRI_SCRIPT "${TARGET}.mri") +FILE(REMOVE ${MRI_SCRIPT}) - FILE(GLOB_RECURSE LIB_OBJECTS "${TEMP_SUBDIR}/*") - SET(OBJECTS ${OBJECTS} ${LIB_OBJECTS}) -ENDFOREACH() +SET(SCRIPT_CONTENTS "CREATE ${TARGET_LOCATION}\n") -# Use relative paths, makes command line shorter. -GET_FILENAME_COMPONENT(ABS_TEMP_DIR ${TEMP_DIR} ABSOLUTE) -FOREACH(OBJ ${OBJECTS}) - FILE(RELATIVE_PATH OBJ ${ABS_TEMP_DIR} ${OBJ}) - FILE(TO_NATIVE_PATH ${OBJ} OBJ) - SET(ALL_OBJECTS ${ALL_OBJECTS} ${OBJ}) +SEPARATE_ARGUMENTS(STATIC_LIBS_LIST UNIX_COMMAND "${STATIC_LIBS}") +FOREACH(LIB ${STATIC_LIBS_LIST}) + STRING(APPEND SCRIPT_CONTENTS "ADDLIB ${LIB}\n") ENDFOREACH() +STRING(APPEND SCRIPT_CONTENTS "SAVE\nEND\n") +FILE(WRITE ${MRI_SCRIPT} "${SCRIPT_CONTENTS}") -FILE(TO_NATIVE_PATH ${TARGET_LOCATION} ${TARGET_LOCATION}) -# Now pack the objects into library with ar. EXECUTE_PROCESS( - COMMAND ${CMAKE_AR} -r ${TARGET_LOCATION} ${ALL_OBJECTS} - WORKING_DIRECTORY ${TEMP_DIR} + COMMAND ${CMAKE_AR} -M + INPUT_FILE ${MRI_SCRIPT} ) EXECUTE_PROCESS( COMMAND ${CMAKE_RANLIB} ${TARGET_LOCATION} - WORKING_DIRECTORY ${TEMP_DIR} ) - -# Cleanup -FILE(REMOVE_RECURSE ${TEMP_DIR}) |