Skip to content

Commit 24a8359

Browse files
committed
cmake: improve compile_multiple
1 parent 5a4c388 commit 24a8359

5 files changed

Lines changed: 117 additions & 85 deletions

File tree

cmake/utils.cmake

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
1-
# TODO investigate using interface libraries, will help with erl generation
21
# Compiles the same source file multiple times with different defines
3-
function(compile_multiple target srcfile)
2+
function(compile_multiple objlist iface srcfile)
43
cmake_parse_arguments(PARSE_ARGV 2 "arg" "" "" "OBJECTS")
54

65
foreach(obj ${arg_OBJECTS})
76
add_library(${obj} OBJECT ${srcfile})
87
get_filename_component(def ${obj} NAME_WLE)
98
target_compile_definitions(${obj} PRIVATE "F_${def}")
10-
11-
get_target_property(target_id ${target} INCLUDE_DIRECTORIES)
12-
target_include_directories(${obj} PRIVATE ${target_id})
13-
14-
target_link_libraries(${target} PRIVATE ${obj})
9+
target_link_libraries(${obj} PUBLIC ${iface})
10+
list(APPEND ${objlist} $<TARGET_OBJECTS:${obj}>)
1511
endforeach()
12+
set(${objlist} "${${objlist}}" PARENT_SCOPE)
1613
endfunction()
1714

