@@ -333,7 +333,12 @@ if(NOT LEAN_STANDALONE)
333
333
endif ()
334
334
335
335
# flags for user binaries = flags for toolchain binaries + Lake
336
- string (APPEND LEANC_STATIC_LINKER_FLAGS " ${TOOLCHAIN_STATIC_LINKER_FLAGS} -lLake" )
336
+ set (LEANC_STATIC_LINKER_FLAGS " ${TOOLCHAIN_STATIC_LINKER_FLAGS} -lLake" )
337
+ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
338
+ set (LEANC_SHARED_LINKER_FLAGS " ${TOOLCHAIN_SHARED_LINKER_FLAGS} -Wl,--as-needed -lLake_shared -Wl,--no-as-needed" )
339
+ else ()
340
+ set (LEANC_SHARED_LINKER_FLAGS " ${TOOLCHAIN_SHARED_LINKER_FLAGS} -lLake_shared" )
341
+ endif ()
337
342
338
343
if (LLVM )
339
344
string (APPEND LEANSHARED_LINKER_FLAGS " -L${LLVM_CONFIG_LIBDIR} ${LLVM_CONFIG_LDFLAGS} ${LLVM_CONFIG_LIBS} ${LLVM_CONFIG_SYSTEM_LIBS} " )
@@ -378,16 +383,20 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
378
383
string (APPEND CMAKE_CXX_FLAGS " -fPIC -ftls-model=initial-exec" )
379
384
string (APPEND LEANC_EXTRA_FLAGS " -fPIC" )
380
385
string (APPEND TOOLCHAIN_SHARED_LINKER_FLAGS " -Wl,-rpath=\\ $$ORIGIN/..:\\ $$ORIGIN" )
386
+ string (APPEND LAKESHARED_LINKER_FLAGS " -Wl,--whole-archive ${CMAKE_BINARY_DIR} /lib/temp/libLake.a.export -Wl,--no-whole-archive" )
381
387
string (APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,-rpath=\\\$ ORIGIN/../lib:\\\$ ORIGIN/../lib/lean" )
382
388
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" )
383
389
string (APPEND CMAKE_CXX_FLAGS " -ftls-model=initial-exec" )
384
390
string (APPEND INIT_SHARED_LINKER_FLAGS " -install_name @rpath/libInit_shared.dylib" )
385
391
string (APPEND LEANSHARED_1_LINKER_FLAGS " -install_name @rpath/libleanshared_1.dylib" )
386
392
string (APPEND LEANSHARED_LINKER_FLAGS " -install_name @rpath/libleanshared.dylib" )
393
+ string (APPEND LAKESHARED_LINKER_FLAGS " -Wl,-force_load,${CMAKE_BINARY_DIR} /lib/temp/libLake.a.export -install_name @rpath/libLake_shared.dylib" )
387
394
string (APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,-rpath,@executable_path/../lib -Wl,-rpath,@executable_path/../lib/lean" )
388
395
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Emscripten" )
389
396
string (APPEND CMAKE_CXX_FLAGS " -fPIC" )
390
397
string (APPEND LEANC_EXTRA_FLAGS " -fPIC" )
398
+ elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows" )
399
+ string (APPEND LAKESHARED_LINKER_FLAGS " -Wl,--out-implib,${CMAKE_BINARY_DIR} /lib/lean/libLake_shared.dll.a -Wl,--whole-archive ${CMAKE_BINARY_DIR} /lib/temp/libLake.a.export -Wl,--no-whole-archive" )
391
400
endif ()
392
401
393
402
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
@@ -587,8 +596,13 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Emscripten")
587
596
)
588
597
add_custom_target (leanshared ALL
589
598
DEPENDS Init_shared leancpp
599
+ COMMAND touch ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} /libleanshared_1${CMAKE_SHARED_LIBRARY_SUFFIX}
590
600
COMMAND touch ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} /libleanshared${CMAKE_SHARED_LIBRARY_SUFFIX}
591
601
)
602
+ add_custom_target (lake_shared ALL
603
+ DEPENDS leanshared
604
+ COMMAND touch ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} /libLake_shared${CMAKE_SHARED_LIBRARY_SUFFIX}
605
+ )
592
606
else ()
593
607
add_custom_target (Init_shared ALL
594
608
WORKING_DIRECTORY ${LEAN_SOURCE_DIR}
@@ -606,11 +620,21 @@ else()
606
620
endif ()
607
621
608
622
if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "Emscripten" )
609
- add_custom_target (lake ALL
623
+ add_custom_target (lake_lib ALL
610
624
WORKING_DIRECTORY ${LEAN_SOURCE_DIR}
611
625
DEPENDS leanshared
612
626
COMMAND $ (MAKE ) -f ${CMAKE_BINARY_DIR} /stdlib.make Lake
613
627
VERBATIM )
628
+ add_custom_target (lake_shared ALL
629
+ WORKING_DIRECTORY ${LEAN_SOURCE_DIR}
630
+ DEPENDS lake_lib
631
+ COMMAND $ (MAKE ) -f ${CMAKE_BINARY_DIR} /stdlib.make libLake_shared
632
+ VERBATIM )
633
+ add_custom_target (lake ALL
634
+ WORKING_DIRECTORY ${LEAN_SOURCE_DIR}
635
+ DEPENDS lake_shared
636
+ COMMAND $ (MAKE ) -f ${CMAKE_BINARY_DIR} /stdlib.make lake
637
+ VERBATIM )
614
638
endif ()
615
639
616
640
if (PREV_STAGE )
0 commit comments