Skip to content

Commit 98a0dfc

Browse files
committed
improve verbosity of CMake file. open issue: doesn't print object file
1 parent 4736d41 commit 98a0dfc

File tree

1 file changed

+96
-58
lines changed
  • DirectProgramming/DPC++FPGA/Tutorials/GettingStarted/experimental/fpga_template/src

1 file changed

+96
-58
lines changed

DirectProgramming/DPC++FPGA/Tutorials/GettingStarted/experimental/fpga_template/src/CMakeLists.txt

Lines changed: 96 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,28 @@ if(NOT DEFINED FPGA_DEVICE)
2020
set(FPGA_DEVICE "intel_s10sx_pac:pac_s10_usm")
2121
endif()
2222

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
2424
# compilation.
25-
set(USER_HARDWARE_FLAGS "${USER_HARDWARE_FLAGS}")
25+
set(USER_FPGA_FLAGS "${USER_FPGA_FLAGS}")
2626

2727
# Use cmake -DUSER_FLAGS=<flags> to set extra flags for general compilation.
2828
set(USER_FLAGS "${USER_FLAGS}")
2929
###############################################################################
3030
### no changes after here
3131
###############################################################################
3232

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+
3339
# 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})
3945

4046
# FPGA device selection
4147
if(DEFINED FPGA_DEVICE)
@@ -51,7 +57,7 @@ if(WIN32)
5157
else()
5258
# add qactypes for Linux
5359
set(QACTYPES_COMPILE "-qactypes")
54-
set(QACTYPES_LINK "-qactypes")
60+
set(QACTYPES_LINK "")
5561
endif()
5662

5763
# A DPC++ ahead-of-time (AoT) compile processes the device code in two stages.
@@ -60,75 +66,107 @@ endif()
6066
# 2. The "link" stage invokes the compiler's FPGA backend before linking. For
6167
# this reason, FPGA backend flags must be passed as link flags in CMake.
6268

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})
6893

6994
###############################################################################
7095
### FPGA Emulator
7196
###############################################################################
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
7797
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})
81109

82110
###############################################################################
83111
### Report
84112
###############################################################################
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++.
89113
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})
94125

95126
###############################################################################
96127
### FPGA Simulation
97128
###############################################################################
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})
107141

108142
###############################################################################
109143
### FPGA Board
110144
###############################################################################
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})
120157

121158
###############################################################################
122-
### FPGA IP Export (apparently only necessary until 'correct' implementation of host pipes)
159+
### FPGA IP Export (only necessary until native host pipes)
123160
###############################################################################
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++.
131161
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

Comments
 (0)