Mercurial > projects > ldc
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) |