From 64d946d551dc3ca5b52acc75b839289a9712813d Mon Sep 17 00:00:00 2001 From: Ashley Date: Sat, 3 Sep 2016 16:29:04 +1000 Subject: [PATCH] create shared lib instead of fat bins --- .../aura/compiler/target/AbstractTarget.java | 20 ++--- vm/CMakeLists.txt | 26 ++++-- vm/MergeStaticLibObjectFiles.cmake | 80 ------------------- vm/bc/src/CMakeLists.txt | 2 +- vm/core/src/CMakeLists.txt | 4 +- vm/debug/src/CMakeLists.txt | 2 +- vm/rt/CMakeLists.txt | 3 +- 7 files changed, 33 insertions(+), 104 deletions(-) delete mode 100644 vm/MergeStaticLibObjectFiles.cmake diff --git a/compiler/src/main/java/aura/compiler/target/AbstractTarget.java b/compiler/src/main/java/aura/compiler/target/AbstractTarget.java index e55135f31..6ec1cdb18 100644 --- a/compiler/src/main/java/aura/compiler/target/AbstractTarget.java +++ b/compiler/src/main/java/aura/compiler/target/AbstractTarget.java @@ -107,23 +107,22 @@ public void build(List objectFiles, boolean dryRun) throws IOException { String libSuffix = config.isUseDebugLibs() ? "-dbg" : ""; - libs.add("-laura-bc" + libSuffix); + libs.add("-laura-bc" + libSuffix); if (config.getOs().getFamily() == OS.Family.darwin) { - libs.add("-force_load"); - libs.add(new File(config.getOsArchDepLibDir(), "libaura-rt" + libSuffix + ".a").getAbsolutePath()); + libs.add("-laura-rt" + libSuffix); } else { libs.addAll(Arrays.asList("-Wl,--whole-archive", "-laura-rt" + libSuffix, "-Wl,--no-whole-archive")); } if (config.isSkipInstall()) { libs.add("-laura-debug" + libSuffix); } - if (config.getOs().getFamily() == OS.Family.freebsd) { - libs.addAll(Arrays.asList( - "-laura-core" + libSuffix, "-lgc" + libSuffix, "-lpthread", "-lc","-lm","-lc++", "-lssl", "-lcrypto", "-Wall", "-Wextra", "-Wl")); - } else { - libs.addAll(Arrays.asList( - "-laura-core" + libSuffix, "-lgc" + libSuffix, "-lpthread", "-ldl", "-lm", "-lz")); - } + if (config.getOs().getFamily() == OS.Family.freebsd) { + libs.addAll(Arrays.asList( + "-laura-core" + libSuffix, "-lgc" + libSuffix, "-lpthread", "-lc","-lm","-lc++", "-lssl", "-lcrypto", "-Wall", "-Wextra", "-Wl")); + } else { + libs.addAll(Arrays.asList( + "-laura-core" + libSuffix, "-lgc" + libSuffix, "-lpthread", "-ldl", "-lm", "-lz")); + } if (config.getOs().getFamily() == OS.Family.linux) { libs.add("-lrt"); } @@ -141,6 +140,7 @@ public void build(List objectFiles, boolean dryRun) throws IOException { List exportedSymbols = new ArrayList(); exportedSymbols.addAll(getTargetExportedSymbols()); exportedSymbols.add("JNI_OnLoad_*"); + exportedSymbols.add("*"); exportedSymbols.addAll(config.getExportedSymbols()); if (config.getOs().getFamily() == OS.Family.linux || config.getOs() == OS.freebsd) { diff --git a/vm/CMakeLists.txt b/vm/CMakeLists.txt index f325ed6a8..c34b226fb 100644 --- a/vm/CMakeLists.txt +++ b/vm/CMakeLists.txt @@ -1,13 +1,12 @@ # The Mac OS X SDK version required when building the VM libs set(MACOSX_SDK_VERSION 10.11) # The minimum Mac OS X version needed by apps built by RoboVM -set(MACOSX_MIN_VERSION 10.6) +set(MACOSX_MIN_VERSION 10.7) cmake_minimum_required(VERSION 2.8.8) project(build) include(CheckCCompilerFlag) include(ExternalProject) -include(${CMAKE_SOURCE_DIR}/MergeStaticLibObjectFiles.cmake) enable_testing() @@ -128,7 +127,7 @@ if(SYSROOT) set(LD_FLAGS "${LD_FLAGS} -isysroot ${SYSROOT}") endif() if(MACOSX) - set(LD_FLAGS "${LD_FLAGS} -mmacosx-version-min=${MACOSX_MIN_VERSION}") + set(LD_FLAGS "${LD_FLAGS} -mmacosx-version-min=${MACOSX_MIN_VERSION} -Wl,-undefined -Wl,dynamic_lookup -flat_namespace") endif() #set(CMAKE_C_FLAGS_RELEASE "-O0 -g -pg") @@ -183,9 +182,16 @@ elseif (ARCH STREQUAL "arm64") add_definitions(-DRVM_ARM64) endif() -set(LIB_SUFFIX ".a") +set(LIB_SUFFIX ".so") if (CMAKE_BUILD_TYPE STREQUAL "debug") - set(LIB_SUFFIX "-dbg.a") + set(LIB_SUFFIX "-dbg.so") +endif() + +if (OS STREQUAL "macosx") + set(LIB_SUFFIX ".dylib") + if (CMAKE_BUILD_TYPE STREQUAL "debug") + set(LIB_SUFFIX "-dbg.dylib") + endif() endif() set(INSTALL_DIR ${CMAKE_SOURCE_DIR}/target/binaries/${OS}/${ARCH}) @@ -217,9 +223,9 @@ endif() set(EXTGC_C_FLAGS "${C_CXX_FLAGS} -DGC_DISABLE_INCREMENTAL -DGC_DISCOVER_TASK_THREADS -DGC_FORCE_UNMAP_ON_GCOLLECT -DMARK_DESCR_OFFSET=${EXTGC_MARK_DESCR_OFFSET}") set(EXTGC_LD_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") if(DARWIN) - set(EXTGC_C_FLAGS "${EXTGC_C_FLAGS} -DNO_DYLD_BIND_FULLY_IMAGE") + set(EXTGC_C_FLAGS "${EXTGC_C_FLAGS}") endif() -set(EXTGC_PARAMS "--enable-shared=no --enable-munmap=1 --enable-parallel-mark=yes") +set(EXTGC_PARAMS "--enable-static=no --enable-munmap=1 --enable-parallel-mark=yes") if (CMAKE_BUILD_TYPE STREQUAL "debug") set(EXTGC_C_FLAGS "${EXTGC_C_FLAGS} -g") set(EXTGC_PARAMS "${EXTGC_PARAMS} --enable-gc-debug=yes") @@ -240,7 +246,11 @@ ExternalProject_Add(extgc CONFIGURE_COMMAND bash -c "CC=${CMAKE_C_COMPILER} CFLAGS='${EXTGC_C_FLAGS}' LDFLAGS='${EXTGC_LD_FLAGS}' ./configure ${EXT_HOST} ${EXTGC_PARAMS} --prefix=${CMAKE_BINARY_DIR}/gc" BUILD_IN_SOURCE 1 ) -install(FILES ${CMAKE_BINARY_DIR}/gc/lib/libgc.a DESTINATION ${INSTALL_DIR} RENAME libgc${LIB_SUFFIX}) +if(OS STREQUAL "macosx") + install(FILES ${CMAKE_BINARY_DIR}/gc/lib/libgc.1.dylib ${CMAKE_BINARY_DIR}/gc/lib/libgc.dylib DESTINATION ${INSTALL_DIR}) +else() + install(FILES ${CMAKE_BINARY_DIR}/gc/lib/libgc.so.1 ${CMAKE_BINARY_DIR}/gc/lib/libgc.so DESTINATION ${INSTALL_DIR}) +endif() add_subdirectory(core/src) add_subdirectory(debug/src) diff --git a/vm/MergeStaticLibObjectFiles.cmake b/vm/MergeStaticLibObjectFiles.cmake deleted file mode 100644 index f7d80661b..000000000 --- a/vm/MergeStaticLibObjectFiles.cmake +++ /dev/null @@ -1,80 +0,0 @@ -# Copyright (C) 2015 RoboVM AB - -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at - -# http://www.apache.org/licenses/LICENSE-2.0 - -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Merges the object files in a sttaic lib into a single object file and -# overwrites the static lib with a new static lib only containing this single -# object file. Will not do anything if CMAKE_BUILD_TYPE is 'debug' as it -# destroys the debug info. Only the specified symbols will be externally -# visible in the resulting static lib. - -# Usage: merge_static_lib_object_files(lib sym1 sym2 ... symn) - -function(merge_static_lib_object_files lib) - - if (NOT CMAKE_BUILD_TYPE STREQUAL "debug") - - set(exported_symbols ${ARGV}) - list(REMOVE_AT exported_symbols 0) - - if (APPLE) - - foreach(sym ${exported_symbols}) - list(APPEND exported_symbols_args "-exported_symbol") - list(APPEND exported_symbols_args "_${sym}") - endforeach() - - string(REPLACE ";" ", " exported_symbols_joined "${exported_symbols}") - string(REPLACE ";" " " exported_symbols_args_joined "${exported_symbols_args}") - add_custom_command(TARGET ${lib} - COMMAND echo Merging object files in $ with exported symbols: ${exported_symbols_joined} - COMMAND echo ld -arch ${CARCH} -r ${exported_symbols_args_joined} -all_load $ -o ${CMAKE_CURRENT_BINARY_DIR}/merged.o - COMMAND ld -arch ${CARCH} -r ${exported_symbols_args} -all_load $ -o ${CMAKE_CURRENT_BINARY_DIR}/merged.o - COMMAND rm -f $ - COMMAND ar rcs $ ${CMAKE_CURRENT_BINARY_DIR}/merged.o - ) - - else() - # Linux - set(EMULATION_MODE elf_i386) - if(64_BIT) - if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") - set(EMULATION_MODE elf_x86_64_fbsd) - else() - set(EMULATION_MODE elf_x86_64) - endif() - endif() - message(STATUS "Format ${FORMAT}") - - foreach(sym ${exported_symbols}) - list(APPEND exported_symbols_args "-G") - list(APPEND exported_symbols_args "${sym}") - endforeach() - - string(REPLACE ";" ", " exported_symbols_joined "${exported_symbols}") - string(REPLACE ";" " " exported_symbols_args_joined "${exported_symbols_args}") - add_custom_command(TARGET ${lib} - COMMAND echo Merging object files in $ with exported symbols: ${exported_symbols_joined} - COMMAND echo ld -m ${EMULATION_MODE} -r --whole-archive $ -o ${CMAKE_CURRENT_BINARY_DIR}/tmp.o - COMMAND ld -m ${EMULATION_MODE} -r --whole-archive $ -o ${CMAKE_CURRENT_BINARY_DIR}/tmp.o - COMMAND echo objcopy -w ${exported_symbols_args} ${CMAKE_CURRENT_BINARY_DIR}/tmp.o ${CMAKE_CURRENT_BINARY_DIR}/merged.o - COMMAND objcopy -w ${exported_symbols_args} ${CMAKE_CURRENT_BINARY_DIR}/tmp.o ${CMAKE_CURRENT_BINARY_DIR}/merged.o - COMMAND rm -f $ - COMMAND ar rcs $ ${CMAKE_CURRENT_BINARY_DIR}/merged.o - ) - - endif() - - endif() - -endfunction() diff --git a/vm/bc/src/CMakeLists.txt b/vm/bc/src/CMakeLists.txt index 8258eac80..89533470f 100644 --- a/vm/bc/src/CMakeLists.txt +++ b/vm/bc/src/CMakeLists.txt @@ -6,7 +6,7 @@ if (WITH_FPIC) remove_definitions(-fPIC) endif() -add_library(aura-bc STATIC +add_library(aura-bc SHARED bc.c classinfo.c MurmurHash3.c diff --git a/vm/core/src/CMakeLists.txt b/vm/core/src/CMakeLists.txt index 106dcd7d7..c3179fe54 100644 --- a/vm/core/src/CMakeLists.txt +++ b/vm/core/src/CMakeLists.txt @@ -50,14 +50,14 @@ if(FREEBSD) set_property(SOURCE proxy.c PROPERTY COMPILE_FLAGS "-I/usr/local/include") ENDIF() -add_library(aura-core STATIC ${SRC}) +add_library(aura-core SHARED ${SRC}) add_dependencies(aura-core extgc) set_target_properties(aura-core PROPERTIES SUFFIX "${LIB_SUFFIX}") install(TARGETS aura-core DESTINATION ${INSTALL_DIR}) add_executable(test_call0 test/test_call0.c test/CuTest.c call0-${OS_FAMILY}-${ARCH}.s unwind.c) -add_library(test_call0_lib STATIC test/test_call0.c test/CuTest.c call0-${OS_FAMILY}-${ARCH}.s unwind.c) +add_library(test_call0_lib SHARED test/test_call0.c test/CuTest.c call0-${OS_FAMILY}-${ARCH}.s unwind.c) set_property(SOURCE test/test_call0.c PROPERTY COMPILE_FLAGS "-O0") # Disable optimizations add_test(testCall0ReturnByte test_call0 "testCall0ReturnByte") add_test(testCall0ReturnInt test_call0 "testCall0ReturnInt") diff --git a/vm/debug/src/CMakeLists.txt b/vm/debug/src/CMakeLists.txt index 01a5731d6..83508889a 100644 --- a/vm/debug/src/CMakeLists.txt +++ b/vm/debug/src/CMakeLists.txt @@ -6,7 +6,7 @@ set(SRC debug.c ) -add_library(aura-debug STATIC ${SRC}) +add_library(aura-debug SHARED ${SRC}) set_target_properties(aura-debug PROPERTIES SUFFIX "${LIB_SUFFIX}") install(TARGETS aura-debug DESTINATION ${INSTALL_DIR}) diff --git a/vm/rt/CMakeLists.txt b/vm/rt/CMakeLists.txt index c94039cb4..f4fce40fd 100644 --- a/vm/rt/CMakeLists.txt +++ b/vm/rt/CMakeLists.txt @@ -3,7 +3,6 @@ project(rt) add_subdirectory(aura) add_subdirectory(android) -add_library(aura-rt STATIC ${AURA_RT_CORE_OBJECTS} ${ANDROID_OBJECTS}) +add_library(aura-rt SHARED ${AURA_RT_CORE_OBJECTS} ${ANDROID_OBJECTS}) set_target_properties(aura-rt PROPERTIES SUFFIX "${LIB_SUFFIX}") -merge_static_lib_object_files(aura-rt 'Java_*' 'rvmRT*') install(TARGETS aura-rt DESTINATION ${INSTALL_DIR})