Skip to content

Commit 01bca90

Browse files
committed
xplat: combine static libraries
1 parent 18e2702 commit 01bca90

12 files changed

Lines changed: 150 additions & 135 deletions

File tree

bin/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,4 @@ if(NOT CC_TARGET_OS_ANDROID)
33
endif()
44

55
add_subdirectory (ch)
6-
7-
if(NOT STATIC_LIBRARY)
8-
add_subdirectory (ChakraCore)
9-
endif()
6+
add_subdirectory (ChakraCore)

bin/ChakraCore/CMakeLists.txt

Lines changed: 104 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,127 @@
1-
add_library (ChakraCore SHARED
2-
ChakraCoreShared.cpp
3-
ConfigParserExternals.cpp
4-
TestHooks.cpp
1+
if(BuildJIT)
2+
set(chakra_backend_objects $<TARGET_OBJECTS:Chakra.Backend>)
3+
endif()
4+
5+
add_library (ChakraCoreStatic STATIC
6+
$<TARGET_OBJECTS:Chakra.Pal>
7+
$<TARGET_OBJECTS:Chakra.Common.Core>
8+
$<TARGET_OBJECTS:Chakra.Jsrt>
9+
$<TARGET_OBJECTS:Chakra.Jsrt.Core>
10+
${chakra_backend_objects}
11+
$<TARGET_OBJECTS:Chakra.Common.Common>
12+
$<TARGET_OBJECTS:Chakra.Common.Codex>
13+
$<TARGET_OBJECTS:Chakra.Common.DataStructures>
14+
$<TARGET_OBJECTS:Chakra.Common.Exceptions>
15+
$<TARGET_OBJECTS:Chakra.Common.Memory>
16+
$<TARGET_OBJECTS:Chakra.Common.Util>
17+
$<TARGET_OBJECTS:Chakra.Runtime.Base>
18+
$<TARGET_OBJECTS:Chakra.Runtime.ByteCode>
19+
$<TARGET_OBJECTS:Chakra.Runtime.Debug>
20+
$<TARGET_OBJECTS:Chakra.Runtime.Language>
21+
$<TARGET_OBJECTS:Chakra.Runtime.Library>
22+
$<TARGET_OBJECTS:Chakra.Runtime.Math>
23+
$<TARGET_OBJECTS:Chakra.Runtime.Types>
24+
$<TARGET_OBJECTS:Chakra.Runtime.PlatformAgnostic>
25+
$<TARGET_OBJECTS:Chakra.Parser>
526
)
627

28+
if(CC_TARGET_OS_OSX)
29+
target_link_libraries(ChakraCoreStatic
30+
"-framework CoreFoundation"
31+
"-framework Security"
32+
)
33+
else()
34+
if (NOT CC_TARGET_OS_ANDROID)
35+
set(PTHREAD "pthread")
36+
endif()
737

8-
if(CC_TARGETS_AMD64)
9-
set(Wasm_dep ${CHAKRACORE_SOURCE_DIR}/lib/WasmReader)
38+
target_link_libraries(ChakraCoreStatic
39+
${CC_LTO_ENABLED}
40+
${PTHREAD}
41+
"dl"
42+
)
1043
endif()
1144

1245
target_include_directories (
13-
ChakraCore PUBLIC
46+
ChakraCoreStatic PUBLIC
1447
${CMAKE_CURRENT_SOURCE_DIR}
48+
${CHAKRACORE_SOURCE_DIR}/lib/Backend
1549
${CHAKRACORE_SOURCE_DIR}/lib/Common
1650
${CHAKRACORE_SOURCE_DIR}/lib/Runtime
51+
${CHAKRACORE_SOURCE_DIR}/lib/Runtime/ByteCode
1752
${CHAKRACORE_SOURCE_DIR}/lib/Parser
1853
${CHAKRACORE_SOURCE_DIR}/lib/Jsrt
1954
${Wasm_dep}
2055
)
2156

22-
#
23-
# Link step for the ChakraCore shared library
24-
#
25-
# External libraries we link with are the following:
26-
# pthread: For threading
27-
# stdc++/gcc_s: C++ runtime code
28-
# dl: For shared library loading related functions
29-
#
30-
if(CC_TARGET_OS_ANDROID OR CC_TARGET_OS_LINUX)
31-
set(LINKER_START_GROUP
32-
-fPIC
33-
-Wl,--start-group
34-
-Wl,--whole-archive
35-
)
57+
if (NOT STATIC_LIBRARY)
58+
add_library (ChakraCore SHARED
59+
ChakraCoreShared.cpp
60+
ConfigParserExternals.cpp
61+
TestHooks.cpp
62+
)
3663

37-
set(LINKER_END_GROUP
38-
-Wl,--no-whole-archive
39-
-Wl,--end-group
40-
-static-libstdc++
41-
)
42-
elseif(CC_TARGET_OS_OSX)
43-
set(LINKER_START_GROUP -Wl,-force_load,)
44-
endif()
64+
#
65+
# Link step for the ChakraCore shared library
66+
#
67+
# External libraries we link with are the following:
68+
# pthread: For threading
69+
# stdc++/gcc_s: C++ runtime code
70+
# dl: For shared library loading related functions
71+
#
72+
if(CC_TARGET_OS_ANDROID OR CC_TARGET_OS_LINUX)
73+
set(LINKER_START_GROUP
74+
-fPIC
75+
-Wl,--start-group
76+
-Wl,--whole-archive
77+
)
4578

46-
# common link deps
47-
set(lib_target "${lib_target}"
48-
-Wl,-undefined,error
49-
${LINKER_START_GROUP}
50-
Chakra.Pal
51-
Chakra.Common.Core
52-
Chakra.Jsrt
53-
${LINKER_END_GROUP}
54-
pthread
55-
dl
56-
${ICULIB}
57-
)
79+
set(LINKER_END_GROUP
80+
-Wl,--no-whole-archive
81+
-Wl,--end-group
82+
-static-libstdc++
83+
)
84+
elseif(CC_TARGET_OS_OSX)
85+
set(LINKER_START_GROUP -Wl,-force_load,)
86+
endif()
5887

59-
if(CC_TARGET_OS_ANDROID OR CC_TARGET_OS_LINUX)
88+
# common link deps
6089
set(lib_target "${lib_target}"
61-
-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libChakraCoreLib.version
62-
# reduce link time memory usage
63-
-Xlinker --no-keep-memory
90+
-Wl,-undefined,error
91+
${LINKER_START_GROUP}
92+
ChakraCoreStatic
93+
${LINKER_END_GROUP}
94+
pthread
95+
dl
96+
${ICULIB}
6497
)
65-
elseif(CC_TARGET_OS_OSX)
66-
if(CC_TARGETS_X86)
67-
set(lib_target "${lib_target} -arch i386")
68-
elseif(CC_TARGETS_ARM)
69-
set(lib_target "${lib_target} -arch arm")
70-
endif()
71-
endif()
7298

73-
target_link_libraries (ChakraCore
74-
${lib_target}
75-
${CC_LTO_ENABLED}
76-
)
99+
if(CC_TARGET_OS_ANDROID OR CC_TARGET_OS_LINUX)
100+
set(lib_target "${lib_target}"
101+
-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libChakraCoreLib.version
102+
# reduce link time memory usage
103+
-Xlinker --no-keep-memory
104+
)
105+
elseif(CC_TARGET_OS_OSX)
106+
if(CC_TARGETS_X86)
107+
set(lib_target "${lib_target} -arch i386")
108+
elseif(CC_TARGETS_ARM)
109+
set(lib_target "${lib_target} -arch arm")
110+
endif()
111+
endif()
77112

78-
if(NOT CC_XCODE_PROJECT)
79-
# Post build step to copy the built shared library
80-
# to BuildLinux (or whatever the CMakeBuildDir is)
81-
add_custom_command(TARGET ChakraCore POST_BUILD
82-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
83-
"${CHAKRACORE_BINARY_DIR}/bin/ChakraCore/libChakraCore.${DYN_LIB_EXT}"
84-
${CHAKRACORE_BINARY_DIR}/
113+
target_link_libraries (ChakraCore
114+
${lib_target}
115+
${CC_LTO_ENABLED}
85116
)
117+
118+
if(NOT CC_XCODE_PROJECT)
119+
# Post build step to copy the built shared library
120+
# to BuildLinux (or whatever the CMakeBuildDir is)
121+
add_custom_command(TARGET ChakraCore POST_BUILD
122+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
123+
"${CHAKRACORE_BINARY_DIR}/bin/ChakraCore/libChakraCore.${DYN_LIB_EXT}"
124+
${CHAKRACORE_BINARY_DIR}/
125+
)
126+
endif()
86127
endif()

bin/GCStress/CMakeLists.txt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,21 @@ endif()
2828
set(lib_target "${lib_target}"
2929
-Wl,-undefined,error
3030
${LINKER_START_GROUP}
31-
Chakra.Common.Core
32-
Chakra.Pal
33-
Chakra.Jsrt
31+
ChakraCoreStatic
3432
${LINKER_END_GROUP}
3533
${CC_LTO_ENABLED}
34+
dl
3635
)
3736

37+
if(CC_TARGET_OS_OSX)
38+
set(lib_target "${lib_target}"
39+
"-framework CoreFoundation"
40+
"-framework Security"
41+
)
42+
elseif(NOT CC_TARGET_OS_ANDROID)
43+
set(lib_target "${lib_target}"
44+
"pthread"
45+
)
46+
endif()
47+
3848
target_link_libraries (GCStress ${lib_target})

bin/ch/CMakeLists.txt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,7 @@ if(STATIC_LIBRARY)
6161
set(lib_target "${lib_target}"
6262
-Wl,-undefined,error
6363
${LINKER_START_GROUP}
64-
Chakra.Pal
65-
Chakra.Common.Core
66-
Chakra.Jsrt
64+
ChakraCoreStatic
6765
${LINKER_END_GROUP}
6866
dl
6967
${ICULIB}
@@ -74,7 +72,12 @@ if(STATIC_LIBRARY)
7472
"-framework CoreFoundation"
7573
"-framework Security"
7674
)
77-
endif() # Linux ?
75+
elseif (NOT CC_TARGET_OS_ANDROID)
76+
set(lib_target "${lib_target}"
77+
"pthread"
78+
)
79+
endif()
80+
7881
else() # // shared library below
7982
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE")
8083

@@ -83,7 +86,7 @@ else() # // shared library below
8386
endif()
8487

8588
set(lib_target
86-
PRIVATE Chakra.Pal
89+
PRIVATE Chakra.Pal.Singular
8790
PRIVATE Chakra.Common.Codex.Singular
8891
PRIVATE Chakra.Runtime.PlatformAgnostic.Singular
8992
)

bin/ch/CodexAssert.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55

66
#include "stdafx.h"
77

8+
#ifndef CHAKRA_STATIC_LIBRARY
89
// The Codex library requires this assertion.
910
void CodexAssert(bool condition)
1011
{
1112
Assert(condition);
1213
}
14+
#endif

lib/Common/Core/CMakeLists.txt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
add_library (Chakra.Common.Core STATIC
1+
add_library (Chakra.Common.Core OBJECT
22
Api.cpp
33
BinaryFeatureControl.cpp
44
CmdParser.cpp
@@ -20,9 +20,5 @@ add_library (Chakra.Common.Core STATIC
2020
SysInfo.cpp
2121
)
2222

23-
target_link_libraries(Chakra.Common.Core
24-
${CC_LTO_ENABLED}
25-
)
26-
2723
target_include_directories (
2824
Chakra.Common.Core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

lib/Jsrt/CMakeLists.txt

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
1-
if(BuildJIT)
2-
set(chakra_backend_objects $<TARGET_OBJECTS:Chakra.Backend>)
3-
endif()
4-
5-
6-
if(CC_TARGETS_AMD64)
7-
set(Wasm_dep $<TARGET_OBJECTS:Chakra.WasmReader>)
8-
endif()
9-
10-
add_library (Chakra.Jsrt STATIC
1+
add_library (Chakra.Jsrt OBJECT
112
Jsrt.cpp
123
JsrtDebugUtils.cpp
134
JsrtDebugManager.cpp
@@ -22,36 +13,10 @@ add_library (Chakra.Jsrt STATIC
2213
JsrtRuntime.cpp
2314
JsrtSourceHolder.cpp
2415
JsrtThreadService.cpp
25-
$<TARGET_OBJECTS:Chakra.Jsrt.Core>
26-
${chakra_backend_objects}
27-
# Do not take this in. We need to control the
28-
# linker order because of global constructors
29-
# and cross dependencies among them
30-
# $<TARGET_OBJECTS:Chakra.Common.Core>
31-
$<TARGET_OBJECTS:Chakra.Common.Common>
32-
$<TARGET_OBJECTS:Chakra.Common.Codex>
33-
$<TARGET_OBJECTS:Chakra.Common.DataStructures>
34-
$<TARGET_OBJECTS:Chakra.Common.Exceptions>
35-
$<TARGET_OBJECTS:Chakra.Common.Memory>
36-
$<TARGET_OBJECTS:Chakra.Common.Util>
37-
$<TARGET_OBJECTS:Chakra.Runtime.Base>
38-
$<TARGET_OBJECTS:Chakra.Runtime.ByteCode>
39-
$<TARGET_OBJECTS:Chakra.Runtime.Debug>
40-
$<TARGET_OBJECTS:Chakra.Runtime.Language>
41-
$<TARGET_OBJECTS:Chakra.Runtime.Library>
42-
$<TARGET_OBJECTS:Chakra.Runtime.Math>
43-
$<TARGET_OBJECTS:Chakra.Runtime.Types>
44-
$<TARGET_OBJECTS:Chakra.Runtime.PlatformAgnostic>
45-
$<TARGET_OBJECTS:Chakra.Parser>
46-
${Wasm_dep}
4716
)
4817

4918
add_subdirectory(Core)
5019

51-
target_link_libraries(Chakra.Jsrt
52-
${CC_LTO_ENABLED}
53-
)
54-
5520
target_include_directories (
5621
Chakra.Jsrt PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
5722
../Backend

pal/src/CMakeLists.txt

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -170,23 +170,32 @@ set(SOURCES
170170
)
171171

172172
add_library(Chakra.Pal
173-
STATIC
173+
OBJECT
174174
${SOURCES}
175175
${PLATFORM_SOURCES}
176176
${ARCH_SOURCES}
177177
)
178178

179-
if(CC_TARGET_OS_OSX)
180-
target_link_libraries(Chakra.Pal
181-
"-framework CoreFoundation"
182-
"-framework Security"
179+
if (NOT STATIC_LIBRARY)
180+
add_library(Chakra.Pal.Singular
181+
STATIC
182+
${SOURCES}
183+
${PLATFORM_SOURCES}
184+
${ARCH_SOURCES}
183185
)
184-
else() # Linux
186+
187+
if(CC_TARGET_OS_OSX)
188+
target_link_libraries(Chakra.Pal.Singular
189+
"-framework CoreFoundation"
190+
"-framework Security"
191+
)
192+
endif()
193+
185194
if (NOT CC_TARGET_OS_ANDROID)
186195
set(PTHREAD pthread)
187196
endif()
188197

189-
target_link_libraries(Chakra.Pal
198+
target_link_libraries(Chakra.Pal.Singular
190199
${PTHREAD}
191200
dl
192201
${CC_LTO_ENABLED}

test/native-tests/test-c98/Platform.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ if (!isStaticBuild) {
2020
\n\
2121
LIBRARY_PATH=" + binaryPath + "/lib\n\
2222
PLATFORM=" + platform + "\n\
23-
LDIR=$(LIBRARY_PATH)/../pal/src/libChakra.Pal.a \
24-
$(LIBRARY_PATH)/Common/Core/libChakra.Common.Core.a \
25-
$(LIBRARY_PATH)/Jsrt/libChakra.Jsrt.a \n\
23+
LDIR=$(LIBRARY_PATH)/../bin/ChakraCore/libChakraCoreStatic.a \n\
2624
\n\
2725
ifeq (darwin, ${PLATFORM})\n\
2826
\tICU4C_LIBRARY_PATH ?= /usr/local/opt/icu4c\n\

test/native-tests/test-char/Platform.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ if (!isStaticBuild) {
2020
\n\
2121
LIBRARY_PATH=" + binaryPath + "/lib\n\
2222
PLATFORM=" + platform + "\n\
23-
LDIR=$(LIBRARY_PATH)/../pal/src/libChakra.Pal.a \
24-
$(LIBRARY_PATH)/Common/Core/libChakra.Common.Core.a \
25-
$(LIBRARY_PATH)/Jsrt/libChakra.Jsrt.a \n\
23+
LDIR=$(LIBRARY_PATH)/../bin/ChakraCore/libChakraCoreStatic.a \n\
2624
\n\
2725
ifeq (darwin, ${PLATFORM})\n\
2826
\tICU4C_LIBRARY_PATH ?= /usr/local/opt/icu4c\n\

0 commit comments

Comments
 (0)