mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-20 14:19:18 +02:00
Merge pull request #544 from okuoku/win32-dll
Properly support DLL build on Win32
This commit is contained in:
commit
b3831c3995
2 changed files with 76 additions and 16 deletions
|
@ -7,6 +7,19 @@ project(chibi-scheme)
|
||||||
|
|
||||||
include(CheckIncludeFile)
|
include(CheckIncludeFile)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Version setting
|
||||||
|
#
|
||||||
|
|
||||||
|
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/RELEASE release)
|
||||||
|
string(STRIP ${release} release)
|
||||||
|
|
||||||
|
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/VERSION rawversion)
|
||||||
|
string(STRIP ${rawversion} rawversion)
|
||||||
|
set(version "${rawversion}-cmake")
|
||||||
|
|
||||||
|
set(chibischemelib "chibi-scheme-${rawversion}")
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
message(FATAL_ERROR
|
message(FATAL_ERROR
|
||||||
"DYLD platforms are not supported with this CMakeLists.txt. Use Makefile instead.")
|
"DYLD platforms are not supported with this CMakeLists.txt. Use Makefile instead.")
|
||||||
|
@ -25,6 +38,11 @@ check_include_file(poll.h HAVE_POLL_H)
|
||||||
check_include_file(stdint.h HAVE_STDINT_H)
|
check_include_file(stdint.h HAVE_STDINT_H)
|
||||||
# option(CHIBI_SCHEME_USE_DL "Use dynamic loading" ON)
|
# option(CHIBI_SCHEME_USE_DL "Use dynamic loading" ON)
|
||||||
set(CHIBI_SCHEME_USE_DL OFF)
|
set(CHIBI_SCHEME_USE_DL OFF)
|
||||||
|
option(CHIBI_SCHEME_SHARED "Build chibi-scheme as a shared library" ON)
|
||||||
|
|
||||||
|
if(NOT CHIBI_SCHEME_SHARED)
|
||||||
|
add_definitions(-DSEXP_STATIC_LIBRARY=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CHIBI_SCHEME_USE_DL)
|
if(CHIBI_SCHEME_USE_DL)
|
||||||
add_definitions(-DSEXP_USE_DL=1)
|
add_definitions(-DSEXP_USE_DL=1)
|
||||||
|
@ -151,6 +169,38 @@ add_custom_command(OUTPUT ${clibout}
|
||||||
${genstatic-helper}
|
${genstatic-helper}
|
||||||
${slds})
|
${slds})
|
||||||
|
|
||||||
|
#
|
||||||
|
# Core library
|
||||||
|
#
|
||||||
|
|
||||||
|
if(CHIBI_SCHEME_SHARED)
|
||||||
|
set(libtype SHARED)
|
||||||
|
else()
|
||||||
|
set(libtype STATIC)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_library(${chibischemelib} ${libtype}
|
||||||
|
${chibi-scheme-srcs}
|
||||||
|
${clibout})
|
||||||
|
|
||||||
|
set_target_properties(${chibischemelib}
|
||||||
|
PROPERTIES
|
||||||
|
COMPILE_DEFINITIONS "SEXP_USE_STATIC_LIBS=1")
|
||||||
|
|
||||||
|
add_dependencies(${chibischemelib} chibi-scheme-stubs)
|
||||||
|
|
||||||
|
if(WIN32 AND CHIBI_SCHEME_SHARED)
|
||||||
|
target_link_libraries(${chibischemelib} ws2_32)
|
||||||
|
target_compile_definitions(${chibischemelib} PUBLIC -DBUILDING_DLL=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
function(bless_chibi_scheme_executable tgt)
|
||||||
|
target_link_libraries(${tgt} ${chibischemelib})
|
||||||
|
if(WIN32 AND NOT CHIBI_SCHEME_SHARED)
|
||||||
|
target_link_libraries(${tgt} ws2_32)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
#
|
#
|
||||||
# Interpreter
|
# Interpreter
|
||||||
#
|
#
|
||||||
|
@ -159,18 +209,9 @@ include_directories(
|
||||||
.
|
.
|
||||||
${stuboutdir}/..)
|
${stuboutdir}/..)
|
||||||
add_executable(chibi-scheme
|
add_executable(chibi-scheme
|
||||||
${chibi-scheme-srcs}
|
|
||||||
${clibout}
|
|
||||||
main.c)
|
main.c)
|
||||||
|
|
||||||
set_target_properties(chibi-scheme
|
bless_chibi_scheme_executable(chibi-scheme)
|
||||||
PROPERTIES COMPILE_DEFINITIONS "SEXP_USE_STATIC_LIBS=1")
|
|
||||||
|
|
||||||
add_dependencies(chibi-scheme chibi-scheme-stubs)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
target_link_libraries(chibi-scheme ws2_32)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generate "chibi/install.h"
|
# Generate "chibi/install.h"
|
||||||
|
@ -194,12 +235,6 @@ else()
|
||||||
set(platform "unknown")
|
set(platform "unknown")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/RELEASE release)
|
|
||||||
string(STRIP ${release} release)
|
|
||||||
|
|
||||||
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/VERSION version)
|
|
||||||
string(STRIP ${version} version)
|
|
||||||
set(version "${version}-cmake")
|
|
||||||
|
|
||||||
set(default_module_path
|
set(default_module_path
|
||||||
""
|
""
|
||||||
|
@ -278,3 +313,24 @@ foreach(e ${testlibs})
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing (embedding)
|
||||||
|
#
|
||||||
|
|
||||||
|
add_executable(test-foreign-apply-loop
|
||||||
|
tests/foreign/apply-loop.c)
|
||||||
|
|
||||||
|
bless_chibi_scheme_executable(test-foreign-apply-loop)
|
||||||
|
|
||||||
|
add_test(NAME "foreign-apply-loop"
|
||||||
|
COMMAND test-foreign-apply-loop
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
|
add_executable(test-foreign-typeid
|
||||||
|
tests/foreign/typeid.c)
|
||||||
|
|
||||||
|
bless_chibi_scheme_executable(test-foreign-typeid)
|
||||||
|
|
||||||
|
add_test(NAME "foreign-typeid"
|
||||||
|
COMMAND test-foreign-typeid
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
|
@ -846,11 +846,15 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
#ifdef SEXP_STATIC_LIBRARY
|
||||||
|
#define SEXP_API extern
|
||||||
|
#else
|
||||||
#ifdef BUILDING_DLL
|
#ifdef BUILDING_DLL
|
||||||
#define SEXP_API __declspec(dllexport)
|
#define SEXP_API __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
#define SEXP_API __declspec(dllimport)
|
#define SEXP_API __declspec(dllimport)
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#define SEXP_API extern
|
#define SEXP_API extern
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue