summarylogtreecommitdiffstats
path: root/toolchain-cmake.patch
blob: e4453843ae3597533250c0cdac49b32a93bc9c19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
diff --git a/toolchain.cmake.in b/toolchain.cmake.in
index a913671..cb36e3b 100644
--- a/toolchain.cmake.in
+++ b/toolchain.cmake.in
@@ -9,49 +9,40 @@ include(CMakeForceCompiler)
 
 ### CONFIGURATION ###
 
-set(TOOLCHAIN_PREFIX /usr/powerpc-wrs-vxworks)
-set(TOOLCHAIN_IS_GCCDIST false)
-set(TOOLCHAIN_C_COMPILER powerpc-wrs-vxworks-gcc)
-set(TOOLCHAIN_CXX_COMPILER powerpc-wrs-vxworks-g++)
+set(TARGET powerpc-wrs-vxworks)
+set(TOOLCHAIN_PREFIX /usr/${TARGET})
 
-set(STRIPSYMS powerpc-wrs-vxworks-stripsyms) #ignore for gccdist
-set(MUNCH powerpc-wrs-vxworks-munch) #see README
+set(STRIPSYMS ${TARGET}-stripsyms)
+set(MUNCH ${TARGET}-munch) #see README
 
 ### CONFIGURATION BELOW SHOULD NOT NEED TO BE CHANGED ###
 
 set(WIND_BASE "$ENV{WIND_BASE}")
-set(CMAKE_INSTALL_PREFIX "${TOOLCHAIN_PREFIX}")
-set(CMAKE_FIND_ROOT_PATH "${TOOLCHAIN_PREFIX}")
-set(VXWORKS_USE_SOFT_FLOAT false)
+set(CMAKE_INSTALL_PREFIX "/usr/${TARGET}")
+set(CMAKE_FIND_ROOT_PATH "/usr/${TARGET}")
 
-CMAKE_FORCE_C_COMPILER("${TOOLCHAIN_C_COMPILER}" GNU)
-CMAKE_FORCE_CXX_COMPILER("${TOOLCHAIN_CXX_COMPILER}" GNU)
+CMAKE_FORCE_C_COMPILER("${TARGET}-gcc" GNU)
+CMAKE_FORCE_CXX_COMPILER("${TARGET}-g++" GNU)
 set(CMAKE_LIBRARY_PATH_FLAG -L)
 
 ### TOOLCHAIN SPECIFIC CONFIGURATION ###
-if(${TOOLCHAIN_IS_GCCDIST})
-	### CONFIGURATION FOR GCCDIST ONLY ###
-    set(DKM_LINK_SCRIPT "${WIND_BASE}/target/h/tool/gnu/ldscripts/link.OUT")
-else()
-	### CONFIGURATION FOR NON-GCCDIST TOOLCHAINS ONLY ###
-	#locations of libraries so we can use nm to find their symbols
-	set(VXWORKS_LIBSTDCXX "${TOOLCHAIN_PREFIX}/lib/libstdc++.a")
-	set(VXWORKS_LIBSUPCXX "${TOOLCHAIN_PREFIX}/lib/libsupc++.a")
-	#libgcc's location changes based on gcc, so ask compiler where it is
-    execute_process(COMMAND "${TOOLCHAIN_C_COMPILER}" -print-libgcc-file-name OUTPUT_VARIABLE VXWORKS_LIBGCC)
-    
-    #the above command leaves a newline at the end of VXWORKS_LIBGCC.
-    #This triggers a bug in cmake's link script execution which will
-    #segfault because it sees a blank line and passes an empty string to
-    #execvp().  For now, workaround: use regex to strip trailing newline
-	string(REGEX REPLACE "(\r?\n)+$" "" VXWORKS_LIBGCC "${VXWORKS_LIBGCC}")
-	
-	#link flags for standard libraries
-	set(VXWORKS_STDLIB_LINK " -lsupc++ -lstdc++ -lgcc")
-	#TODO: Do we want libsupc++?
-
-    set(DKM_LINK_SCRIPT "${TOOLCHAIN_PREFIX}/share/ldscripts/dkm.ld")
-endif()
+#locations of libraries so we can use nm to find their symbols
+set(VXWORKS_LIBSTDCXX "/usr/${TARGET}/lib/libstdc++.a")
+set(VXWORKS_LIBSUPCXX "/usr/${TARGET}/lib/libsupc++.a")
+#libgcc's location changes based on gcc, so ask compiler where it is
+  execute_process(COMMAND "${TARGET}-gcc" -print-libgcc-file-name OUTPUT_VARIABLE VXWORKS_LIBGCC)
+
+  #the above command leaves a newline at the end of VXWORKS_LIBGCC.
+  #This triggers a bug in cmake's link script execution which will
+  #segfault because it sees a blank line and passes an empty string to
+  #execvp().  For now, workaround: use regex to strip trailing newline
+string(REGEX REPLACE "(\r?\n)+$" "" VXWORKS_LIBGCC "${VXWORKS_LIBGCC}")
+
+#link flags for standard libraries
+set(VXWORKS_STDLIB_LINK " -lsupc++ -lstdc++ -lgcc")
+#TODO: Do we want libsupc++?
+
+  set(DKM_LINK_SCRIPT "/usr/${TARGET}/share/ldscripts/dkm.ld")
 ### END TOOLCHAIN SPECIFIC CONFIGURATION ###
 
 ### END CONFIGURATION ###