1815
# Add an erl output for a given target
16+
# TODO doesn't work with targets using compile_multiple
1917
function(target_add_erl target)
2018
add_custom_command(OUTPUT "lib${target}.erl"
2119
COMMAND ${CMAKE_C_COMPILER} -nostdlib -Wl,-r -Wl,-d -o "lib${target}.erl" $<TARGET_OBJECTS:${target}>

ee/kernel/CMakeLists.txt

Lines changed: 70 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -5,67 +5,85 @@ add_subdirectory(src/osdsrc)
55
add_subdirectory(src/srcfile)
66
add_subdirectory(src/tlbsrc)
77

8-
add_library(kernel)
9-
target_include_directories(kernel PUBLIC include)
10-
target_include_directories(kernel PRIVATE
8+
add_library(kernel_iface INTERFACE)
9+
target_include_directories(kernel_iface INTERFACE
1110
${EE_INC}
1211
${PROJECT_SOURCE_DIR}/rpc/cdvd/include
1312
)
1413

15-
compile_multiple(kernel src/sifcmd.c OBJECTS
16-
sif_cmd_send.o _sif_cmd_int_handler.o sif_cmd_main.o
17-
sif_cmd_client.o sif_cmd_remove_cmdhandler.o sif_sreg_get.o
14+
compile_multiple(KERNEL_OBJECTS kernel_iface src/sifcmd.c OBJECTS
15+
_SifSendCmd.o
16+
sceSifSendCmd.o
17+
isceSifSendCmd.o
18+
_SifCmdIntHandler.o
19+
sif_cmd_main.o
20+
sceSifSetCmdBuffer.o
21+
sceSifSetSysCmdBuffer.o
22+
sceSifAddCmdHandler.o
23+
sceSifRemoveCmdHandler.o
24+
sceSifGetSreg.o
25+
sceSifSetSreg.o
1826
)
1927

20-
compile_multiple(kernel src/sifrpc.c OBJECTS
21-
SifBindRpc.o SifCallRpc.o SifRpcGetOtherData.o
22-
SifRegisterRpc.o SifRemoveRpc.o SifSetRpcQueue.o SifRemoveRpcQueue.o SifGetNextRequest.o
23-
SifExecRequest.o SifRpcLoop.o SifRpcMain.o _rpc_get_packet.o
24-
_rpc_get_fpacket.o SifCheckStatRpc.o
28+
compile_multiple(KERNEL_OBJECTS kernel_iface src/sifrpc.c OBJECTS
29+
_rpc_get_packet.o
30+
_rpc_get_fpacket.o
31+
sceSifBindRpc.o
32+
sceSifCallRpc.o
33+
sceSifGetOtherData.o
34+
SifRpcMain.o
35+
sceSifRegisterRpc.o
36+
sceSifRemoveRpc.o
37+
sceSifSetRpcQueue.o
38+
sceSifRemoveRpcQueue.o
39+
sceSifGetNextRequest.o
40+
sceSifExecRequest.o
41+
sceSifRpcLoop.o
42+
sceSifCheckStatRpc.o
2543
)
2644

27-
compile_multiple(kernel src/fileio.c OBJECTS
45+
compile_multiple(KERNEL_OBJECTS kernel_iface src/fileio.c OBJECTS
2846
__fio_internals.o fio_init.o _fio_intr.o fio_sync.o fio_setblockmode.o
29-
fio_exit.o fio_open.o fio_close.o fio_read.o
47+
fio_exit.o fio_open.o fio_close.o fio_read.o
3048
fio_write.o fio_lseek.o fio_mkdir.o _fio_read_intr.o fio_getc.o fio_putc.o
3149
fio_ioctl.o fio_dopen.o fio_dclose.o fio_dread.o fio_getstat.o fio_chstat.o
3250
fio_remove.o fio_format.o fio_rmdir.o fio_gets.o
3351
)
3452

35-
compile_multiple(kernel src/loadfile.c OBJECTS
36-
SifLoadFileInit.o SifLoadFileExit.o _SifLoadModule.o SifLoadModule.o
53+
compile_multiple(KERNEL_OBJECTS kernel_iface src/loadfile.c OBJECTS
54+
SifLoadFileInit.o SifLoadFileExit.o _SifLoadModule.o SifLoadModule.o
3755
SifLoadStartModule.o SifLoadModuleEncrypted.o SifStopModule.o SifUnloadModule.o
3856
SifSearchModuleByName.o SifSearchModuleByAddress.o _SifLoadElfPart.o SifLoadElfPart.o
3957
SifLoadElf.o SifLoadElfEncrypted.o SifIopSetVal.o SifIopGetVal.o
4058
_SifLoadModuleBuffer.o SifLoadModuleBuffer.o SifLoadStartModuleBuffer.o
4159
SifExecModuleBuffer.o SifExecModuleFile.o
4260
)
4361

44-
compile_multiple(kernel src/iopheap.c OBJECTS
62+
compile_multiple(KERNEL_OBJECTS kernel_iface src/iopheap.c OBJECTS
4563
SifInitIopHeap.o SifExitIopHeap.o SifAllocIopHeap.o
4664
SifFreeIopHeap.o SifLoadIopHeap.o
4765
)
4866

49-
compile_multiple(kernel src/iopcontrol.c OBJECTS
67+
compile_multiple(KERNEL_OBJECTS kernel_iface src/iopcontrol.c OBJECTS
5068
SifIopReboot.o SifIopReset.o SifIopIsAlive.o SifIopSync.o __iop_control_internals.o
5169
)
5270

53-
compile_multiple(kernel src/glue.c OBJECTS
71+
compile_multiple(KERNEL_OBJECTS kernel_iface src/glue.c OBJECTS
5472
DIntr.o EIntr.o EnableIntc.o DisableIntc.o EnableDmac.o DisableDmac.o
5573
iEnableIntc.o iDisableIntc.o iEnableDmac.o iDisableDmac.o
5674
SyncDCache.o iSyncDCache.o InvalidDCache.o iInvalidDCache.o
5775
)
5876

59-
compile_multiple(kernel src/sio.c OBJECTS
77+
compile_multiple(KERNEL_OBJECTS kernel_iface src/sio.c OBJECTS
6078
sio_init.o sio_putc.o sio_getc.o sio_write.o sio_read.o sio_puts.o
6179
sio_gets.o sio_getc_block.o sio_flush.o sio_putsn.o
6280
)
6381

64-
compile_multiple(kernel src/rom0_info.c OBJECTS
82+
compile_multiple(KERNEL_OBJECTS kernel_iface src/rom0_info.c OBJECTS
6583
_info_internals.o GetRomNameWithIODriver.o GetRomName.o IsDESRMachineWithIODriver.o IsDESRMachine.o IsT10KWithIODriver.o IsT10K.0
6684
)
6785

68-
compile_multiple(kernel src/osd_config.c OBJECTS
86+
compile_multiple(KERNEL_OBJECTS kernel_iface src/osd_config.c OBJECTS
6987
_config_internals.o converttobcd.o convertfrombcd.o __adjustTime.o IsEarlyJap.o
7088
configGetLanguageWithIODriver.o configGetLanguage.o
7189
configSetLanguageWithIODriver.o configSetLanguage.o
@@ -84,25 +102,15 @@ compile_multiple(kernel src/osd_config.c OBJECTS
84102
configConvertToGmtTime.o configConvertToLocalTimeWithIODriver.o configConvertToLocalTime.o
85103
)
86104

87-
bin_include(osdsrc osdsrc_bin)
88-
target_sources(kernel PRIVATE src/libosd.c src/libosd_full.c src/libosd_common.c osdsrc_bin.c)
89-
90-
bin_include(tlbsrc tlbsrc_bin)
91-
target_sources(kernel PRIVATE src/tlbfunc.c tlbsrc_bin.c)
92-
93-
bin_include(eenull eenull_bin)
94-
bin_include(srcfile srcfile_bin)
95-
target_sources(kernel PRIVATE src/alarm.c srcfile_bin.c)
96-
97-
compile_multiple(kernel src/thread.c OBJECTS
105+
compile_multiple(KERNEL_OBJECTS kernel_iface src/thread.c OBJECTS
98106
_thread_internals.o iWakeupThread.o iRotateThreadReadyQueue.o iSuspendThread.o)
99107

100-
compile_multiple(kernel src/setup.c OBJECTS kCopy.o kCopyBytes.o)
108+
compile_multiple(KERNEL_OBJECTS kernel_iface src/setup.c OBJECTS kCopy.o kCopyBytes.o)
101109

102-
compile_multiple(kernel src/exit.c OBJECTS
110+
compile_multiple(KERNEL_OBJECTS kernel_iface src/exit.c OBJECTS
103111
_exit_internals.o SetArg.o Exit.o ExecPS2.o LoadExecPS2.o ExecOSD.o)
104112

105-
compile_multiple(kernel src/timer.c OBJECTS
113+
compile_multiple(KERNEL_OBJECTS kernel_iface src/timer.c OBJECTS
106114
timer_data.o
107115
SetT2.o
108116
SetT2_COUNT.o
@@ -143,7 +151,7 @@ compile_multiple(kernel src/timer.c OBJECTS
143151
cpu_ticks.o
144152
)
145153

146-
compile_multiple(kernel src/timer_alarm.c OBJECTS
154+
compile_multiple(KERNEL_OBJECTS kernel_iface src/timer_alarm.c OBJECTS
147155
alarm_data.o
148156
ForTimer_InitAlarm.o
149157
AlarmHandler.o
@@ -153,14 +161,14 @@ compile_multiple(kernel src/timer_alarm.c OBJECTS
153161
ReleaseTimerAlarm.o
154162
)
155163

156-
compile_multiple(kernel src/delaythread.c OBJECTS DelayThread.o)
164+
compile_multiple(KERNEL_OBJECTS kernel_iface src/delaythread.c OBJECTS DelayThread.o)
157165

158-
compile_multiple(kernel src/getkernel.c OBJECTS
166+
compile_multiple(KERNEL_OBJECTS kernel_iface src/getkernel.c OBJECTS
159167
GetSyscallHandler.o GetSyscall.o GetExceptionHandler.o GetInterruptHandler.o)
160168

161-
compile_multiple(kernel src/initsys.c OBJECTS _InitSys.o TerminateLibrary.o)
169+
compile_multiple(KERNEL_OBJECTS kernel_iface src/initsys.c OBJECTS _InitSys.o TerminateLibrary.o)
162170

163-
compile_multiple(kernel src/kernel_util.c OBJECTS WaitSemaEx.o)
171+
compile_multiple(KERNEL_OBJECTS kernel_iface src/kernel_util.c OBJECTS WaitSemaEx.o)
164172

165173
# IDK why these were on their own in the makefile, keep it for now
166174
set(EXEC_SYSCALLS KExit.o _LoadExecPS2.o _ExecPS2.o)
@@ -172,7 +180,7 @@ set(IWAKEUP_THREAD_SYSCALL _iWakeupThread.o)
172180
set(ISUSPEND_THREAD_SYSCALL _iSuspendThread.o)
173181
set(TLB_SYSCALLS PutTLBEntry.o iPutTLBEntry.o _SetTLBEntry.o iSetTLBEntry.o GetTLBEntry.o iGetTLBEntry.o ProbeTLBEntry.o iProbeTLBEntry.o ExpandScratchPad.o)
174182

175-
compile_multiple(kernel src/kernel.S OBJECTS
183+
compile_multiple(KERNEL_OBJECTS kernel_iface src/kernel.S OBJECTS
176184
ResetEE.o SetGsCrt.o ${EXEC_SYSCALLS}
177185
RFU009.o AddSbusIntcHandler.o RemoveSbusIntcHandler.o Interrupt2Iop.o
178186
SetVTLBRefillHandler.o SetVCommonHandler.o SetVInterruptHandler.o
@@ -196,20 +204,34 @@ compile_multiple(kernel src/kernel.S OBJECTS
196204
EnableIntcHandler.o iEnableIntcHandler.o DisableIntcHandler.o iDisableIntcHandler.o
197205
EnableDmacHandler.o iEnableDmacHandler.o DisableDmacHandler.o iDisableDmacHandler.o
198206
KSeg0.o EnableCache.o DisableCache.o GetCop0.o FlushCache.o CpuConfig.o
199-
iGetCop0.o iFlushCache.o RFU105.o iCpuConfig.o SifStopDma.o
207+
iGetCop0.o iFlushCache.o RFU105.o iCpuConfig.o sceSifStopDma.o
200208
SetCPUTimerHandler.o SetCPUTimer.o SetOsdConfigParam2.o
201209
GetOsdConfigParam2.o GsGetIMR.o iGsGetIMR.o GsPutIMR.o iGsPutIMR.o
202-
SetPgifHandler.o SetVSyncFlag.o SetSyscall.o SifDmaStat.o iSifDmaStat.o
203-
SifSetDma.o iSifSetDma.o SifSetDChain.o iSifSetDChain.o SifSetReg.o
204-
SifGetReg.o ${EXECOSD_SYSCALL} Deci2Call.o PSMode.o MachineType.o GetMemorySize.o _GetGsDxDyOffset.o
205-
_InitTLB.o SetMemoryMode.o
206-
SifWriteBackDCache.o _SyncDCache.o _InvalidDCache.o __errno.o errno.o
210+
SetPgifHandler.o SetVSyncFlag.o SetSyscall.o sceSifDmaStat.o isceSifDmaStat.o
211+
sceSifSetDma.o isceSifSetDma.o sceSifSetDChain.o isceSifSetDChain.o sceSifSetReg.o
212+
sceSifGetReg.o ${EXECOSD_SYSCALL} Deci2Call.o PSMode.o MachineType.o GetMemorySize.o _GetGsDxDyOffset.o
213+
_InitTLB.o SetMemoryMode.o GetMemoryMode.o
214+
sceSifWriteBackDCache.o _SyncDCache.o _InvalidDCache.o __errno.o errno.o
207215
strncpy.o strlen.o memcpy.o memset.o __syscall.o GPfuncs.o _print.o
208216
)
209217

218+
add_library(kernel ${KERNEL_OBJECTS})
219+
target_link_libraries(kernel PRIVATE kernel_iface)
220+
221+
bin_include(osdsrc osdsrc_bin)
222+
target_sources(kernel PRIVATE src/libosd.c src/libosd_full.c src/libosd_common.c osdsrc_bin.c)
223+
224+
bin_include(tlbsrc tlbsrc_bin)
225+
target_sources(kernel PRIVATE src/tlbfunc.c tlbsrc_bin.c)
226+
227+
bin_include(eenull eenull_bin)
228+
bin_include(srcfile srcfile_bin)
229+
target_sources(kernel PRIVATE src/alarm.c srcfile_bin.c)
230+
210231
target_sources(kernel PRIVATE src/setup_syscalls.S src/debug.c src/erl-support.c)
232+
target_include_directories(kernel PUBLIC include)
211233

212234
file(GLOB KERNEL_INCLUDE_FILES "include/*.h*")
213235
set_target_properties(kernel PROPERTIES PUBLIC_HEADER "${KERNEL_INCLUDE_FILES}")
214236

215-
install(TARGETS kernel)
237+
install(TARGETS kernel)

ee/libcglue/CMakeLists.txt

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
add_library(cglue)
2-
target_include_directories(cglue PUBLIC ${EE_INC} include)
3-
target_sources(cglue PRIVATE src/rtc.c)
4-
target_link_libraries(cglue PRIVATE kernel)
1+
add_library(cglue_iface INTERFACE)
2+
target_include_directories(cglue_iface INTERFACE ${EE_INC} include)
53

6-
compile_multiple(cglue src/timezone.c OBJECTS
4+
compile_multiple(CGLUE_OBJECTS cglue_iface src/timezone.c OBJECTS
75
_libcglue_timezone_update.o ps2sdk_setTimezone.o ps2sdk_setDaylightSaving.o
86
)
97

10-
compile_multiple(cglue src/fdman.c OBJECTS
8+
compile_multiple(CGLUE_OBJECTS cglue_iface src/fdman.c OBJECTS
119
__fdman_sema.o
1210
__descriptor_data_pool.o
1311
__descriptormap.o
@@ -19,7 +17,7 @@ compile_multiple(cglue src/fdman.c OBJECTS
1917
__fdman_release_descriptor.o
2018
)
2119

22-
compile_multiple(cglue src/init.c OBJECTS
20+
compile_multiple(CGLUE_OBJECTS cglue_iface src/init.c OBJECTS
2321
__gprof_init.o
2422
__gprof_cleanup.o
2523
__libpthreadglue_init.o
@@ -29,19 +27,19 @@ compile_multiple(cglue src/init.c OBJECTS
2927
_libcglue_args_parse.o
3028
)
3129

32-
compile_multiple(cglue src/sleep.c OBJECTS
30+
compile_multiple(CGLUE_OBJECTS cglue_iface src/sleep.c OBJECTS
3331
nanosleep.o
3432
)
3533

36-
compile_multiple(cglue src/sjis.c OBJECTS
34+
compile_multiple(CGLUE_OBJECTS cglue_iface src/sjis.c OBJECTS
3735
isSpecialSJIS.o isSpecialASCII.o strcpy_ascii.o strcpy_sjis.o
3836
)
3937

40-
compile_multiple(cglue src/cwd.c OBJECTS
38+
compile_multiple(CGLUE_OBJECTS cglue_iface src/cwd.c OBJECTS
4139
__cwd.o __cwd_len.o __get_drive.o getcwd.o __path_absolute.o __init_cwd.o
4240
)
4341

44-
compile_multiple(cglue src/ps2sdkapi.c OBJECTS
42+
compile_multiple(CGLUE_OBJECTS cglue_iface src/ps2sdkapi.c OBJECTS
4543
__fioOpsInitialize.o
4644
__fioOpenHelper.o
4745
__fioGetFdHelper.o
@@ -63,7 +61,7 @@ compile_multiple(cglue src/ps2sdkapi.c OBJECTS
6361
_libcglue_fdman_inet_ops.o
6462
)
6563

66-
compile_multiple(cglue src/glue.c OBJECTS
64+
compile_multiple(CGLUE_OBJECTS cglue_iface src/glue.c OBJECTS
6765
__dummy_passwd.o
6866
__transform_errno.o
6967
__transform64_errno.o
@@ -140,7 +138,7 @@ compile_multiple(cglue src/glue.c OBJECTS
140138
dup2.o
141139
)
142140

143-
compile_multiple(cglue src/lock.c OBJECTS
141+
compile_multiple(CGLUE_OBJECTS cglue_iface src/lock.c OBJECTS
144142
__lock___sfp_recursive_mutex.o
145143
__lock___atexit_recursive_mutex.o
146144
__lock___at_quick_exit_mutex.o
@@ -163,19 +161,19 @@ compile_multiple(cglue src/lock.c OBJECTS
163161
__locks_deinit.o
164162
)
165163

166-
compile_multiple(cglue src/netdb.c OBJECTS
164+
compile_multiple(CGLUE_OBJECTS cglue_iface src/netdb.c OBJECTS
167165
gethostbyaddr.o
168166
gethostbyname.o
169167
gethostbyname_r.o
170168
freeaddrinfo.o
171169
getaddrinfo.o
172170
)
173171

174-
compile_multiple(cglue src/select.c OBJECTS
172+
compile_multiple(CGLUE_OBJECTS cglue_iface src/select.c OBJECTS
175173
select.o
176174
)
177175

178-
compile_multiple(cglue src/socket.c OBJECTS
176+
compile_multiple(CGLUE_OBJECTS cglue_iface src/socket.c OBJECTS
179177
socket.o
180178
accept.o
181179
bind.o
@@ -202,4 +200,10 @@ compile_multiple(cglue src/socket.c OBJECTS
202200
libcglue_dns_getserver.o
203201
)
204202

205-
install(TARGETS cglue)
203+
204+
add_library(cglue ${CGLUE_OBJECTS})
205+
target_include_directories(cglue PUBLIC include)
206+
target_sources(cglue PRIVATE src/rtc.c)
207+
target_link_libraries(cglue PRIVATE kernel cglue_iface)
208+
209+
install(TARGETS cglue)

ee/rpc/cdvd/CMakeLists.txt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
add_library(cdvd)
2-
target_include_directories(cdvd PUBLIC include)
3-
target_include_directories(cdvd PRIVATE ${EE_INC})
1+
add_library(cdvd_iface INTERFACE)
2+
target_include_directories(cdvd_iface INTERFACE include)
3+
target_include_directories(cdvd_iface INTERFACE ${EE_INC})
44

5-
compile_multiple(cdvd src/libcdvd.c OBJECTS
5+
compile_multiple(CDVD_OBJECTS cdvd_iface src/libcdvd.c OBJECTS
66
_libcdvd_internals.o sceCdInit.o sceCdIntToPos.o sceCdPosToInt.o
77
sceCdSearchFile.o sceCdDiskReady.o _CdSemaInit.o _CdSemaExit.o
88
sceCdInitEeCB.o sceCdCallback.o _CdGenericCallbackFunction.o
99
)
1010

11-
compile_multiple(cdvd src/ncmd.c OBJECTS
11+
compile_multiple(CDVD_OBJECTS cdvd_iface src/ncmd.c OBJECTS
1212
_ncmd_internals.o _CdAlignReadBuffer.o sceCdRead.o sceCdReadDVDV.o
1313
sceCdReadCDDA.o sceCdGetToc.o sceCdSeek.o sceCdStandby.o sceCdStop.o sceCdPause.o
1414
sceCdApplyNCmd.o sceCdReadIOPMem.o sceCdNCmdDiskReady.o
@@ -17,7 +17,7 @@ compile_multiple(cdvd src/ncmd.c OBJECTS
1717
_CdCheckNCmd.o sceCdReadKey.o
1818
)
1919

20-
compile_multiple(cdvd src/scmd.c OBJECTS
20+
compile_multiple(CDVD_OBJECTS cdvd_iface src/scmd.c OBJECTS
2121
_scmd_internals.o sceCdReadClock.o ps2time.o sceCdWriteClock.o sceCdGetDiskType.o
2222
sceCdGetError.o sceCdTrayReq.o sceCdApplySCmd.o sceCdStatus.o sceCdBreak.o
2323
_CdCheckSCmd.o sceCdCtrlADout.o sceCdMV.o sceCdReadSUBQ.o
@@ -28,6 +28,10 @@ compile_multiple(cdvd src/scmd.c OBJECTS
2828
_CdSyncS.o
2929
)
3030

31+
add_library(cdvd ${CDVD_OBJECTS})
32+
target_link_libraries(cdvd PRIVATE cdvd_iface)
33+
target_include_directories(cdvd PUBLIC include)
34+
3135
target_sources(cdvd PRIVATE src/erl-support.c)
3236
install(TARGETS cdvd)
33-
#target_add_erl(cdvd) TODO doesn't work with the object libraries
37+
#target_add_erl(cdvd) TODO doesn't work with the object libraries

0 commit comments

Comments
 (0)