Wiki Roadmap Timeline Tickets New Ticket Source Search Help / Guide About Trac Login

root/runtime/CMakeLists.txt

Revision 1648:18bbb1436153, 6.1 kB (checked in by Kelly Wilson <wilsonk cpsc.ucalgary.ca>, 2 years ago)

Change the ldc.conf file output to match the newer Tango directory structure and only use libtango-user-ldc for the libs to match the 0.99.9 build instructions.

Line 
1 project(runtime)
2
3 cmake_minimum_required(VERSION 2.6)
4
5 option(BUILD_SHARED_LIBS "build the runtime as shared libraries (linux only)")
6 option(BUILD_BC_LIBS "build the runtime as bytecode libraries")
7 option(BUILD_SINGLE_LIB "build single runtime library" ON)
8 set(D_FLAGS -g -w -d CACHE STRING "runtime build flags, separated by ;")
9
10 if(BUILD_SHARED_LIBS)
11     list(APPEND D_FLAGS -relocation-model=pic)
12 endif(BUILD_SHARED_LIBS)
13
14 # build tango for D1, druntime for D2
15 if(D_VERSION EQUAL 1)
16     set(RUNTIME tango)
17 elseif(D_VERSION EQUAL 2)
18     set(RUNTIME druntime)
19 else(D_VERSION EQUAL 1)
20     message(FATAL_ERROR "set d version to 1 or 2")
21 endif(D_VERSION EQUAL 1)
22 get_directory_property(PROJECT_PARENT_DIR DIRECTORY ${PROJECT_SOURCE_DIR} PARENT_DIRECTORY)
23 set(RUNTIME_DIR ${PROJECT_PARENT_DIR}/../${RUNTIME} CACHE PATH "runtime source dir")
24
25 if(D_VERSION EQUAL 1)
26     # copy imports to runtime dir
27     set(LDC_IMPORTS)
28     macro(imports_file SRCARG)
29         get_filename_component(DEST ${SRCARG} NAME)
30         set(SRC  ${PROJECT_SOURCE_DIR}/${SRCARG})
31         set(DEST ${RUNTIME_DIR}/ldc/${DEST})
32        
33         list(APPEND LDC_IMPORTS ${DEST})
34         add_custom_command(
35             OUTPUT  ${DEST}
36             DEPENDS ${SRC}
37             COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SRC} ${DEST}
38         )
39     endmacro(imports_file)
40     imports_file(import/ldc/cstdarg.di)
41     imports_file(import/ldc/intrinsics.di)
42     imports_file(import/ldc/llvmasm.di)
43     imports_file(internal/ldc/bitmanip.d)
44     imports_file(internal/ldc/vararg.d)
45     # library names
46     set(RUNTIME_CC tango-cc-tango)
47     set(RUNTIME_GC tango-gc-basic)
48     set(RUNTIME_DC ldc-runtime)
49     set(RUNTIME_AIO tango-user-ldc)
50     # set paths to source files, or fill lists directly
51     set(RUNTIME_DC_DIR ${PROJECT_SOURCE_DIR}/internal)
52     set(RUNTIME_GC_DIR ${RUNTIME_DIR}/lib/gc/basic)
53     file(GLOB CORE_D ${RUNTIME_DIR}/lib/common/tango/core/*.d)
54     file(GLOB CORE_C ${RUNTIME_DIR}/lib/common/tango/stdc/*.c)
55 elseif(D_VERSION EQUAL 2)
56     set(RUNTIME_CC druntime-core)
57     set(RUNTIME_GC druntime-gc-basic)
58     set(RUNTIME_DC druntime-rt-ldc)
59     set(RUNTIME_AIO druntime-ldc)
60     set(RUNTIME_DC_DIR ${RUNTIME_DIR}/src/compiler/ldc)
61     set(RUNTIME_GC_DIR ${RUNTIME_DIR}/src/gc/basic)
62     file(GLOB CORE_D ${RUNTIME_DIR}/src/common/core/*.d)
63     file(GLOB CORE_C ${RUNTIME_DIR}/src/common/core/stdc/*.c)
64 endif(D_VERSION EQUAL 1)
65
66 # should only be necessary if run independently from ldc cmake project
67 if(NOT LDC_LOC)
68     if(NOT LDC_EXE)
69         if(D_VERSION EQUAL 1)
70             set(LDC_EXE ldc)
71         elseif(D_VERSION EQUAL 2)
72             set(LDC_EXE ldc2)
73         endif(D_VERSION EQUAL 1)
74     endif(NOT LDC_EXE)
75
76     find_program(LDC_LOC ${LDC_EXE} ../bin DOC "path to ldc binary")
77     if(NOT LDC_LOC)
78         message(SEND_ERROR "ldc not found")
79     endif(NOT LDC_LOC)
80     set(LDC_EXE_NAME ${LDC_EXE})
81 endif(NOT LDC_LOC)
82
83 configure_file(${PROJECT_PARENT_DIR}/${LDC_EXE}.conf.in ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}.conf)
84 configure_file(${PROJECT_PARENT_DIR}/${LDC_EXE}.rebuild.conf.in ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}.rebuild.conf)
85
86 # patch runtime source, uses LDC_EXE for ldc2
87 if(D_VERSION EQUAL 2)
88     find_program(PATCH_EXE patch DOC "path to patch tool")
89     if(NOT PATCH_EXE)
90         message(STATUS "patch tool not found, can't automatically patch runtime sources for ldc")
91     else(NOT PATCH_EXE)
92         add_custom_command(
93             OUTPUT patch-runtime
94             COMMAND ${PATCH_EXE} -t -N -p0 -i ${PROJECT_SOURCE_DIR}/${LDC_EXE}.diff
95             WORKING_DIRECTORY ${RUNTIME_DIR}
96         )
97         # rebuild cache to include sources added by patch
98         add_custom_command(
99             OUTPUT recache
100             COMMAND ${CMAKE_COMMAND} -H${PROJECT_PARENT_DIR} -B${PROJECT_BINARY_DIR}/..
101         )
102         add_custom_target(patch DEPENDS patch-runtime recache ${LDC_IMPORTS})
103     endif(NOT PATCH_EXE)
104 endif(D_VERSION EQUAL 2)
105
106 file(GLOB_RECURSE GC_D ${RUNTIME_GC_DIR}/*.d)
107 file(GLOB_RECURSE DCRT_D ${RUNTIME_DC_DIR}/*.d)
108 file(GLOB DCRT_C ${RUNTIME_DC_DIR}/*.c)
109
110 # compile d file into outdir, include incdir, and append names of generated .o and .bc to outlist_o and _bc
111 macro(dc INPUT_D OUTLIST_O OUTLIST_BC OUTDIR INCDIR MOREFLAGS)
112     get_filename_component(BASENAME ${INPUT_D} NAME_WE)
113     set(OUTPUT_O ${PROJECT_BINARY_DIR}/${OUTDIR}/${BASENAME}.o)
114     set(OUTPUT_BC ${PROJECT_BINARY_DIR}/${OUTDIR}/${BASENAME}.bc)
115     list(APPEND ${OUTLIST_O} ${OUTPUT_O})
116     list(APPEND ${OUTLIST_BC} ${OUTPUT_BC})
117    
118     # Compile
119     add_custom_command(
120         OUTPUT
121             ${OUTPUT_O}
122             ${OUTPUT_BC}
123         COMMAND ${LDC_LOC} -c -I${INCDIR} -I${RUNTIME_GC_DIR} -output-bc ${INPUT_D} -of${OUTPUT_O} ${D_FLAGS} ${MOREFLAGS}
124         DEPENDS ${LDC_LOC}
125             ${INPUT_D}
126             ${LDC_IMPORTS}
127             ${PROJECT_BINARY_DIR}/../bin/${LDC_EXE}.conf
128     )
129 endmacro(dc)
130
131 # dc_dir include for core and gc only necessary with druntime
132 foreach(f ${CORE_D})
133     dc(${f} CORE_O CORE_BC core ${RUNTIME_DC_DIR} "")
134 endforeach(f)
135
136 foreach(f ${GC_D})
137     dc(${f} GC_O GC_BC gc "${RUNTIME_GC_DIR} ${RUNTIME_DC_DIR}" "-disable-invariants")
138 endforeach(f)
139
140 foreach(f ${DCRT_D})
141     dc(${f} DCRT_O DCRT_BC dcrt ${RUNTIME_DC_DIR} "")
142 endforeach(f)
143
144 if(BUILD_SINGLE_LIB)
145     add_library(${RUNTIME_AIO} ${CORE_O} ${CORE_C} ${GC_O} ${DCRT_O} ${DCRT_C})
146     set(LIBS ${RUNTIME_AIO})
147 else(BUILD_SINGLE_LIB)
148     add_library(${RUNTIME_CC} ${CORE_O} ${CORE_C})
149     add_library(${RUNTIME_GC} ${GC_O})
150     add_library(${RUNTIME_DC} ${DCRT_O} ${DCRT_C})
151     set(LIBS
152         ${RUNTIME_CC}
153         ${RUNTIME_GC}
154         ${RUNTIME_DC}
155     )
156 endif(BUILD_SINGLE_LIB)
157
158 if(BUILD_BC_LIBS)
159     find_program(LLVM_AR_EXE llvm-ar ${LLVM_INSTDIR}/bin DOC "path to llvm-ar tool")
160     if(NOT LLVM_AR_EXE)
161         message(SEND_ERROR "llvm-ar not found")
162     endif(NOT LLVM_AR_EXE)
163
164     add_library(${RUNTIME_CC}-c ${CORE_C})
165     add_library(${RUNTIME_DC}-c ${DCRT_C})
166     list(APPEND LIBS
167         ${RUNTIME_CC}-c
168         ${RUNTIME_DC}-c
169     )
170     add_custom_command(
171         OUTPUT bclibs
172         COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_CC}-bc.a ${CORE_BC}
173         COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_GC}-bc.a ${GC_BC}
174         # cannot parse genobj.bc if built with -g
175         # COMMAND ${LLVM_AR_EXE} rs lib${RUNTIME_DC}-bc.a ${DCRT_BC}
176         WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/../lib
177         DEPENDS
178             ${CORE_BC}
179             ${GC_BC}
180             ${DCRT_BC}
181             ${LDC_IMPORTS}
182     )
183     set(BCLIBS bclibs)
184 endif(BUILD_BC_LIBS)
185
186 set_target_properties(
187     ${LIBS} PROPERTIES
188     LINKER_LANGUAGE C
189     ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../lib
190     LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../lib
191 )
192
193 # BCLIBS is empty if BUILD_BC_LIBS is not selected
194 add_custom_target(runtime DEPENDS ${LIBS} ${BCLIBS})
Note: See TracBrowser for help on using the browser.
Copyright © 2008, LDC Development Team.