@@ -20,22 +20,28 @@ if(NOT DEFINED FPGA_DEVICE)
20
20
set (FPGA_DEVICE "intel_s10sx_pac:pac_s10_usm" )
21
21
endif ()
22
22
23
- # Use cmake -DUSER_HARDWARE_FLAGS =<flags> to set extra flags for FPGA backend
23
+ # Use cmake -DUSER_FPGA_FLAGS =<flags> to set extra flags for FPGA backend
24
24
# compilation.
25
- set (USER_HARDWARE_FLAGS "${USER_HARDWARE_FLAGS } " )
25
+ set (USER_FPGA_FLAGS "${USER_FPGA_FLAGS } " )
26
26
27
27
# Use cmake -DUSER_FLAGS=<flags> to set extra flags for general compilation.
28
28
set (USER_FLAGS "${USER_FLAGS} " )
29
29
###############################################################################
30
30
### no changes after here
31
31
###############################################################################
32
32
33
+ set (EMULATOR_EXTENSION fpga_emu)
34
+ set (REPORT_EXTENSION report)
35
+ set (SIMULATOR_EXTENSION fpga_sim)
36
+ set (FPGA_EXTENSION fpga)
37
+ set (IP_EXPORT_EXTENSION fpga_ip_export)
38
+
33
39
# define the different build targets the generated build script will support.
34
- set (EMULATOR_TARGET ${TARGET_NAME} .fpga_emu )
35
- # set(REPORT_TARGET ${TARGET_NAME}.report )
36
- set (SIMULATOR_TARGET ${TARGET_NAME} .fpga_sim )
37
- set (FPGA_TARGET ${TARGET_NAME} .fpga )
38
- # set(IP_EXPORT_TARGET ${TARGET_NAME}.fpga_ip_export )
40
+ set (EMULATOR_TARGET ${TARGET_NAME} .${EMULATOR_EXTENSION} )
41
+ set (REPORT_TARGET ${TARGET_NAME} .${REPORT_EXTENSION} )
42
+ set (SIMULATOR_TARGET ${TARGET_NAME} .${SIMULATOR_EXTENSION} )
43
+ set (FPGA_TARGET ${TARGET_NAME} .${FPGA_EXTENSION} )
44
+ set (IP_EXPORT_TARGET ${TARGET_NAME} .${IP_EXPORT_EXTENSION} )
39
45
40
46
# FPGA device selection
41
47
if (DEFINED FPGA_DEVICE)
@@ -51,7 +57,7 @@ if(WIN32)
51
57
else ()
52
58
# add qactypes for Linux
53
59
set (QACTYPES_COMPILE "-qactypes" )
54
- set (QACTYPES_LINK "-qactypes " )
60
+ set (QACTYPES_LINK "" )
55
61
endif ()
56
62
57
63
# A DPC++ ahead-of-time (AoT) compile processes the device code in two stages.
@@ -60,75 +66,107 @@ endif()
60
66
# 2. The "link" stage invokes the compiler's FPGA backend before linking. For
61
67
# this reason, FPGA backend flags must be passed as link flags in CMake.
62
68
63
- set (EMULATOR_COMPILE_FLAGS "-fsycl -fintelfpga -Wall ${WIN_FLAG} ${QACTYPES_COMPILE} ${EXPERIMENTAL_INCLUDE} " )
64
- set (EMULATOR_LINK_FLAGS "-fsycl -fintelfpga ${QACTYPES_LINK} " )
65
- set (FPGA_COMPILE_FLAGS "-fsycl -fintelfpga -Wall ${WIN_FLAG} ${QACTYPES_COMPILE} ${EXPERIMENTAL_INCLUDE} " )
66
- set (FPGA_REPORT_FLAGS "-fsycl -fintelfpga -Xstarget=${FPGA_DEVICE} ${USER_HARDWARE_FLAGS} " )
67
- set (FPGA_LINK_FLAGS "${FPGA_REPORT_FLAGS} ${QACTYPES_LINK} " )
69
+ set (EMULATOR_COMPILE_FLAGS "-fsycl -fintelfpga -DFPGA_EMULATOR ${QACTYPES_COMPILE} ${USER_FLAGS} ${EXPERIMENTAL_INCLUDE} ${WIN_FLAG} " )
70
+ set (EMULATOR_LINK_FLAGS "-fsycl -fintelfpga -DFPGA_EMULATOR ${QACTYPES_LINK} ${USER_FLAGS} " )
71
+ set (REPORT_COMPILE_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE ${QACTYPES_COMPILE} ${USER_FLAGS} ${EXPERIMENTAL_INCLUDE} ${WIN_FLAG} " )
72
+ set (REPORT_LINK_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE ${QACTYPES_LINK} ${USER_FLAGS} ${USER_FPGA_FLAGS} -Xshardware -fsycl-link=early" )
73
+ set (SIMULATOR_COMPILE_FLAGS "-fsycl -fintelfpga -DFPGA_SIMULATOR ${QACTYPES_COMPILE} ${USER_FLAGS} ${EXPERIMENTAL_INCLUDE} ${WIN_FLAG} " )
74
+ set (SIMULATOR_LINK_FLAGS "-fsycl -fintelfpga -DFPGA_SIMULATOR ${QACTYPES_LINK} ${USER_FLAGS} ${USER_FPGA_FLAGS} -Xssimulation -Xsghdl=1" )
75
+ set (FULL_SYSTEM_COMPILE_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE ${QACTYPES_COMPILE} ${USER_FLAGS} ${EXPERIMENTAL_INCLUDE} ${WIN_FLAG} " )
76
+ set (FULL_SYSTEM_LINK_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE ${QACTYPES_LINK} ${USER_FLAGS} ${USER_FPGA_FLAGS} -Xshardware" )
77
+
78
+ # get rid of this once host pipes work properly
79
+ set (IP_EXPORT_COMPILE_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE ${QACTYPES_COMPILE} ${USER_FLAGS} ${EXPERIMENTAL_INCLUDE} ${WIN_FLAG} " )
80
+ set (IP_EXPORT_LINK_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE ${QACTYPES_LINK} ${USER_FLAGS} ${USER_FPGA_FLAGS} -Xshardware -fsycl-link=early -fsycl-device-code-split=per_kernel" )
81
+
82
+ # remove extra spaces
83
+ string (REGEX REPLACE "( +)" " " EMULATOR_COMPILE_FLAGS ${EMULATOR_COMPILE_FLAGS} )
84
+ string (REGEX REPLACE "( +)" " " EMULATOR_LINK_FLAGS ${EMULATOR_LINK_FLAGS} )
85
+ string (REGEX REPLACE "( +)" " " REPORT_COMPILE_FLAGS ${REPORT_COMPILE_FLAGS} )
86
+ string (REGEX REPLACE "( +)" " " REPORT_LINK_FLAGS ${REPORT_LINK_FLAGS} )
87
+ string (REGEX REPLACE "( +)" " " SIMULATOR_COMPILE_FLAGS ${SIMULATOR_COMPILE_FLAGS} )
88
+ string (REGEX REPLACE "( +)" " " SIMULATOR_LINK_FLAGS ${SIMULATOR_LINK_FLAGS} )
89
+ string (REGEX REPLACE "( +)" " " FULL_SYSTEM_COMPILE_FLAGS ${FULL_SYSTEM_COMPILE_FLAGS} )
90
+ string (REGEX REPLACE "( +)" " " FULL_SYSTEM_COMPILE_FLAGS ${FULL_SYSTEM_COMPILE_FLAGS} )
91
+ string (REGEX REPLACE "( +)" " " IP_EXPORT_COMPILE_FLAGS ${IP_EXPORT_COMPILE_FLAGS} )
92
+ string (REGEX REPLACE "( +)" " " IP_EXPORT_LINK_FLAGS ${IP_EXPORT_LINK_FLAGS} )
68
93
69
94
###############################################################################
70
95
### FPGA Emulator
71
96
###############################################################################
72
- # To compile in a single command:
73
- # icpx -fsycl -fintelfpga -DFPGA_EMULATOR fpga_compile.cpp -o fpga_compile.fpga_emu
74
- # CMake executes:
75
- # [compile] icpx -fsycl -fintelfpga -DFPGA_EMULATOR -o fpga_compile.cpp.o -c fpga_compile.cpp
76
- # [link] icpx -fsycl -fintelfpga fpga_compile.cpp.o -o fpga_compile.fpga_emu
77
97
add_executable (${EMULATOR_TARGET} ${SOURCE_FILE} )
78
- add_custom_target (fpga_emu DEPENDS ${EMULATOR_TARGET} )
79
- set_target_properties (${EMULATOR_TARGET} PROPERTIES COMPILE_FLAGS "${EMULATOR_COMPILE_FLAGS} -DFPGA_EMULATOR ${USER_FLAGS} " )
80
- set_target_properties (${EMULATOR_TARGET} PROPERTIES LINK_FLAGS "${EMULATOR_LINK_FLAGS} -DFPGA_EMULATOR ${USER_FLAGS} " )
98
+
99
+ add_custom_target ( displayEmulationCompileCommand ALL
100
+ ${CMAKE_COMMAND} -E cmake_echo_color --cyan ""
101
+ COMMENT "${CMAKE_CXX_COMPILER} ${EMULATOR_COMPILE_FLAGS} -o ${OBJ_FILE} -c ${SOURCE_FILE} " )
102
+
103
+ add_dependencies (${EMULATOR_TARGET} displayEmulationCompileCommand)
104
+ set_target_properties (${EMULATOR_TARGET} PROPERTIES COMPILE_FLAGS "${EMULATOR_COMPILE_FLAGS} " )
105
+ add_custom_command (TARGET ${EMULATOR_TARGET} POST_BUILD COMMENT "${CMAKE_CXX_COMPILER} ${EMULATOR_LINK_FLAGS} ${OBJ_FILE} -o ${EMULATOR_TARGET} " )
106
+
107
+ set_target_properties (${EMULATOR_TARGET} PROPERTIES LINK_FLAGS "${EMULATOR_LINK_FLAGS} " )
108
+ add_custom_target (${EMULATOR_EXTENSION} DEPENDS ${EMULATOR_TARGET} )
81
109
82
110
###############################################################################
83
111
### Report
84
112
###############################################################################
85
- # To compile manually:
86
- # icpx -fsycl -fintelfpga -Xshardware -Xstarget=<FPGA_DEVICE> -fsycl-link=early fpga_compile.cpp -o fpga_compile.report.a
87
- set (REPORT_TARGET ${TARGET_NAME} .report.a)
88
- # The compile output is not an executable, but an intermediate compilation result unique to DPC++.
89
113
add_executable (${REPORT_TARGET} ${SOURCE_FILE} )
90
- add_custom_target (report DEPENDS ${REPORT_TARGET} )
91
- set_target_properties (${REPORT_TARGET} PROPERTIES COMPILE_FLAGS "${FPGA_COMPILE_FLAGS} -DFPGA_HARDWARE ${USER_FLAGS} " )
92
- set_target_properties (${REPORT_TARGET} PROPERTIES LINK_FLAGS "${FPGA_REPORT_FLAGS} ${USER_FLAGS} -Xshardware -fsycl-link=early" )
93
- # fsycl-link=early stops the compiler after RTL generation, before invoking Quartus®
114
+
115
+ add_custom_target ( displayReportCompileCommand ALL
116
+ ${CMAKE_COMMAND} -E cmake_echo_color --cyan ""
117
+ COMMENT "${CMAKE_CXX_COMPILER} ${REPORT_COMPILE_FLAGS} -o ${OBJ_FILE} -c ${SOURCE_FILE} " )
118
+
119
+ add_dependencies (${REPORT_TARGET} displayReportCompileCommand)
120
+ set_target_properties (${REPORT_TARGET} PROPERTIES COMPILE_FLAGS "${REPORT_COMPILE_FLAGS} " )
121
+ add_custom_command (TARGET ${REPORT_TARGET} POST_BUILD COMMENT "${CMAKE_CXX_COMPILER} ${REPORT_LINK_FLAGS} ${OBJ_FILE} -o ${REPORT_TARGET} " )
122
+
123
+ set_target_properties (${REPORT_TARGET} PROPERTIES LINK_FLAGS "${REPORT_LINK_FLAGS} " )
124
+ add_custom_target (${REPORT_EXTENSION} DEPENDS ${REPORT_TARGET} )
94
125
95
126
###############################################################################
96
127
### FPGA Simulation
97
128
###############################################################################
98
- # To compile in a single command:
99
- # icpx -fsycl -fintelfpga -Xstarget=<FPGA_DEVICE> -Xssimulation -Xsghdl=1 fpga_compile.cpp -o fpga_compile.fpga_sim
100
- # CMake executes:
101
- # [compile] icpx -fsycl -fintelfpga -o fpga_compile.cpp.o -c fpga_compile.cpp
102
- # [link] icpx -fsycl -fintelfpga -Xstarget=<FPGA_DEVICE> -Xssimulation -Xsghdl=1 fpga_compile.cpp.o -o fpga_compile.fpga_sim
103
- add_executable (${SIMULATOR_TARGET} EXCLUDE_FROM_ALL ${SOURCE_FILE} )
104
- add_custom_target (fpga_sim DEPENDS ${SIMULATOR_TARGET} )
105
- set_target_properties (${SIMULATOR_TARGET} PROPERTIES COMPILE_FLAGS "${FPGA_COMPILE_FLAGS} -DFPGA_SIMULATOR ${USER_FLAGS} " )
106
- set_target_properties (${SIMULATOR_TARGET} PROPERTIES LINK_FLAGS "${FPGA_LINK_FLAGS} -Xssimulation -Xsghdl=1 ${USER_FLAGS} " )
129
+ add_executable (${SIMULATOR_TARGET} ${SOURCE_FILE} )
130
+
131
+ add_custom_target ( displaySimulatorCompileCommand ALL
132
+ ${CMAKE_COMMAND} -E cmake_echo_color --cyan ""
133
+ COMMENT "${CMAKE_CXX_COMPILER} ${SIMULATOR_COMPILE_FLAGS} -o ${OBJ_FILE} -c ${SOURCE_FILE} " )
134
+
135
+ add_dependencies (${SIMULATOR_TARGET} displaySimulatorCompileCommand)
136
+ set_target_properties (${SIMULATOR_TARGET} PROPERTIES COMPILE_FLAGS "${SIMULATOR_COMPILE_FLAGS} " )
137
+ add_custom_command (TARGET ${SIMULATOR_TARGET} POST_BUILD COMMENT "${CMAKE_CXX_COMPILER} ${SIMULATOR_LINK_FLAGS} ${OBJ_FILE} -o ${SIMULATOR_TARGET} " )
138
+
139
+ set_target_properties (${SIMULATOR_TARGET} PROPERTIES LINK_FLAGS "${SIMULATOR_LINK_FLAGS} " )
140
+ add_custom_target (${SIMULATOR_EXTENSION} DEPENDS ${SIMULATOR_TARGET} )
107
141
108
142
###############################################################################
109
143
### FPGA Board
110
144
###############################################################################
111
- # To compile in a single command:
112
- # icpx -fsycl -fintelfpga -Xshardware -Xstarget=<FPGA_DEVICE> fpga_compile.cpp -o fpga_compile.fpga
113
- # CMake executes:
114
- # [compile] icpx -fsycl -fintelfpga -o fpga_compile.cpp.o -c fpga_compile.cpp
115
- # [link] icpx -fsycl -fintelfpga -Xshardware -Xstarget=<FPGA_DEVICE> fpga_compile.cpp.o -o fpga_compile.fpga
116
- add_executable (${FPGA_TARGET} EXCLUDE_FROM_ALL ${SOURCE_FILE} )
117
- add_custom_target (fpga DEPENDS ${FPGA_TARGET} )
118
- set_target_properties (${FPGA_TARGET} PROPERTIES COMPILE_FLAGS "${FPGA_COMPILE_FLAGS} -DFPGA_HARDWARE ${USER_FLAGS} " )
119
- set_target_properties (${FPGA_TARGET} PROPERTIES LINK_FLAGS "${FPGA_LINK_FLAGS} -Xshardware ${USER_FLAGS} " )
145
+ add_executable (${FPGA_TARGET} ${SOURCE_FILE} )
146
+
147
+ add_custom_target ( displayFpgaCompileCommand ALL
148
+ ${CMAKE_COMMAND} -E cmake_echo_color --cyan ""
149
+ COMMENT "${CMAKE_CXX_COMPILER} ${FULL_SYSTEM_COMPILE_FLAGS} -o ${OBJ_FILE} -c ${SOURCE_FILE} " )
150
+
151
+ add_dependencies (${FPGA_TARGET} displayFpgaCompileCommand)
152
+ set_target_properties (${FPGA_TARGET} PROPERTIES COMPILE_FLAGS "${FULL_SYSTEM_COMPILE_FLAGS} " )
153
+ add_custom_command (TARGET ${FPGA_TARGET} POST_BUILD COMMENT "${CMAKE_CXX_COMPILER} ${FULL_SYSTEM_LINK_FLAGS} ${OBJ_FILE} -o ${FPGA_TARGET} " )
154
+
155
+ set_target_properties (${FPGA_TARGET} PROPERTIES LINK_FLAGS "${FULL_SYSTEM_LINK_FLAGS} " )
156
+ add_custom_target (${FPGA_EXTENSION} DEPENDS ${FPGA_TARGET} )
120
157
121
158
###############################################################################
122
- ### FPGA IP Export (apparently only necessary until 'correct' implementation of host pipes)
159
+ ### FPGA IP Export (only necessary until native host pipes)
123
160
###############################################################################
124
- # To compile in a single command:
125
- # icpx -fsycl -fintelfpga -Xshardware -Xstarget=<FPGA_DEVICE> -fsycl-link=early -fsycl-device-code-split=per_kernel fpga_compile.cpp -o fpga_compile.fpga_ip_export
126
- # CMake executes:
127
- # [compile] icpx -fsycl -fintelfpga -o fpga_compile.cpp.o -c fpga_compile.cpp
128
- # [link] icpx -fsycl -fintelfpga -Xshardware -Xstarget=<FPGA_DEVICE> fpga_compile.cpp.o -o fpga_compile.fpga_ip_export
129
- set (IP_EXPORT_TARGET ${TARGET_NAME} .fpga_ip_export.a)
130
- # The compile output is not an executable, but an intermediate compilation result unique to DPC++.
131
161
add_executable (${IP_EXPORT_TARGET} ${SOURCE_FILE} )
132
- add_custom_target (fpga_ip_export DEPENDS ${IP_EXPORT_TARGET} )
133
- set_target_properties (${IP_EXPORT_TARGET} PROPERTIES COMPILE_FLAGS "${FPGA_COMPILE_FLAGS} -DFPGA_HARDWARE ${USER_FLAGS} " )
134
- set_target_properties (${IP_EXPORT_TARGET} PROPERTIES LINK_FLAGS "${FPGA_REPORT_FLAGS} -Xshardware -fsycl-link=early -fsycl-device-code-split=per_kernel ${USER_FLAGS} " )
162
+
163
+ add_custom_target ( displayExportCompileCommand ALL
164
+ ${CMAKE_COMMAND} -E cmake_echo_color --cyan ""
165
+ COMMENT "${CMAKE_CXX_COMPILER} ${IP_EXPORT_COMPILE_FLAGS} -o ${OBJ_FILE} -c ${SOURCE_FILE} " )
166
+
167
+ add_dependencies (${IP_EXPORT_TARGET} displayExportCompileCommand)
168
+ set_target_properties (${IP_EXPORT_TARGET} PROPERTIES COMPILE_FLAGS "${IP_EXPORT_COMPILE_FLAGS} " )
169
+ add_custom_command (TARGET ${IP_EXPORT_TARGET} POST_BUILD COMMENT "${CMAKE_CXX_COMPILER} ${IP_EXPORT_LINK_FLAGS} ${OBJ_FILE} -o ${IP_EXPORT_TARGET} " )
170
+
171
+ set_target_properties (${IP_EXPORT_TARGET} PROPERTIES LINK_FLAGS "${IP_EXPORT_LINK_FLAGS} " )
172
+ add_custom_target (${IP_EXPORT_EXTENSION} DEPENDS ${IP_EXPORT_TARGET} )
0 commit comments