cmake_minimum_required(VERSION 3.16)

project(CoreLibrary)

set(SOURCES
    "AcDbProxyAcGiEntity.cpp"
    "AcDbX3dSolid.cpp"
    "AcDbXFloorFrame.cpp"
    "AcPolylineJig.cpp"
    "Aec3dFaceplan.cpp"
    "AECAngleWatch.cpp"
    "AecComplexCurveDraw.cpp"
    "AecCoverBooleanOper.cpp"
    "AecDb3dRoad.cpp"
    "AecDb3dRoadAxisLine.cpp"
    "AecDb3dRoadFitting.cpp"
    "AecDbArcStair.cpp"
    "AecDbAssembleWell.cpp"
    "AecDbBDPipeBase.cpp"
    "AecDbBeam.cpp"
    "AecDbBlackHoleEntity.cpp"
    "AecDbBossHolder.cpp"
    "AecDbBuriedOutletDoghouse.cpp"
    "AecDbCableDoghouse.cpp"
    "AecDbClimbStair.cpp"
    "AecDbColumn.cpp"
    "AecDbConnectDoghouse.cpp"
    "AecDbCornerStair.cpp"
    "AecDbCrossStair.cpp"
    "AecDbDirPosition.cpp"
    "AecDbDoubleMulStair.cpp"
    "AecDbEarthWorm.cpp"
    "AecDbEarthWormFitting.cpp"
    "AecDbECableTray.cpp"
    "AecDbECFitting.cpp"
    "AecDbEscapeHatchHouse.cpp"
    "AecDbEwCable.cpp"
    "AecDbEwEquipment.cpp"
    "AecDbEwFitting.cpp"
    "AecDbEwFlexiblePipe.cpp"
    "AecDbEwPipe.cpp"
    "AecDbEwPipeBase.cpp"
    "AecDbEwPipeDim.cpp"
    "AecDbExtendedEntity.cpp"
    "AecDbFlume.cpp"
    "AecDbGlassCurtainWall.cpp"
    "AecDbGuardBar.cpp"
    "AecDbHanger.cpp"
    "AecDbHolder.cpp"
    "AecDbHvacDuct.cpp"
    "AecDbHvacFitting.cpp"
    "AecDbInsulation.cpp"
    "AecDbLandForm.cpp"
    "AecDbLineStair.cpp"
    "AecDbMRPLineStair.cpp"
    "AecDbMultiPartEntity.cpp"
    "AecDbOpening.cpp"
    "AecDbParaLlelStair.cpp"
    "AecDbParamEquipment.cpp"
    "AecDbPathSectionSymbDim.cpp"
    "AecDbPipeDoghouse.cpp"
    "aecdbpipehanger.cpp"
    "AecDbPoolCell.cpp"
    "AecDbPortRoom.cpp"
    "AecDbRectCornerStair.cpp"
    "AecDbRiverGroove.cpp"
    "AecDbRoof.cpp"
    "AecDbScissorsStair.cpp"
    "AecDbSectionView.cpp"
    "AecDbShEarthWorm.cpp"
    "AecDbSlab.cpp"
    "AecDbSludgePipe.cpp"
    "AecDbTongWall.cpp"
    "AecDbTriangleStair.cpp"
    "AecDbVenDoghouse.cpp"
    "AecDbWall.cpp"
    "AecDbWeir.cpp"
    "AecDbWell.cpp"
    "AecDbX3dGroup.cpp"
    "AecDbX3dPart.cpp"
    "AecDbX3dPartEntity.cpp"
    "AecDbXApron.cpp"
    "AecDbXBG.cpp"
    "AecDbXDormerWindow.cpp"
    "AecDbXEquipment.cpp"
    "AecDbXStep.cpp"
    "AecDbXXXDoghouse.cpp"
    "AecDbZLineStair.cpp"
    "AecEwEndDeepCloneAssocMake.cpp"
    "AecFloorViewDataRecord.cpp"
    "AecInfCmdGrip.cpp"
    "AecMInterfaces.cpp"
    "AecNodeDoubleClickEdit.cpp"
    "AECStatusRecord.cpp"
    "AecSupportFunc.cpp"
    "AecUnknownContext.cpp"
    "AecUnknownSubEntityTraits.cpp"
    "AecUnknownViewportDraw.cpp"
    "AecUnknownViewportGeometry.cpp"
    "AecUnknownWorldDraw.cpp"
    "AecUnknownWorldGeometry.cpp"
    "AecWall2DJoin.cpp"
    "AecWall3DJoin.cpp"
    "AecWallJoinDraw.cpp"
    "AuxTools.cpp"
    "BCMenu.cpp"
    "BitAnswer.cpp"
    "BrepOper.cpp"
    "DrawingFlowData.cpp"
    "encryption.cpp"
    "EquInsDirJig.cpp"
    "Geom.cpp"
    "geometry2json.cpp"
    "hzip.cpp"
    "ImpHvacCross.cpp"
    "ImpHvacElbow.cpp"
    "ImpHvacOffset.cpp"
    "ImpHvacReducer.cpp"
    "ImpHvacTee.cpp"
    "ImpMD5.cpp"
    "InternetSessionEx.cpp"
    "KTCadTempOverrides.cpp"
    "KTCadUtility.cpp"
    "KTCADUtilityEx.cpp"
    "KTEntityDragMgr.cpp"
    "KTEntityDumb.cpp"
    "KTInfoMonitor.cpp"
    "KTObjLifeMgr.cpp"
    "KTSetting.cpp"
    "KTTempTol.cpp"
    "MFCDbDwgFiler.cpp"
    "ParamEquImpl.cpp"
    "parseFamilyForRevit.cpp"
    "PointInPoly.cpp"
    "UIIBorderLine.cpp"
    "UIIBoundary.cpp"
    "UIITable.cpp"
    "unzip.cpp"
    "XEquipmentImpl.cpp"
    "aecdbterrain.cpp"
    "aecdbgroupopening.cpp"
    "aecdbzlinexopening.cpp"
    "aecdblinesegstair.cpp"
    "aecdbbasestair.cpp"
    "./hgrid/dimension.cxx"
    "./hgrid/hgrid.cxx"
    "./hgrid/hpolygon.cxx"
    "./hgrid/mgconst.cxx"
    "./hgrid/mgexcept.cxx"
    "./implement/stdafx.cpp"
    "aecdbarcsegstair.cpp"
    "aecdbrectstair.cpp"
    "aecdbascent.cpp"
    "aecdbbalcony.cpp"
    "breptools.cpp"
    "aecdbcamera.cpp"
    "hlrcutoption.cpp"
    "aecdbpingfadim.cpp"
    "aecdbdimscalezone.cpp"
    "aecdbjoggedcamera.cpp"
)

get_encryption_modes(ENCRYPTION_MODES)

foreach(MODE IN LISTS ENCRYPTION_MODES)

    set(_Target "CoreLibrary_${MODE}")

    add_library(${_Target} STATIC ${SOURCES})

    target_precompile_headers(${_Target} PRIVATE ./implement/StdAfx.h)

    target_link_objectarx(${_Target} EARTHWORM_EXPORT ".lib")

    target_include_directories(${_Target} PRIVATE "./implement")

    target_link_libraries(${_Target} PRIVATE 
        $<$<CONFIG:Debug>:CoreImplement>
        ThirdParty::modernGlue
    )

    set_encryption_definitions_and_output_path(${_Target} "${MODE}")

    set_target_properties(${_Target} PROPERTIES FOLDER "SH/Core/CoreLibrary")

endforeach()