kamm@749: project (ldc) kamm@749: kamm@749: set (LDC_SOURCE_FILES kamm@749: dmd/access.c kamm@749: dmd/array.c kamm@749: dmd/arrayop.c kamm@749: dmd/attrib.c kamm@749: dmd/cast.c kamm@749: dmd/class.c kamm@749: dmd/clone.c kamm@749: dmd/cond.c kamm@749: dmd/constfold.c kamm@749: dmd/dchar.c kamm@749: dmd/declaration.c kamm@749: dmd/delegatize.c kamm@749: dmd/doc.c kamm@749: dmd/dsymbol.c kamm@749: dmd/dump.c kamm@749: dmd/entity.c kamm@749: dmd/enum.c kamm@749: dmd/expression.c kamm@749: dmd/func.c kamm@749: dmd/gnuc.c kamm@749: dmd/hdrgen.c kamm@749: dmd/html.c kamm@749: dmd/identifier.c kamm@749: dmd/import.c kamm@749: dmd/inifile.c kamm@749: dmd/init.c kamm@749: dmd/inline.c kamm@749: dmd/interpret.c kamm@749: dmd/lexer.c kamm@749: dmd/lstring.c kamm@749: dmd/macro.c kamm@749: dmd/man.c kamm@749: dmd/mangle.c kamm@749: dmd/mars.c kamm@749: dmd/mem.c kamm@749: dmd/module.c kamm@749: dmd/mtype.c kamm@749: dmd/opover.c kamm@749: dmd/optimize.c kamm@749: dmd/parse.c kamm@749: dmd/root.c kamm@749: dmd/scope.c kamm@749: dmd/statement.c kamm@749: dmd/staticassert.c kamm@749: dmd/stringtable.c kamm@749: dmd/struct.c kamm@749: dmd/template.c kamm@749: dmd/unialpha.c kamm@749: dmd/utf.c kamm@749: dmd/version.c kamm@749: gen/aa.cpp kamm@749: gen/arrays.cpp kamm@749: gen/asmstmt.cpp kamm@749: gen/binops.cpp kamm@749: gen/classes.cpp kamm@749: gen/complex.cpp kamm@749: gen/dvalue.cpp kamm@749: gen/dwarftypes.cpp kamm@749: gen/functions.cpp kamm@749: gen/irstate.cpp kamm@749: gen/linker.cpp kamm@749: gen/llvmhelpers.cpp kamm@749: gen/logger.cpp kamm@749: gen/optimizer.cpp kamm@749: gen/runtime.cpp kamm@749: gen/statements.cpp kamm@749: gen/structs.cpp kamm@749: gen/tocall.cpp kamm@749: gen/tocsym.cpp kamm@749: gen/todebug.cpp kamm@749: gen/todt.cpp kamm@749: gen/toir.cpp kamm@749: gen/tollvm.cpp kamm@749: gen/toobj.cpp kamm@749: gen/typinf.cpp kamm@749: ir/irfunction.cpp kamm@749: ir/irlandingpad.cpp kamm@749: ir/irmodule.cpp kamm@749: ir/irstruct.cpp kamm@749: ir/irsymbol.cpp kamm@749: ir/irtype.cpp kamm@750: ir/irvar.cpp kamm@750: ) kamm@750: kamm@750: set (LDC_GENERATED_SOURCE_FILES kamm@750: ${CMAKE_CURRENT_BINARY_DIR}/impcnvtab.c kamm@750: ${CMAKE_CURRENT_BINARY_DIR}/id.c kamm@750: ) kamm@750: set (LDC_GENERATED_HEADER_FILES kamm@750: ${CMAKE_CURRENT_BINARY_DIR}/id.h kamm@750: ) kamm@749: kamm@750: # some sources are generated kamm@750: set_source_files_properties ( kamm@750: ${LDC_GENERATED_SOURCE_FILES} kamm@750: ${LDC_GENERATED_HEADER_FILES} kamm@750: PROPERTIES GENERATED 1 kamm@750: ) kamm@750: kamm@750: # mark all source as c++ kamm@750: set_source_files_properties ( kamm@750: ${LDC_SOURCE_FILES} ${LDC_GENERATED_SOURCE_FILES} kamm@750: PROPERTIES LANGUAGE CXX kamm@750: ) kamm@749: kamm@750: # build and run idgen and impcnvgen kamm@750: set_source_files_properties ( kamm@750: dmd/impcnvgen.c kamm@750: dmd/idgen.c kamm@750: PROPERTIES LANGUAGE CXX kamm@750: ) kamm@750: add_executable (impcnvgen dmd/impcnvgen.c) kamm@750: add_executable (idgen dmd/idgen.c) kamm@750: set_target_properties (impcnvgen idgen PROPERTIES LINKER_LANGUAGE CXX) kamm@750: get_target_property (IMPCNVGEN_EXE impcnvgen LOCATION) kamm@750: get_target_property (IDGEN_EXE idgen LOCATION) kamm@750: add_custom_command ( kamm@750: OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/impcnvtab.c kamm@750: COMMAND ${IMPCNVGEN_EXE} kamm@750: DEPENDS impcnvgen kamm@750: ) kamm@750: add_custom_command ( kamm@750: OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/id.c ${CMAKE_CURRENT_BINARY_DIR}/id.h kamm@750: COMMAND ${IDGEN_EXE} kamm@750: DEPENDS idgen kamm@750: ) kamm@749: kamm@750: # ldc itself kamm@750: add_executable (ldc ${LDC_SOURCE_FILES} ${LDC_GENERATED_SOURCE_FILES} ${LDC_GENERATED_HEADER_FILES}) kamm@750: kamm@750: kamm@750: # setup DEFAULT_TARGET_TRIPLE kamm@750: execute_process (COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/config.guess OUTPUT_VARIABLE DEFAULT_TARGET_TRIPLE_GUESS OUTPUT_STRIP_TRAILING_WHITESPACE) kamm@750: set (DEFAULT_TARGET_TRIPLE ${DEFAULT_TARGET_TRIPLE_GUESS} CACHE STRING "the default target triple LDC should compile for") kamm@750: kamm@750: # setup POSIX kamm@750: if (WIN32) kamm@750: set (POSIX_GUESS 0) kamm@750: else (WIN32) kamm@750: set (POSIX_GUESS 1) kamm@750: endif (WIN32) kamm@750: set (POSIX ${POSIX_GUESS} CACHE BOOL "is LDC build on POSIX?") kamm@750: kamm@750: # setup defines kamm@749: set (LDC_DEFINES kamm@749: -DIN_LLVM kamm@749: -D_DH kamm@749: -DOPAQUE_VTBLS kamm@749: -DUSE_BOEHM_GC=0 kamm@749: -DDMDV1 kamm@750: -DPOSIX=${POSIX} kamm@750: -DDEFAULT_TARGET_TRIPLE=\\"${DEFAULT_TARGET_TRIPLE}\\" kamm@749: -DX86_REVERSE_PARAMS=1 kamm@749: -DX86_PASS_IN_EAX=1) kamm@750: execute_process (COMMAND llvm-config --cxxflags OUTPUT_VARIABLE LLVM_CXXFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) kamm@749: # passing CXXFLAGS here is not good style kamm@749: add_definitions (${LDC_DEFINES} ${LLVM_CXXFLAGS}) kamm@750: kamm@750: include_directories (. dmd ${CMAKE_CURRENT_BINARY_DIR}) kamm@749: kamm@749: # this is hackish, but works kamm@749: target_link_libraries (ldc "`llvm-config --ldflags` `llvm-config --libs bitwriter linker ipo instrumentation backend`") kamm@749: kamm@750: #TODO: runtime build