@@ -73,23 +64,12 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
 set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
 set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
 
-#System Headers
-if(${TOOLCHAIN_IS_GCCDIST})
-	set(SYSTEM_INCLUDES "-isystem ${WIND_BASE}/target/h -isystem ${WIND_BASE}/target/h/wrn/coreip")
-else()
-	#modern build toolchains do not presently require additional includes
-endif()
-
 #build flags
 set(CPU PPC603)
 set(TOOL_FAMILY gnu)
 set(TOOL gnu)
 set(ARCH_SPEC "-mcpu=603 -mstrict-align -mlongcall")
 
-if (${VXWORKS_USE_SOFT_FLOAT})
-	set(ARCH_SPEC "${ARCH_SPEC} -msoft_float")
-endif()
-
 #Set CFLAGS, LDFLAGS
 #Note that we use -nostdlib and then link with the standard library
 set(VXWORKS_COMPILE_FLAGS "${ARCH_SPEC} -nostdlib -Wall ${SYSTEM_INCLUDES} -DCPU=${CPU} -DTOOL_FAMILY=${TOOL_FAMILY} -DTOOL=${TOOL} -D_WRS_KERNEL")
@@ -97,33 +77,14 @@ set(VXWORKS_DKM_LINK_FLAGS "-nostdlib -r -Wl,-X -static") #should be equivalent
 set(VXWORKS_DKM_LINK_SCRIPT_FLAG "-T \"${DKM_LINK_SCRIPT}\"")
 
 #Set toolchain definitions
