comparison CMakeLists.txt @ 758:f04dde6e882c

Added initial D2 support, D2 frontend and changes to codegen to make things compile.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 11 Nov 2008 01:38:48 +0100
parents 405e40f20ef9
children ac39e5449ca5
comparison
equal deleted inserted replaced
757:2c730d530c98 758:f04dde6e882c
37 OUTPUT_STRIP_TRAILING_WHITESPACE 37 OUTPUT_STRIP_TRAILING_WHITESPACE
38 ) 38 )
39 # get llvm's install dir. a little hackish, we could do something like llvm-config --prefix, but this does as well 39 # get llvm's install dir. a little hackish, we could do something like llvm-config --prefix, but this does as well
40 string(REPLACE "/bin/llvm-config" "" LLVM_INSTDIR ${LLVM_CONFIG}) 40 string(REPLACE "/bin/llvm-config" "" LLVM_INSTDIR ${LLVM_CONFIG})
41 41
42 set(D_VERSION 1 CACHE STRING "D language version")
43 if(D_VERSION EQUAL 1)
44 set(DMDFE_PATH dmd)
45 set(LDC_EXE ldc)
46 add_definitions(-DDMDV1)
47 elseif(D_VERSION EQUAL 2)
48 set(DMDFE_PATH dmd2)
49 set(LDC_EXE ldc2)
50 add_definitions(-DDMDV2)
51 else(D_VERSION EQUAL 1)
52 message(FATAL_ERROR "unsupported D version")
53 endif(D_VERSION EQUAL 1)
54
42 file(MAKE_DIRECTORY 55 file(MAKE_DIRECTORY
43 ${PROJECT_BINARY_DIR}/bin 56 ${PROJECT_BINARY_DIR}/bin
44 ${PROJECT_BINARY_DIR}/dmd 57 ${PROJECT_BINARY_DIR}/${DMDFE_PATH}
45 ) 58 )
46 59
47 # idgen and impcnvgen 60 # idgen and impcnvgen
48 set_source_files_properties( 61 set_source_files_properties(
49 dmd/idgen.c 62 ${DMDFE_PATH}/idgen.c
50 dmd/impcnvgen.c 63 ${DMDFE_PATH}/impcnvgen.c
51 PROPERTIES LANGUAGE CXX 64 PROPERTIES LANGUAGE CXX
52 ) 65 )
53 add_executable(idgen dmd/idgen.c) 66 add_executable(idgen ${DMDFE_PATH}/idgen.c)
54 add_executable(impcnvgen dmd/impcnvgen.c) 67 add_executable(impcnvgen ${DMDFE_PATH}/impcnvgen.c)
55 # cmake 2.4 68 # cmake 2.4
56 set_target_properties( 69 set_target_properties(
57 idgen impcnvgen PROPERTIES 70 idgen impcnvgen PROPERTIES
58 LINKER_LANGUAGE CXX 71 LINKER_LANGUAGE CXX
59 ) 72 )
60 get_target_property(IDGEN_LOC idgen LOCATION) 73 get_target_property(IDGEN_LOC idgen LOCATION)
61 get_target_property(IMPCNVGEN_LOC impcnvgen LOCATION) 74 get_target_property(IMPCNVGEN_LOC impcnvgen LOCATION)
62 # 75 #
63 add_custom_command( 76 add_custom_command(
64 OUTPUT 77 OUTPUT
65 ${PROJECT_BINARY_DIR}/dmd/id.c 78 ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.c
66 ${PROJECT_BINARY_DIR}/dmd/id.h 79 ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.h
67 # 2.4 80 # 2.4
68 COMMAND ${IDGEN_LOC} 81 COMMAND ${IDGEN_LOC}
69 #COMMAND idgen 82 #COMMAND idgen
70 WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/dmd 83 WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${DMDFE_PATH}
71 DEPENDS idgen 84 DEPENDS idgen
72 ) 85 )
73 add_custom_command( 86 add_custom_command(
74 OUTPUT ${PROJECT_BINARY_DIR}/dmd/impcnvtab.c 87 OUTPUT ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/impcnvtab.c
75 # 2.4 88 # 2.4
76 COMMAND ${IMPCNVGEN_LOC} 89 COMMAND ${IMPCNVGEN_LOC}
77 #COMMAND impcnvgen 90 #COMMAND impcnvgen
78 WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/dmd 91 WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${DMDFE_PATH}
79 DEPENDS impcnvgen 92 DEPENDS impcnvgen
80 ) 93 )
81 set(LDC_GENERATED 94 set(LDC_GENERATED
82 ${PROJECT_BINARY_DIR}/dmd/id.c 95 ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.c
83 ${PROJECT_BINARY_DIR}/dmd/id.h 96 ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.h
84 ${PROJECT_BINARY_DIR}/dmd/impcnvtab.c 97 ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/impcnvtab.c
85 ) 98 )
86 # idgen and impcnvgen done 99 # idgen and impcnvgen done
87 100
88 set(DEFAULT_TARGET ${HOST_TARGET} CACHE STRING "default target") 101 set(DEFAULT_TARGET ${HOST_TARGET} CACHE STRING "default target")
89 102
90 include_directories(. dmd ${PROJECT_BINARY_DIR}/dmd ${LLVM_INSTDIR}/include) 103 include_directories(. ${DMDFE_PATH} ${PROJECT_BINARY_DIR}/${DMDFE_PATH} ${LLVM_INSTDIR}/include)
91 104
92 file(GLOB FE_SRC dmd/*.c) 105 file(GLOB FE_SRC ${DMDFE_PATH}/*.c)
93 file(GLOB GEN_SRC gen/*.cpp) 106 file(GLOB GEN_SRC gen/*.cpp)
94 file(GLOB IR_SRC ir/*.cpp) 107 file(GLOB IR_SRC ir/*.cpp)
95 # exclude idgen and impcnvgen and generated sources, just in case 108 # exclude idgen and impcnvgen and generated sources, just in case
96 list(REMOVE_ITEM FE_SRC 109 list(REMOVE_ITEM FE_SRC
97 ${PROJECT_SOURCE_DIR}/dmd/idgen.c 110 ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/idgen.c
98 ${PROJECT_SOURCE_DIR}/dmd/impcnvgen.c 111 ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/impcnvgen.c
99 ${PROJECT_SOURCE_DIR}/dmd/id.c 112 ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/id.c
100 ${PROJECT_SOURCE_DIR}/dmd/impcnvtab.c 113 ${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/impcnvtab.c
101 ) 114 )
102 set(LDC_SOURCE_FILES 115 set(LDC_SOURCE_FILES
103 ${LDC_GENERATED} 116 ${LDC_GENERATED}
104 ${FE_SRC} 117 ${FE_SRC}
105 ${GEN_SRC} 118 ${GEN_SRC}
113 add_definitions( 126 add_definitions(
114 -DIN_LLVM 127 -DIN_LLVM
115 -D_DH 128 -D_DH
116 -DOPAQUE_VTBLS 129 -DOPAQUE_VTBLS
117 -DUSE_BOEHM_GC=0 130 -DUSE_BOEHM_GC=0
118 -DDMDV1
119 -DX86_REVERSE_PARAMS 131 -DX86_REVERSE_PARAMS
120 -DX86_PASS_IN_EAX 132 -DX86_PASS_IN_EAX
121 ) 133 )
122 134
123 if(UNIX) 135 if(UNIX)
129 add_definitions(-DDEFAULT_TARGET_TRIPLE=\\"${DEFAULT_TARGET}\\") 141 add_definitions(-DDEFAULT_TARGET_TRIPLE=\\"${DEFAULT_TARGET}\\")
130 else(CMAKE_MINOR_VERSION LESS 6) 142 else(CMAKE_MINOR_VERSION LESS 6)
131 add_definitions(-DDEFAULT_TARGET_TRIPLE="${DEFAULT_TARGET}") 143 add_definitions(-DDEFAULT_TARGET_TRIPLE="${DEFAULT_TARGET}")
132 endif(CMAKE_MINOR_VERSION LESS 6) 144 endif(CMAKE_MINOR_VERSION LESS 6)
133 145
134 add_executable(ldc ${LDC_SOURCE_FILES}) 146 add_executable(${LDC_EXE} ${LDC_SOURCE_FILES})
135 147
136 set_target_properties( 148 set_target_properties(
137 ldc PROPERTIES 149 ${LDC_EXE} PROPERTIES
138 RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin 150 RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin
139 COMPILE_FLAGS "${LLVM_CXXFLAGS} -Wno-deprecated" 151 COMPILE_FLAGS "${LLVM_CXXFLAGS} -Wno-deprecated -Wno-write-strings"
140 ) 152 )
141 153
142 # LDFLAGS should actually be in target property LINK_FLAGS, but this works, and gets around linking problems 154 # LDFLAGS should actually be in target property LINK_FLAGS, but this works, and gets around linking problems
143 target_link_libraries(ldc "${LLVM_LDFLAGS} ${LLVM_LIBS}") 155 target_link_libraries(${LDC_EXE} "${LLVM_LDFLAGS} ${LLVM_LIBS}")
144 if(WIN32) 156 if(WIN32)
145 target_link_libraries(ldc psapi) 157 target_link_libraries(${LDC_EXE} psapi)
146 #set(CONF_SUFFIX ini) 158 #set(CONF_SUFFIX ini)
147 endif(WIN32) 159 endif(WIN32)
148 160
149 # cmake pre 2.6 doesn't support the RUNTIME_OUTPUT_DIRECTORY target property 161 # cmake pre 2.6 doesn't support the RUNTIME_OUTPUT_DIRECTORY target property
150 if(CMAKE_MINOR_VERSION LESS 6) 162 if(CMAKE_MINOR_VERSION LESS 6)
151 get_target_property(LDC_LOC ldc LOCATION) 163 get_target_property(LDC_LOC ${LDC_EXE} LOCATION)
152 add_custom_command( 164 add_custom_command(
153 TARGET ldc 165 TARGET ${LDC_EXE}
154 POST_BUILD 166 POST_BUILD
155 COMMAND ${CMAKE_COMMAND} -E copy ${LDC_LOC} ${PROJECT_BINARY_DIR}/bin/ 167 COMMAND ${CMAKE_COMMAND} -E copy ${LDC_LOC} ${PROJECT_BINARY_DIR}/bin/
156 COMMAND ${CMAKE_COMMAND} -E remove ${LDC_LOC} 168 COMMAND ${CMAKE_COMMAND} -E remove ${LDC_LOC}
157 ) 169 )
158 endif(CMAKE_MINOR_VERSION LESS 6) 170 endif(CMAKE_MINOR_VERSION LESS 6)