diff 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
line wrap: on
line diff
--- a/CMakeLists.txt	Mon Nov 10 20:55:24 2008 +0100
+++ b/CMakeLists.txt	Tue Nov 11 01:38:48 2008 +0100
@@ -39,19 +39,32 @@
 # get llvm's install dir. a little hackish, we could do something like llvm-config --prefix, but this does as well
 string(REPLACE "/bin/llvm-config" "" LLVM_INSTDIR ${LLVM_CONFIG})
 
+set(D_VERSION 1 CACHE STRING "D language version")
+if(D_VERSION EQUAL 1)
+	set(DMDFE_PATH dmd)
+	set(LDC_EXE ldc)
+	add_definitions(-DDMDV1)
+elseif(D_VERSION EQUAL 2)
+	set(DMDFE_PATH dmd2)
+	set(LDC_EXE ldc2)
+	add_definitions(-DDMDV2)
+else(D_VERSION EQUAL 1)
+	message(FATAL_ERROR "unsupported D version")
+endif(D_VERSION EQUAL 1)
+
 file(MAKE_DIRECTORY
 	${PROJECT_BINARY_DIR}/bin
-	${PROJECT_BINARY_DIR}/dmd
+	${PROJECT_BINARY_DIR}/${DMDFE_PATH}
 )
 
 # idgen and impcnvgen
 set_source_files_properties(
-	dmd/idgen.c
-	dmd/impcnvgen.c
+	${DMDFE_PATH}/idgen.c
+	${DMDFE_PATH}/impcnvgen.c
 	PROPERTIES LANGUAGE CXX
 )
-add_executable(idgen dmd/idgen.c)
-add_executable(impcnvgen dmd/impcnvgen.c)
+add_executable(idgen ${DMDFE_PATH}/idgen.c)
+add_executable(impcnvgen ${DMDFE_PATH}/impcnvgen.c)
 # cmake 2.4
 set_target_properties(
 	idgen impcnvgen PROPERTIES
@@ -62,42 +75,42 @@
 # 
 add_custom_command(
 	OUTPUT
-		${PROJECT_BINARY_DIR}/dmd/id.c
-		${PROJECT_BINARY_DIR}/dmd/id.h
+		${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.c
+		${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.h
 	# 2.4
 	COMMAND ${IDGEN_LOC}
 	#COMMAND idgen
-	WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/dmd
+	WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${DMDFE_PATH}
 	DEPENDS idgen
 )
 add_custom_command(
-	OUTPUT ${PROJECT_BINARY_DIR}/dmd/impcnvtab.c
+	OUTPUT ${PROJECT_BINARY_DIR}/${DMDFE_PATH}/impcnvtab.c
 	# 2.4
 	COMMAND ${IMPCNVGEN_LOC}
 	#COMMAND impcnvgen 
-	WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/dmd
+	WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/${DMDFE_PATH}
 	DEPENDS impcnvgen
 )
 set(LDC_GENERATED
-	${PROJECT_BINARY_DIR}/dmd/id.c
-	${PROJECT_BINARY_DIR}/dmd/id.h
-	${PROJECT_BINARY_DIR}/dmd/impcnvtab.c
+	${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.c
+	${PROJECT_BINARY_DIR}/${DMDFE_PATH}/id.h
+	${PROJECT_BINARY_DIR}/${DMDFE_PATH}/impcnvtab.c
 )
 # idgen and impcnvgen done
 
 set(DEFAULT_TARGET ${HOST_TARGET} CACHE STRING "default target")
 
-include_directories(. dmd ${PROJECT_BINARY_DIR}/dmd ${LLVM_INSTDIR}/include)
+include_directories(. ${DMDFE_PATH} ${PROJECT_BINARY_DIR}/${DMDFE_PATH} ${LLVM_INSTDIR}/include)
 
-file(GLOB FE_SRC dmd/*.c)
+file(GLOB FE_SRC ${DMDFE_PATH}/*.c)
 file(GLOB GEN_SRC gen/*.cpp)
 file(GLOB IR_SRC ir/*.cpp)
 # exclude idgen and impcnvgen and generated sources, just in case
 list(REMOVE_ITEM FE_SRC
-	${PROJECT_SOURCE_DIR}/dmd/idgen.c
-	${PROJECT_SOURCE_DIR}/dmd/impcnvgen.c
-	${PROJECT_SOURCE_DIR}/dmd/id.c
-	${PROJECT_SOURCE_DIR}/dmd/impcnvtab.c
+	${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/idgen.c
+	${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/impcnvgen.c
+	${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/id.c
+	${PROJECT_SOURCE_DIR}/${DMDFE_PATH}/impcnvtab.c
 )
 set(LDC_SOURCE_FILES
 	${LDC_GENERATED}
@@ -115,7 +128,6 @@
 	-D_DH
 	-DOPAQUE_VTBLS
 	-DUSE_BOEHM_GC=0
-	-DDMDV1
 	-DX86_REVERSE_PARAMS
 	-DX86_PASS_IN_EAX
 )
@@ -131,26 +143,26 @@
 	add_definitions(-DDEFAULT_TARGET_TRIPLE="${DEFAULT_TARGET}")
 endif(CMAKE_MINOR_VERSION LESS 6)
 
-add_executable(ldc ${LDC_SOURCE_FILES})
+add_executable(${LDC_EXE} ${LDC_SOURCE_FILES})
 
 set_target_properties(
-	ldc PROPERTIES
+	${LDC_EXE} PROPERTIES
 	RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin
-	COMPILE_FLAGS "${LLVM_CXXFLAGS} -Wno-deprecated"
+	COMPILE_FLAGS "${LLVM_CXXFLAGS} -Wno-deprecated -Wno-write-strings"
 )
 
 # LDFLAGS should actually be in target property LINK_FLAGS, but this works, and gets around linking problems
-target_link_libraries(ldc "${LLVM_LDFLAGS} ${LLVM_LIBS}")
+target_link_libraries(${LDC_EXE} "${LLVM_LDFLAGS} ${LLVM_LIBS}")
 if(WIN32)
-	target_link_libraries(ldc psapi)
+	target_link_libraries(${LDC_EXE} psapi)
 	#set(CONF_SUFFIX ini)
 endif(WIN32)
 
 # cmake pre 2.6 doesn't support the RUNTIME_OUTPUT_DIRECTORY target property
 if(CMAKE_MINOR_VERSION LESS 6)
-	get_target_property(LDC_LOC ldc LOCATION)
+	get_target_property(LDC_LOC ${LDC_EXE} LOCATION)
 	add_custom_command(
-		TARGET ldc
+		TARGET ${LDC_EXE}
 		POST_BUILD
 		COMMAND ${CMAKE_COMMAND} -E copy ${LDC_LOC} ${PROJECT_BINARY_DIR}/bin/
 		COMMAND ${CMAKE_COMMAND} -E remove ${LDC_LOC}