improve verbosity of CMake file. open issue: doesn't print object file · whitepau/oneAPI-samples_fork@98a0dfc (original) (raw)
`@@ -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= to set extra flags for FPGA backend
`
``
23
`+
Use cmake -DUSER_FPGA_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= 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 TARGETNAME.{TARGET_NAME}.TARGETNAME.{EMULATOR_EXTENSION})
`
``
41
`+
set(REPORT_TARGET TARGETNAME.{TARGET_NAME}.TARGETNAME.{REPORT_EXTENSION})
`
``
42
`+
set(SIMULATOR_TARGET TARGETNAME.{TARGET_NAME}.TARGETNAME.{SIMULATOR_EXTENSION})
`
``
43
`+
set(FPGA_TARGET TARGETNAME.{TARGET_NAME}.TARGETNAME.{FPGA_EXTENSION})
`
``
44
`+
set(IP_EXPORT_TARGET TARGETNAME.{TARGET_NAME}.TARGETNAME.{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 WINFLAG{WIN_FLAG} WINFLAG{QACTYPES_COMPILE} ${EXPERIMENTAL_INCLUDE}")
`
64
``
`-
set(EMULATOR_LINK_FLAGS "-fsycl -fintelfpga ${QACTYPES_LINK}")
`
65
``
`-
set(FPGA_COMPILE_FLAGS "-fsycl -fintelfpga -Wall WINFLAG{WIN_FLAG} WINFLAG{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 QACTYPESCOMPILE{QACTYPES_COMPILE} QACTYPESCOMPILE{USER_FLAGS} EXPERIMENTALINCLUDE{EXPERIMENTAL_INCLUDE} EXPERIMENTALINCLUDE{WIN_FLAG}")
`
``
70
`+
set(EMULATOR_LINK_FLAGS "-fsycl -fintelfpga -DFPGA_EMULATOR QACTYPESLINK{QACTYPES_LINK} QACTYPESLINK{USER_FLAGS} ")
`
``
71
`+
set(REPORT_COMPILE_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE QACTYPESCOMPILE{QACTYPES_COMPILE} QACTYPESCOMPILE{USER_FLAGS} EXPERIMENTALINCLUDE{EXPERIMENTAL_INCLUDE} EXPERIMENTALINCLUDE{WIN_FLAG}")
`
``
72
`+
set(REPORT_LINK_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE QACTYPESLINK{QACTYPES_LINK} QACTYPESLINK{USER_FLAGS} ${USER_FPGA_FLAGS} -Xshardware -fsycl-link=early")
`
``
73
`+
set(SIMULATOR_COMPILE_FLAGS "-fsycl -fintelfpga -DFPGA_SIMULATOR QACTYPESCOMPILE{QACTYPES_COMPILE} QACTYPESCOMPILE{USER_FLAGS} EXPERIMENTALINCLUDE{EXPERIMENTAL_INCLUDE} EXPERIMENTALINCLUDE{WIN_FLAG}")
`
``
74
`+
set(SIMULATOR_LINK_FLAGS "-fsycl -fintelfpga -DFPGA_SIMULATOR QACTYPESLINK{QACTYPES_LINK} QACTYPESLINK{USER_FLAGS} ${USER_FPGA_FLAGS} -Xssimulation -Xsghdl=1")
`
``
75
`+
set(FULL_SYSTEM_COMPILE_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE QACTYPESCOMPILE{QACTYPES_COMPILE} QACTYPESCOMPILE{USER_FLAGS} EXPERIMENTALINCLUDE{EXPERIMENTAL_INCLUDE} EXPERIMENTALINCLUDE{WIN_FLAG}")
`
``
76
`+
set(FULL_SYSTEM_LINK_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE QACTYPESLINK{QACTYPES_LINK} QACTYPESLINK{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 QACTYPESCOMPILE{QACTYPES_COMPILE} QACTYPESCOMPILE{USER_FLAGS} EXPERIMENTALINCLUDE{EXPERIMENTAL_INCLUDE} EXPERIMENTALINCLUDE{WIN_FLAG}")
`
``
80
`+
set(IP_EXPORT_LINK_FLAGS "-fsycl -fintelfpga -DFPGA_HARDWARE QACTYPESLINK{QACTYPES_LINK} QACTYPESLINK{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} EMULATORCOMPILEFLAGS−o{EMULATOR_COMPILE_FLAGS} -o EMULATORCOMPILEFLAGS−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 EMULATORTARGETPOSTBUILDCOMMENT"{EMULATOR_TARGET} POST_BUILD COMMENT "EMULATORTARGETPOSTBUILDCOMMENT"{CMAKE_CXX_COMPILER} EMULATORLINKFLAGS{EMULATOR_LINK_FLAGS} EMULATORLINKFLAGS{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= -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} REPORTCOMPILEFLAGS−o{REPORT_COMPILE_FLAGS} -o REPORTCOMPILEFLAGS−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 REPORTTARGETPOSTBUILDCOMMENT"{REPORT_TARGET} POST_BUILD COMMENT "REPORTTARGETPOSTBUILDCOMMENT"{CMAKE_CXX_COMPILER} REPORTLINKFLAGS{REPORT_LINK_FLAGS} REPORTLINKFLAGS{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= -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= -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} SIMULATORCOMPILEFLAGS−o{SIMULATOR_COMPILE_FLAGS} -o SIMULATORCOMPILEFLAGS−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 SIMULATORTARGETPOSTBUILDCOMMENT"{SIMULATOR_TARGET} POST_BUILD COMMENT "SIMULATORTARGETPOSTBUILDCOMMENT"{CMAKE_CXX_COMPILER} SIMULATORLINKFLAGS{SIMULATOR_LINK_FLAGS} SIMULATORLINKFLAGS{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_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_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} FULLSYSTEMCOMPILEFLAGS−o{FULL_SYSTEM_COMPILE_FLAGS} -o FULLSYSTEMCOMPILEFLAGS−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 FPGATARGETPOSTBUILDCOMMENT"{FPGA_TARGET} POST_BUILD COMMENT "FPGATARGETPOSTBUILDCOMMENT"{CMAKE_CXX_COMPILER} FULLSYSTEMLINKFLAGS{FULL_SYSTEM_LINK_FLAGS} FULLSYSTEMLINKFLAGS{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= -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_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} IPEXPORTCOMPILEFLAGS−o{IP_EXPORT_COMPILE_FLAGS} -o IPEXPORTCOMPILEFLAGS−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 IPEXPORTTARGETPOSTBUILDCOMMENT"{IP_EXPORT_TARGET} POST_BUILD COMMENT "IPEXPORTTARGETPOSTBUILDCOMMENT"{CMAKE_CXX_COMPILER} IPEXPORTLINKFLAGS{IP_EXPORT_LINK_FLAGS} IPEXPORTLINKFLAGS{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})
`