-set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> -c <SOURCE> -o <OBJECT> <FLAGS> ${VXWORKS_COMPILE_FLAGS}")
-set(CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> -c <SOURCE> -o <OBJECT> <FLAGS> ${VXWORKS_COMPILE_FLAGS}")
+set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> -c <SOURCE> -o <OBJECT> <FLAGS> ${VXWORKS_COMPILE_FLAGS}")
+set(CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> -c <SOURCE> -o <OBJECT> <FLAGS> ${VXWORKS_COMPILE_FLAGS}")
 set(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS>" "<CMAKE_RANLIB> <TARGET>")
 set(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS>" "<CMAKE_RANLIB> <TARGET>")
 set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> ${VXWORKS_DKM_LINK_FLAGS} ${VXWORKS_DKM_LINK_SCRIPT_FLAG}")
 
 #link rules for C++:
 #TODO:  This will NOT work on win32!
-if(${TOOLCHAIN_IS_GCCDIST})
-#	Do a partial link.
-#	- The first line compiles the partial image - NOTE: we link static libraries at this point so that all of
-#		the symbols that are pulled into the module (and only those symbols) will be munched in the next step
-#	- The second line "munches" the executable to generate a file (<TARGET>_ctdt.c) that contains all of the
-#		static constructors and destructors in an array so that the kernel can call them at the appropriate times.
-#	- The third line compiles the ctor/dtor file.
-#	- The fourth line links the partial image together with the ctor/dtor object to create the finished executable
-#	- The last line cleans up all these generated files (which will have to be regenerated later anyway)
-#
-#	NOTE: We don't link the standard library here as we'll get the kernel's copy when we get loaded in
-	set(CMAKE_CXX_LINK_EXECUTABLE
-		"<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> ${VXWORKS_DKM_LINK_FLAGS} <LINK_FLAGS> <OBJECTS> -o <TARGET>_PartialImage.out <LINK_LIBRARIES>"
-		"${MUNCH} <TARGET>_ctdt.c <TARGET>_PartialImage.out"
-		"<CMAKE_C_COMPILER> -c <TARGET>_ctdt.c -o <TARGET>_ctdt.c.o ${VXWORKS_COMPILE_FLAGS}"
-		"<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <TARGET>_PartialImage.out <TARGET>_ctdt.c.o -o <TARGET> ${VXWORKS_DKM_LINK_FLAGS} ${VXWORKS_DKM_LINK_SCRIPT_FLAG}"
-		"<CMAKE_COMMAND> -E remove <TARGET>_PartialImage.out <TARGET>_ctdt.c <TARGET>_ctdt.c.o"
-	)
-else()
 #	Here's the crazy part...
 #	- The first line compiles the partial image - NOTE: notice we also link the standard library at this point
 #	- We munch the executable, which now contains the standard library as well
@@ -136,14 +97,13 @@ else()
 #
 #	NOTE: We need to link in our own standard library, both to get its features and because there might be some conflicts
 #		in what symbols are defined, inline functions, and other internals between the kernel's stdlib (which is a whole
-#		major version old!) and the one we have.  Even if its just the headers, something might break.  The gccdist link 
+#		major version old!) and the one we have.  Even if its just the headers, something might break.  The gccdist link
 #		command might work, but I don't recommend it.
-	set(CMAKE_CXX_LINK_EXECUTABLE 
-		"<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> ${VXWORKS_DKM_LINK_FLAGS} <LINK_FLAGS> <OBJECTS> -o <TARGET>_PartialImage.out <LINK_LIBRARIES> ${VXWORKS_STDLIB_LINK}"
-		"${MUNCH} <TARGET>_ctdt.c <TARGET>_PartialImage.out"
-		"<CMAKE_C_COMPILER> -c <TARGET>_ctdt.c -o <TARGET>_ctdt.c.o ${VXWORKS_COMPILE_FLAGS}"
-		"<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <TARGET>_PartialImage.out <TARGET>_ctdt.c.o -o <TARGET> ${VXWORKS_DKM_LINK_FLAGS} ${VXWORKS_DKM_LINK_SCRIPT_FLAG}"
-		"${STRIPSYMS} <TARGET> ${VXWORKS_LIBSTDCXX} ${VXWORKS_LIBSUPCXX} ${VXWORKS_LIBGCC}"
-		"<CMAKE_COMMAND> -E remove <TARGET>_PartialImage.out <TARGET>_ctdt.c <TARGET>_ctdt.c.o"
-	)
-endif()
+set(CMAKE_CXX_LINK_EXECUTABLE
+  "<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> ${VXWORKS_DKM_LINK_FLAGS} <LINK_FLAGS> <OBJECTS> -o <TARGET>_PartialImage.out <LINK_LIBRARIES> ${VXWORKS_STDLIB_LINK}"
+  "${MUNCH} <TARGET>_ctdt.c <TARGET>_PartialImage.out"
+  "<CMAKE_C_COMPILER> -c <TARGET>_ctdt.c -o <TARGET>_ctdt.c.o ${VXWORKS_COMPILE_FLAGS}"
+  "<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <TARGET>_PartialImage.out <TARGET>_ctdt.c.o -o <TARGET> ${VXWORKS_DKM_LINK_FLAGS} ${VXWORKS_DKM_LINK_SCRIPT_FLAG}"
+  "${STRIPSYMS} <TARGET> ${VXWORKS_LIBSTDCXX} ${VXWORKS_LIBSUPCXX} ${VXWORKS_LIBGCC}"
+  "<CMAKE_COMMAND> -E remove <TARGET>_PartialImage.out <TARGET>_ctdt.c <TARGET>_ctdt.c.o"
+)