diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e6ef12..9faabdc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,14 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) -set(Bluelib_STATIC TRUE) +if (NOT IVY_STATIC) + set(IVY_STATIC 0) +endif () + +if (IVY_STATIC) + set(Bluelib_STATIC TRUE) +endif () + find_package(Bluelib REQUIRED) add_subdirectory(common) diff --git a/asm/CMakeLists.txt b/asm/CMakeLists.txt index ed35032..e3c294e 100644 --- a/asm/CMakeLists.txt +++ b/asm/CMakeLists.txt @@ -1,6 +1,11 @@ file(GLOB_RECURSE asm_sources *.c *.h include/ivy/asm/*.h) -add_library(ivy-asm SHARED ${asm_sources}) +if (IVY_STATIC) + add_library(ivy-asm STATIC ${asm_sources}) +else () + add_library(ivy-asm SHARED ${asm_sources}) +endif () + target_include_directories(ivy-asm PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include/) target_link_libraries(ivy-asm ivy-common Bluelib::Core Bluelib::Object) -target_compile_definitions(ivy-asm PRIVATE IVY_EXPORT=1) \ No newline at end of file +target_compile_definitions(ivy-asm PRIVATE IVY_EXPORT=1 IVY_STATIC=${IVY_STATIC}) \ No newline at end of file diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 0226beb..85b60af 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -1,5 +1,10 @@ file(GLOB_RECURSE common_sources *.c *.h include/ivy/*.h) -add_library(ivy-common SHARED ${common_sources}) +if (IVY_STATIC) + add_library(ivy-common STATIC ${common_sources}) +else () + add_library(ivy-common SHARED ${common_sources}) +endif () + target_include_directories(ivy-common PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include/) -target_compile_definitions(ivy-common PRIVATE IVY_EXPORT=1) \ No newline at end of file +target_compile_definitions(ivy-common PRIVATE IVY_EXPORT=1 IVY_STATIC=${IVY_STATIC}) \ No newline at end of file diff --git a/common/include/ivy/misc.h b/common/include/ivy/misc.h index e79f280..a28a066 100644 --- a/common/include/ivy/misc.h +++ b/common/include/ivy/misc.h @@ -1,7 +1,7 @@ #ifndef IVY_COMMON_MISC_H_ #define IVY_COMMON_MISC_H_ -#ifdef _MSC_VER +#if defined(_MSC_VER) && IVY_STATIC==0 #ifdef IVY_EXPORT #define IVY_API extern __declspec(dllexport) #else diff --git a/frontend/CMakeLists.txt b/frontend/CMakeLists.txt index 21bccaa..60541fb 100644 --- a/frontend/CMakeLists.txt +++ b/frontend/CMakeLists.txt @@ -19,3 +19,5 @@ target_link_libraries( Bluelib::Core Bluelib::Object Bluelib::Cmd) + +target_compile_definitions(ivy PRIVATE IVY_STATIC=${IVY_STATIC}) \ No newline at end of file diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt index 31477c0..fc8cdd4 100644 --- a/lang/CMakeLists.txt +++ b/lang/CMakeLists.txt @@ -1,6 +1,11 @@ file(GLOB_RECURSE lang_sources *.c *.h include/ivy/lang/*.h) -add_library(ivy-lang SHARED ${lang_sources}) +if (IVY_STATIC) + add_library(ivy-lang STATIC ${lang_sources}) +else () + add_library(ivy-lang SHARED ${lang_sources}) +endif () + target_include_directories(ivy-lang PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include/) target_link_libraries(ivy-lang ivy-common Bluelib::Core Bluelib::Object Bluelib::Term) -target_compile_definitions(ivy-lang PRIVATE IVY_EXPORT=1) \ No newline at end of file +target_compile_definitions(ivy-lang PRIVATE IVY_EXPORT=1 IVY_STATIC=${IVY_STATIC}) \ No newline at end of file diff --git a/rt/CMakeLists.txt b/rt/CMakeLists.txt index 0869e36..df028a7 100644 --- a/rt/CMakeLists.txt +++ b/rt/CMakeLists.txt @@ -1,6 +1,11 @@ file(GLOB_RECURSE rt_sources *.c *.h include/ivy/rt/*.h) -add_library(ivy-rt SHARED ${rt_sources}) +if (IVY_STATIC) + add_library(ivy-rt STATIC ${rt_sources}) +else () + add_library(ivy-rt SHARED ${rt_sources}) +endif () + target_include_directories(ivy-rt PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include/) target_link_libraries(ivy-rt ivy-common) -target_compile_definitions(ivy-rt PRIVATE IVY_EXPORT=1) \ No newline at end of file +target_compile_definitions(ivy-rt PRIVATE IVY_EXPORT=1 IVY_STATIC=${IVY_STATIC}) \ No newline at end of file