From 0b411b873ca2691738d8ee3bd3c224ecc382ad64 Mon Sep 17 00:00:00 2001 From: Eldar Insafutdinov Date: Sun, 1 Apr 2012 22:06:08 +0100 Subject: [PATCH] Separated compiler from the driver into the shared library --- CMakeLists.txt | 40 +++++++++++++++++++++++++++------------- {gen => driver}/main.cpp | 0 2 files changed, 27 insertions(+), 13 deletions(-) rename {gen => driver}/main.cpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ffd4ec7..4a5f6b82 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -191,7 +191,7 @@ foreach(TARGET ${HOST_ARCH} ${EXTRA_LLVM_MODULES}) endforeach(TARGET) set_source_files_properties( - ${PROJECT_SOURCE_DIR}/gen/main.cpp PROPERTIES + ${PROJECT_SOURCE_DIR}/driver/main.cpp PROPERTIES COMPILE_DEFINITIONS LDC_TARGETS=${LLVM_MODULES_DEFINE} ) @@ -204,6 +204,7 @@ set_source_files_properties( file(GLOB_RECURSE FE_SRC ${DMDFE_PATH}/*.c ${DMDFE_PATH}/*.h) file(GLOB_RECURSE GEN_SRC gen/*.cpp gen/*.h) file(GLOB IR_SRC ir/*.cpp ir/*.h) +file(GLOB_RECURSE DRV_SRC driver/*.cpp driver/*.h) # exclude idgen and impcnvgen and generated sources, just in case list(REMOVE_ITEM FE_SRC ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/idgen.c @@ -266,9 +267,31 @@ endif(USE_METADATA) # # Set up the main ldc/ldc2 target. # +set(LDC_LIB LDCShared) # Path where ldc executable will be put -add_executable(${LDC_EXE} ${LDC_SOURCE_FILES}) +add_library(${LDC_LIB} SHARED ${LDC_SOURCE_FILES}) +# Build ldc +set_target_properties( + ${LDC_LIB} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib + COMPILE_FLAGS "${LLVM_CXXFLAGS} ${LIBCONFIG_CXXFLAGS} -Wno-deprecated -Wno-write-strings -fexceptions" +) + +# LDFLAGS should actually be in target property LINK_FLAGS, but this works, and gets around linking problems +target_link_libraries(${LDC_LIB} "${LLVM_LDFLAGS} ${LLVM_LIBRARIES}" ${LIBCONFIG_LDFLAGS} config++) +if(WIN32) + target_link_libraries(${LDC_LIB} imagehlp psapi) +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + target_link_libraries(${LDC_LIB} dl) +endif(WIN32) + +if(USE_BOEHM_GC) + target_link_libraries(${LDC_LIB} ${PROJECT_SOURCE_DIR}/libgc.a) +endif(USE_BOEHM_GC) + +add_executable(${LDC_EXE} ${DRV_SRC}) # Name of ldc executable set(LDC_EXE_NAME ${PROGRAM_PREFIX}${LDC_EXE}${PROGRAM_SUFFIX}) # Build ldc @@ -278,18 +301,8 @@ set_target_properties( RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin COMPILE_FLAGS "${LLVM_CXXFLAGS} ${LIBCONFIG_CXXFLAGS} -Wno-deprecated -Wno-write-strings -fexceptions" ) +target_link_libraries(${LDC_EXE} ${LDC_LIB}) -# LDFLAGS should actually be in target property LINK_FLAGS, but this works, and gets around linking problems -target_link_libraries(${LDC_EXE} "${LLVM_LDFLAGS} ${LLVM_LIBRARIES}" ${LIBCONFIG_LDFLAGS} config++) -if(WIN32) - target_link_libraries(${LDC_EXE} imagehlp psapi) -elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - target_link_libraries(${LDC_EXE} dl) -endif(WIN32) - -if(USE_BOEHM_GC) - target_link_libraries(${LDC_EXE} ${PROJECT_SOURCE_DIR}/libgc.a) -endif(USE_BOEHM_GC) get_target_property(LDC_LOC ${LDC_EXE} LOCATION) @@ -300,6 +313,7 @@ get_target_property(LDC_LOC ${LDC_EXE} LOCATION) add_subdirectory(runtime) install(TARGETS ${LDC_EXE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +install(TARGETS ${LDC_LIB} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) install(PROGRAMS ${PROJECT_SOURCE_DIR}/bin/${LDMD_EXE} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(FILES ${PROJECT_BINARY_DIR}/bin/${LDC_EXE}_install.conf DESTINATION ${CONF_INST_DIR} RENAME ${LDC_EXE}.conf) install(FILES ${PROJECT_BINARY_DIR}/bin/${LDC_EXE}_install.rebuild.conf DESTINATION ${CONF_INST_DIR} RENAME ${LDC_EXE}.rebuild.conf) diff --git a/gen/main.cpp b/driver/main.cpp similarity index 100% rename from gen/main.cpp rename to driver/main.cpp